Browse Source

完善UID系统2.0

tanghongbin 4 years ago
parent
commit
3f093e4114

BIN
AnsjerUIDManage.rar


+ 15 - 4
AnsjerUIDManage/settings.py

@@ -107,6 +107,17 @@ WSGI_APPLICATION = 'AnsjerUIDManage.wsgi.application'
 # Database
 # Database
 # https://docs.djangoproject.com/en/3.0/ref/settings/#databases
 # 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 = {
 DATABASES = {
     # 'default': {
     # 'default': {
     #     'ENGINE': 'django.db.backends.sqlite3',
     #     'ENGINE': 'django.db.backends.sqlite3',
@@ -115,10 +126,10 @@ DATABASES = {
     # }
     # }
     'default': {
     'default': {
         'ENGINE': 'django.db.backends.mysql',
         'ENGINE': 'django.db.backends.mysql',
-        'NAME': 'ansjer_uid',
-        'USER': 'root',
-        'PASSWORD': 'ansjer.x.x',
-        'HOST': 'localhost',
+        'NAME': DATABASES_NAME,
+        'USER': USER_NAME,
+        'PASSWORD': USER_PASSWORD,
+        'HOST': HOST,
         'PORT': '3306',
         'PORT': '3306',
         'OPTIONS': {'charset': 'utf8mb4', 'use_unicode': True, 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"},
         'OPTIONS': {'charset': 'utf8mb4', 'use_unicode': True, 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"},
         'AUTOCOMMIT': True
         'AUTOCOMMIT': True

+ 7 - 3
AnsjerUIDManage/urls.py

@@ -16,15 +16,19 @@ Including another URLconf
 from django.contrib import admin
 from django.contrib import admin
 from django.urls import path, re_path
 from django.urls import path, re_path
 
 
-from Controller import UserController, FileController, UIDController, LogController, SalesController
+from Controller import UserController, FileController, UIDController, LogController, SalesController, \
+    OrderTaskController, HistoryUIDController
 
 
 urlpatterns = [
 urlpatterns = [
     path('admin/', admin.site.urls),
     path('admin/', admin.site.urls),
     re_path('user/(?P<operation>.*)', UserController.UserView.as_view()),
     re_path('user/(?P<operation>.*)', UserController.UserView.as_view()),
-    path('upload', FileController.UploadUIDFileView.as_view()),
-    path('download', FileController.DownloadUIDFileView.as_view()),
     re_path('uid/(?P<operation>.*)', UIDController.UIDView.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('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('sales', SalesController.SalesView.as_view()),
     path('device/online', SalesController.DeviceOnlineView.as_view())
     path('device/online', SalesController.DeviceOnlineView.as_view())
+
 ]
 ]

+ 5 - 1
Controller/FileController.py

@@ -2,6 +2,7 @@
 # -*- coding: utf-8 -*-
 # -*- coding: utf-8 -*-
 import base64
 import base64
 import json
 import json
+import logging
 import os
 import os
 import time
 import time
 import zipfile
 import zipfile
@@ -129,6 +130,8 @@ class UploadUIDFileView(View):
                     # print(repr(e))
                     # print(repr(e))
                     if savePoint:
                     if savePoint:
                         transaction.rollback(savePoint)
                         transaction.rollback(savePoint)
+                    djangoLogger = logging.getLogger('django')
+                    djangoLogger.exception(repr(e))
                     return response.json(174, str(e))
                     return response.json(174, str(e))
                 else:
                 else:
                     savePoint = None
                     savePoint = None
@@ -521,4 +524,5 @@ class DownloadUIDFileView(View):
         response['content_type'] = "application/octet-stream"
         response['content_type'] = "application/octet-stream"
         response['Content-Disposition'] = 'attachment; filename=UID' + time.strftime('_%Y_%m_%d_%H_%M_%S',
         response['Content-Disposition'] = 'attachment; filename=UID' + time.strftime('_%Y_%m_%d_%H_%M_%S',
                                                                                      time.localtime()) + '.zip'
                                                                                      time.localtime()) + '.zip'
-        return response
+        return response
+

+ 402 - 0
Controller/HistoryUIDController.py

@@ -0,0 +1,402 @@
+#!/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)

+ 14 - 3
Controller/LogController.py

@@ -38,15 +38,17 @@ class LogView(View):
             return self.do_query(request_dict, token, response)
             return self.do_query(request_dict, token, response)
         elif operation == 'queryAll':
         elif operation == 'queryAll':
             return self.do_query_all(request_dict, token, response)
             return self.do_query_all(request_dict, token, response)
+        elif operation == 'delete':
+            return self.do_delete(request_dict, response)
         else:
         else:
             return response.json(404)
             return response.json(404)
 
 
     def do_query(self, request_dict, token: TokenObject, response):
     def do_query(self, request_dict, token: TokenObject, response):
         page = request_dict.get('page', None)
         page = request_dict.get('page', None)
-        line = request_dict.get('line', None)
+        line = request_dict.get('limit', None)
 
 
         if page and line:
         if page and line:
-            log_qs = LogModel.objects.filter(user__id=token.userID).values('id', 'operation', 'time', 'ip')
+            log_qs = LogModel.objects.filter(user__id=token.userID).values('id', 'operation', 'time', 'ip', 'user__username')
             if log_qs.exists():
             if log_qs.exists():
                 page = int(page)
                 page = int(page)
                 line = int(line)
                 line = int(line)
@@ -65,4 +67,13 @@ class LogView(View):
             count = log_qs.count()
             count = log_qs.count()
             return response.json(0, {'count': count, 'data': list(log_qs)})
             return response.json(0, {'count': count, 'data': list(log_qs)})
         else:
         else:
-            return response.json(0, {'count': 0, 'data': []})
+            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)

+ 104 - 0
Controller/OrderTaskController.py

@@ -0,0 +1,104 @@
+#!/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)

+ 161 - 1
Controller/UIDController.py

@@ -15,6 +15,7 @@ from Model.models import UIDModel, UserModel, UserUIDModel, HistoryUIDModel
 from Object.RedisObject import RedisObject
 from Object.RedisObject import RedisObject
 from Object.ResponseObject import ResponseObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Object.TokenObject import TokenObject
+from Service.ModelService import ModelService
 
 
 
 
 class UIDView(View):
 class UIDView(View):
@@ -53,6 +54,18 @@ class UIDView(View):
             return self.download_txt(token, response)
             return self.download_txt(token, response)
         elif operation == 'download_1':
         elif operation == 'download_1':
             return self.download_txt_two(token, response)
             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:
         else:
             return response.json(309)
             return response.json(309)
 
 
@@ -161,7 +174,6 @@ class UIDView(View):
                 updates.append(item)
                 updates.append(item)
 
 
                 if len(datas) % 5000 == 0:
                 if len(datas) % 5000 == 0:
-                    # count += 1
                     result = self.do_update(datas, updates, savePoint)
                     result = self.do_update(datas, updates, savePoint)
                     if result != 0:
                     if result != 0:
                         return response.json(result)
                         return response.json(result)
@@ -317,3 +329,151 @@ class UIDView(View):
         response['Content-Disposition'] = 'attachment;filename=' + filename
         response['Content-Disposition'] = 'attachment;filename=' + filename
 
 
         return response
         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)
+

+ 143 - 5
Controller/UserController.py

@@ -1,5 +1,7 @@
 #!/usr/bin/env python3
 #!/usr/bin/env python3
 # -*- coding: utf-8 -*-
 # -*- coding: utf-8 -*-
+import time
+
 from django.db.models import Q
 from django.db.models import Q
 from django.utils.decorators import method_decorator
 from django.utils.decorators import method_decorator
 from django.views import View
 from django.views import View
@@ -8,6 +10,7 @@ from django.views.decorators.csrf import csrf_exempt
 from Model.models import UserModel
 from Model.models import UserModel
 from Object.ResponseObject import ResponseObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Object.TokenObject import TokenObject
+from Service.ModelService import ModelService
 
 
 
 
 class UserView(View):
 class UserView(View):
@@ -30,16 +33,35 @@ class UserView(View):
         return self.validation(request_dict, operation)
         return self.validation(request_dict, operation)
 
 
     def validation(self, request_dict, operation):
     def validation(self, request_dict, operation):
+
         if operation == 'login':
         if operation == 'login':
             return self.login(request_dict)
             return self.login(request_dict)
         elif operation == 'logout':
         elif operation == 'logout':
             return self.logout(request_dict)
             return self.logout(request_dict)
-        elif operation == 'query':
-            return self.do_query(request_dict)
-        elif operation == 'modify':
-            return self.do_modify_password(request_dict)
         else:
         else:
-            return ResponseObject().json(309)
+            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):
     def login(self, request_dict):
         username = request_dict.get('username', None)
         username = request_dict.get('username', None)
@@ -156,3 +178,119 @@ class UserView(View):
             return response.json(0)
             return response.json(0)
         else:
         else:
             return response.json(0)
             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)

+ 3 - 0
Model/models.py

@@ -10,6 +10,8 @@ class UserModel(models.Model):
     permission = models.CharField(max_length=24, null=False, verbose_name='权限')
     permission = models.CharField(max_length=24, null=False, verbose_name='权限')
     login_time = models.IntegerField(blank=True, default=0, verbose_name='登录时间')
     login_time = models.IntegerField(blank=True, default=0, verbose_name='登录时间')
     online = models.SmallIntegerField(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:
     class Meta:
         verbose_name = '用户表'
         verbose_name = '用户表'
@@ -28,6 +30,7 @@ class UIDModel(models.Model):
     area = models.SmallIntegerField(default=0, verbose_name='区域')  #0:国内;1:国外
     area = models.SmallIntegerField(default=0, verbose_name='区域')  #0:国内;1:国外
 
 
     class Meta:
     class Meta:
+        ordering = ('-add_time',)
         verbose_name = 'uid表'
         verbose_name = 'uid表'
         verbose_name_plural = verbose_name
         verbose_name_plural = verbose_name
         db_table = 'uid'
         db_table = 'uid'

+ 7 - 2
Service/LogMiddleware.py

@@ -50,8 +50,13 @@ def add_log(request, response):
         if response.status_code != 200:
         if response.status_code != 200:
             return
             return
     else:
     else:
-        jsonObject = json.loads(response.content.decode().strip())
-        code = jsonObject.get('code')
+        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:
         if code is None or code != 0 and response.status_code != 200:
             print('code is {code}'.format(code=code))
             print('code is {code}'.format(code=code))
             return
             return

+ 21 - 0
Service/ModelService.py

@@ -0,0 +1,21 @@
+#!/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 - 148
web/UM-admin/admin-cate.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="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 layui-form-pane">
-          <input class="layui-input" placeholder="分类名" name="cate_name">
-          <button class="layui-btn"  lay-submit="" lay-filter="sreach"><i class="layui-icon"></i>增加</button>
-        </form>
-      </div>
-      <xblock>
-        <button class="layui-btn layui-btn-danger" onclick="delAll()"><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>
-        </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 class="td-manage">
-              <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 - 178
web/UM-admin/admin-rule.html

@@ -1,178 +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>导航元素88</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 layui-form-pane">
-          <div class="layui-input-inline">
-            <select name="cateid">
-              <option>规则分类</option>
-              <option>文章</option>
-              <option>会员</option>
-              <option>权限</option>
-            </select>
-          </div>
-          <div class="layui-input-inline">
-            <select name="contrller">
-              <option>请控制器</option>
-              <option>Index</option>
-              <option>Goods</option>
-              <option>Cate</option>
-            </select>
-          </div>
-          <div class="layui-input-inline">
-            <select name="action">
-              <option>请方法</option>
-              <option>add</option>
-              <option>login</option>
-              <option>checklogin</option>
-            </select>
-          </div>
-          <input class="layui-input" placeholder="权限名" name="cate_name" >
-          <button class="layui-btn"  lay-submit="" lay-filter="sreach"><i class="layui-icon"></i>增加</button>
-        </form>
-      </div>
-      <xblock>
-        <button class="layui-btn layui-btn-danger" onclick="delAll()"><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>
-        </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/user/userlist</td>
-            <td>会员列表</td>
-            <td>会员相关</td>
-            <td class="td-manage">
-              <a title="编辑"  onclick="x_admin_show('编辑','xxx.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 - 231
web/UM-admin/cate.html

@@ -1,231 +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 layui-form-pane">
-          <input class="layui-input" placeholder="分类名" name="cate_name">
-          <button class="layui-btn"  lay-submit="" lay-filter="sreach"><i class="layui-icon"></i>增加</button>
-        </form>
-      </div>
-      <blockquote class="layui-elem-quote">每个tr 上有两个属性 cate-id='1' 当前分类id fid='0' 父级id ,顶级分类为 0,有子分类的前面加收缩图标<i class="layui-icon x-show" status='true'>&#xe623;</i></blockquote>
-      <xblock>
-        <button class="layui-btn layui-btn-danger" onclick="delAll()"><i class="layui-icon"></i>批量删除</button>
-        <span class="x-right" style="line-height:40px">共有数据:88 条</span>
-      </xblock>
-      <table class="layui-table layui-form">
-        <thead>
-          <tr>
-            <th width="20">
-              <div class="layui-unselect header layui-form-checkbox" lay-skin="primary"><i class="layui-icon">&#xe605;</i></div>
-            </th>
-            <th width="70">ID</th>
-            <th>栏目名</th>
-            <th width="50">排序</th>
-            <th width="50">状态</th>
-            <th width="220">操作</th>
-        </thead>
-        <tbody class="x-cate">
-          <tr cate-id='1' fid='0' >
-            <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>
-              <i class="layui-icon x-show" status='true'>&#xe623;</i>
-              产品管理
-            </td>
-            <td><input type="text" class="layui-input x-sort" name="order" value="1"></td>
-            <td>
-              <input type="checkbox" name="switch"  lay-text="开启|停用"  checked="" lay-skin="switch">
-            </td>
-            <td class="td-manage">
-              <button class="layui-btn layui-btn layui-btn-xs"  onclick="x_admin_show('编辑','admin-edit.html')" ><i class="layui-icon">&#xe642;</i>编辑</button>
-              <button class="layui-btn layui-btn-warm layui-btn-xs"  onclick="x_admin_show('编辑','admin-edit.html')" ><i class="layui-icon">&#xe642;</i>添加子栏目</button>
-              <button class="layui-btn-danger layui-btn layui-btn-xs"  onclick="member_del(this,'要删除的id')" href="javascript:;" ><i class="layui-icon">&#xe640;</i>删除</button>
-            </td>
-          </tr>
-          <tr cate-id='2' fid='1' >
-            <td>
-              <div class="layui-unselect layui-form-checkbox" lay-skin="primary" data-id='2'><i class="layui-icon">&#xe605;</i></div>
-            </td>
-            <td>2</td>
-            <td>
-              &nbsp;&nbsp;&nbsp;&nbsp;
-              <i class="layui-icon x-show" status='true'>&#xe623;</i>
-              产品列表
-            </td>
-            <td><input type="text" class="layui-input x-sort" name="order" value="1"></td>
-            <td>
-              <input type="checkbox" name="switch"  lay-text="开启|停用"  checked="" lay-skin="switch">
-            </td>
-            <td class="td-manage">
-              <button class="layui-btn layui-btn layui-btn-xs"  onclick="x_admin_show('编辑','admin-edit.html')" ><i class="layui-icon">&#xe642;</i>编辑</button>
-              <button class="layui-btn layui-btn-warm layui-btn-xs"  onclick="x_admin_show('编辑','admin-edit.html')" ><i class="layui-icon">&#xe642;</i>添加子栏目</button>
-              <button class="layui-btn-danger layui-btn layui-btn-xs"  onclick="member_del(this,'要删除的id')" href="javascript:;" ><i class="layui-icon">&#xe640;</i>删除</button>
-            </td>
-          </tr>
-          <tr cate-id='3' fid='2' >
-            <td>
-              <div class="layui-unselect layui-form-checkbox" lay-skin="primary" data-id='2'><i class="layui-icon">&#xe605;</i></div>
-            </td>
-            <td>3</td>
-            <td>
-              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-              ├产品列表
-            </td>
-            <td><input type="text" class="layui-input x-sort" name="order" value="1"></td>
-            <td>
-              <input type="checkbox" name="switch"  lay-text="开启|停用"  checked="" lay-skin="switch">
-            </td>
-            <td class="td-manage">
-              <button class="layui-btn layui-btn layui-btn-xs"  onclick="x_admin_show('编辑','admin-edit.html')" ><i class="layui-icon">&#xe642;</i>编辑</button>
-              <button class="layui-btn layui-btn-warm layui-btn-xs"  onclick="x_admin_show('编辑','admin-edit.html')" ><i class="layui-icon">&#xe642;</i>添加子栏目</button>
-              <button class="layui-btn-danger layui-btn layui-btn-xs"  onclick="member_del(this,'要删除的id')" href="javascript:;" ><i class="layui-icon">&#xe640;</i>删除</button>
-            </td>
-          </tr>
-          <tr cate-id='4' fid='2' >
-            <td>
-              <div class="layui-unselect layui-form-checkbox" lay-skin="primary" data-id='2'><i class="layui-icon">&#xe605;</i></div>
-            </td>
-            <td>4</td>
-            <td>
-              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-              ├产品列表
-            </td>
-            <td><input type="text" class="layui-input x-sort" name="order" value="1"></td>
-            <td>
-              <input type="checkbox" name="switch"  lay-text="开启|停用"  checked="" lay-skin="switch">
-            </td>
-            <td class="td-manage">
-              <button class="layui-btn layui-btn layui-btn-xs"  onclick="x_admin_show('编辑','admin-edit.html')" ><i class="layui-icon">&#xe642;</i>编辑</button>
-              <button class="layui-btn layui-btn-warm layui-btn-xs"  onclick="x_admin_show('编辑','admin-edit.html')" ><i class="layui-icon">&#xe642;</i>添加子栏目</button>
-              <button class="layui-btn-danger layui-btn layui-btn-xs"  onclick="member_del(this,'要删除的id')" href="javascript:;" ><i class="layui-icon">&#xe640;</i>删除</button>
-            </td>
-          </tr>
-          <tr cate-id='5' fid='0' >
-            <td>
-              <div class="layui-unselect layui-form-checkbox" lay-skin="primary" data-id='2'><i class="layui-icon">&#xe605;</i></div>
-            </td>
-            <td>5</td>
-            <td>
-              
-              <i class="layui-icon x-show" status='true'>&#xe623;</i>新闻
-            </td>
-            <td><input type="text" class="layui-input x-sort" name="order" value="1"></td>
-            <td>
-              <input type="checkbox" name="switch"  lay-text="开启|停用"  checked="" lay-skin="switch">
-            </td>
-            <td class="td-manage">
-              <button class="layui-btn layui-btn layui-btn-xs"  onclick="x_admin_show('编辑','admin-edit.html')" ><i class="layui-icon">&#xe642;</i>编辑</button>
-              <button class="layui-btn layui-btn-warm layui-btn-xs"  onclick="x_admin_show('编辑','admin-edit.html')" ><i class="layui-icon">&#xe642;</i>添加子栏目</button>
-              <button class="layui-btn-danger layui-btn layui-btn-xs"  onclick="member_del(this,'要删除的id')" href="javascript:;" ><i class="layui-icon">&#xe640;</i>删除</button>
-            </td>
-          </tr>
-          <tr cate-id='6' fid='5' >
-            <td>
-              <div class="layui-unselect layui-form-checkbox" lay-skin="primary" data-id='2'><i class="layui-icon">&#xe605;</i></div>
-            </td>
-            <td>6</td>
-            <td>
-              &nbsp;&nbsp;&nbsp;&nbsp;
-              ├国内新闻
-            </td>
-            <td><input type="text" class="layui-input x-sort" name="order" value="1"></td>
-            <td>
-              <input type="checkbox" name="switch"  lay-text="开启|停用"  checked="" lay-skin="switch">
-            </td>
-            <td class="td-manage">
-              <button class="layui-btn layui-btn layui-btn-xs"  onclick="x_admin_show('编辑','admin-edit.html')" ><i class="layui-icon">&#xe642;</i>编辑</button>
-              <button class="layui-btn layui-btn-warm layui-btn-xs"  onclick="x_admin_show('编辑','admin-edit.html')" ><i class="layui-icon">&#xe642;</i>添加子栏目</button>
-              <button class="layui-btn-danger layui-btn layui-btn-xs"  onclick="member_del(this,'要删除的id')" href="javascript:;" ><i class="layui-icon">&#xe640;</i>删除</button>
-            </td>
-          </tr>
-          <tr cate-id='7' fid='5' >
-            <td>
-              <div class="layui-unselect layui-form-checkbox" lay-skin="primary" data-id='2'><i class="layui-icon">&#xe605;</i></div>
-            </td>
-            <td>7</td>
-            <td>
-              &nbsp;&nbsp;&nbsp;&nbsp;
-              ├国外新闻
-            </td>
-            <td><input type="text" class="layui-input x-sort" name="order" value="1"></td>
-            <td>
-              <input type="checkbox" name="switch"  lay-text="开启|停用"  checked="" lay-skin="switch">
-            </td>
-            <td class="td-manage">
-              <button class="layui-btn layui-btn layui-btn-xs"  onclick="x_admin_show('编辑','admin-edit.html')" ><i class="layui-icon">&#xe642;</i>编辑</button>
-              <button class="layui-btn layui-btn-warm layui-btn-xs"  onclick="x_admin_show('编辑','admin-edit.html')" ><i class="layui-icon">&#xe642;</i>添加子栏目</button>
-              <button class="layui-btn-danger layui-btn layui-btn-xs"  onclick="member_del(this,'要删除的id')" href="javascript:;" ><i class="layui-icon">&#xe640;</i>删除</button>
-            </td>
-          </tr>
-        </tbody>
-      </table>
-    </div>
-    <style type="text/css">
-      
-    </style>
-    <script>
-      layui.use(['form'], function(){
-        form = layui.form;
-        
-      });
-
-      
-
-      /*用户-删除*/
-      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 - 81
web/UM-admin/city.html

@@ -1,81 +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  layui-form-pane">
-           <div class="layui-form-item" id="x-city">
-            <label class="layui-form-label">城市联动</label>
-            <div class="layui-input-inline">
-              <select name="province" lay-filter="province">
-                <option value="">请选择省</option>
-              </select>
-            </div>
-            <div class="layui-input-inline">
-              <select name="city" lay-filter="city">
-                <option value="">请选择市</option>
-              </select>
-            </div>
-            <div class="layui-input-inline">
-              <select name="area" lay-filter="area">
-                <option value="">请选择县/区</option>
-              </select>
-            </div>
-          </div>
-        </form>
-      </div>
-      <blockquote class="layui-elem-quote"> </blockquote>
-      <pre class="layui-code" lay-title="JavaScript" lay-skin="notepad">
-          //xcity城市插件 基于于jquery与layui form 模块,使用之前先确认这两者是否引入 
-          //插件文件为 city.js,引入
-          select lay-filter 属性值 为必须 "province/city/area"
-          //初始化
-          $('#x-city').xcity();
-          //传默认值 
-          $('#x-city').xcity('广东','广州市','东山区');
-      </pre>
-    </div>
-    <script type="text/javascript" src="js/city.js"></script>
-    <script>
-      layui.use(['form','code'], function(){
-        form = layui.form;
-
-        layui.code();
-
-        $('#x-city').xcity('广东','广州市','东山区');
-
-      });
-    </script>
-  </body>
-
-</html>

+ 0 - 100
web/UM-admin/echarts1.html

@@ -1,100 +0,0 @@
-<!doctype html>
-<html lang="en">
-    <head>
-        <meta charset="UTF-8">
-        <title>后台登录-X-admin2.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">
-    </head>
-    <body>
-        <div class="x-body">
-            <blockquote class="layui-elem-quote">
-                特别声明:ECharts,一个纯 Javascript 的图表库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖轻量级的 Canvas 类库 ZRender,提供直观,生动,可交互,可高度个性化定制的数据可视化图表。如需使用,详细了解可以访问官网 <a href="http://echarts.baidu.com/" style="color:red">ECharts</a>。 x-admin不承担任何版权问题。
-            </blockquote>
-            <!-- 为 ECharts 准备一个具备大小(宽高)的 DOM -->
-            <div id="main" style="width: 100%;height:400px;"></div>
-            <blockquote class="layui-elem-quote">
-                注意:本案例的Echarts图表库由cdn引入,需要在线才能正常使用,如想离想,请至Echarts官网下载。
-            </blockquote>
-        </div>
-        <script src="//cdn.bootcss.com/echarts/3.3.2/echarts.min.js" charset="utf-8"></script>
-        <script type="text/javascript">
-        // 基于准备好的dom,初始化echarts实例
-        var myChart = echarts.init(document.getElementById('main'));
-
-        // 指定图表的配置项和数据
-        var option = {
-            title: {
-                text: '折线图堆叠'
-            },
-            tooltip: {
-                trigger: 'axis'
-            },
-            legend: {
-                data:['邮件营销','联盟广告','视频广告','直接访问','搜索引擎']
-            },
-            grid: {
-                left: '3%',
-                right: '4%',
-                bottom: '3%',
-                containLabel: true
-            },
-            toolbox: {
-                feature: {
-                    saveAsImage: {}
-                }
-            },
-            xAxis: {
-                type: 'category',
-                boundaryGap: false,
-                data: ['周一','周二','周三','周四','周五','周六','周日']
-            },
-            yAxis: {
-                type: 'value'
-            },
-            series: [
-                {
-                    name:'邮件营销',
-                    type:'line',
-                    stack: '总量',
-                    data:[120, 132, 101, 134, 90, 230, 210]
-                },
-                {
-                    name:'联盟广告',
-                    type:'line',
-                    stack: '总量',
-                    data:[220, 182, 191, 234, 290, 330, 310]
-                },
-                {
-                    name:'视频广告',
-                    type:'line',
-                    stack: '总量',
-                    data:[150, 232, 201, 154, 190, 330, 410]
-                },
-                {
-                    name:'直接访问',
-                    type:'line',
-                    stack: '总量',
-                    data:[320, 332, 301, 334, 390, 330, 320]
-                },
-                {
-                    name:'搜索引擎',
-                    type:'line',
-                    stack: '总量',
-                    data:[820, 932, 901, 934, 1290, 1330, 1320]
-                }
-            ]
-        };
-
-
-        // 使用刚指定的配置项和数据显示图表。
-        myChart.setOption(option);
-    </script>
-    </body>
-</html>

+ 0 - 98
web/UM-admin/echarts2.html

@@ -1,98 +0,0 @@
-<!doctype html>
-<html lang="en">
-    <head>
-        <meta charset="UTF-8">
-        <title>后台登录-X-admin2.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">
-    </head>
-    <body>
-        <div class="x-body">
-            <blockquote class="layui-elem-quote">
-                特别声明:ECharts,一个纯 Javascript 的图表库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖轻量级的 Canvas 类库 ZRender,提供直观,生动,可交互,可高度个性化定制的数据可视化图表。如需使用或者详细更多案例可以访问官网 <a href="http://echarts.baidu.com/" style="color:red">ECharts</a>。 x-admin不承担任何版权问题。
-            </blockquote>
-            <!-- 为 ECharts 准备一个具备大小(宽高)的 DOM -->
-            <div id="main" style="width: 100%;height:400px;"></div>
-            <blockquote class="layui-elem-quote">
-                注意:本案例的Echarts图表库由cdn引入,需要在线才能正常使用,如想离想,请至Echarts官网下载。
-            </blockquote>
-        </div>
-        <script src="//cdn.bootcss.com/echarts/3.3.2/echarts.min.js" charset="utf-8"></script>
-        <script type="text/javascript">
-        // 基于准备好的dom,初始化echarts实例
-        var myChart = echarts.init(document.getElementById('main'));
-
-        // 指定图表的配置项和数据
-        var labelRight = {
-            normal: {
-                position: 'right'
-            }
-        };
-        option = {
-            title: {
-                text: '交错正负轴标签',
-                subtext: 'From ExcelHome',
-                sublink: 'http://e.weibo.com/1341556070/AjwF2AgQm'
-            },
-            tooltip : {
-                trigger: 'axis',
-                axisPointer : {            // 坐标轴指示器,坐标轴触发有效
-                    type : 'shadow'        // 默认为直线,可选为:'line' | 'shadow'
-                }
-            },
-            grid: {
-                top: 80,
-                bottom: 30
-            },
-            xAxis: {
-                type : 'value',
-                position: 'top',
-                splitLine: {lineStyle:{type:'dashed'}},
-            },
-            yAxis: {
-                type : 'category',
-                axisLine: {show: false},
-                axisLabel: {show: false},
-                axisTick: {show: false},
-                splitLine: {show: false},
-                data : ['ten', 'nine', 'eight', 'seven', 'six', 'five', 'four', 'three', 'two', 'one']
-            },
-            series : [
-                {
-                    name:'生活费',
-                    type:'bar',
-                    stack: '总量',
-                    label: {
-                        normal: {
-                            show: true,
-                            formatter: '{b}'
-                        }
-                    },
-                    data:[
-                        {value: -0.07, label: labelRight},
-                        {value: -0.09, label: labelRight},
-                        0.2, 0.44,
-                        {value: -0.23, label: labelRight},
-                        0.08,
-                        {value: -0.17, label: labelRight},
-                        0.47,
-                        {value: -0.36, label: labelRight},
-                        0.18
-                    ]
-                }
-            ]
-        };
-
-
-
-        // 使用刚指定的配置项和数据显示图表。
-        myChart.setOption(option);
-    </script>
-    </body>
-</html>

+ 0 - 341
web/UM-admin/echarts3.html

@@ -1,341 +0,0 @@
-<!doctype html>
-<html lang="en">
-    <head>
-        <meta charset="UTF-8">
-        <title>后台登录-X-admin2.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">
-    </head>
-    <body>
-        <div class="x-body">
-            <blockquote class="layui-elem-quote">
-                特别声明:ECharts,一个纯 Javascript 的图表库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖轻量级的 Canvas 类库 ZRender,提供直观,生动,可交互,可高度个性化定制的数据可视化图表。如需使用或者详细更多案例可以访问官网 <a href="http://echarts.baidu.com/" style="color:red">ECharts</a>。 x-admin不承担任何版权问题。
-            </blockquote>
-            <!-- 为 ECharts 准备一个具备大小(宽高)的 DOM -->
-            <div id="main" style="width: 100%;height:400px;"></div>
-            <blockquote class="layui-elem-quote">
-                注意:本案例的Echarts图表库由cdn引入,需要在线才能正常使用,如想离想,请至Echarts官网下载。
-            </blockquote>
-        </div>
-        <script src="//cdn.bootcss.com/echarts/3.3.2/echarts.min.js" charset="utf-8"></script>
-        <script src="//cdn.bootcss.com/echarts/3.3.2/extension/bmap.min.js" type="text/javascript"></script>
-        <script src="http://echarts.baidu.com/asset/map/js/china.js"></script>
-        <script type="text/javascript">
-        // 基于准备好的dom,初始化echarts实例
-        var myChart = echarts.init(document.getElementById('main'));
-        myChart.setOption({
-            series: [{
-                type: 'map',
-                map: 'china'
-            }]
-        });
-
-        // 指定图表的配置项和数据
-        var geoCoordMap = {
-            '上海': [121.4648,31.2891],
-            '东莞': [113.8953,22.901],
-            '东营': [118.7073,37.5513],
-            '中山': [113.4229,22.478],
-            '临汾': [111.4783,36.1615],
-            '临沂': [118.3118,35.2936],
-            '丹东': [124.541,40.4242],
-            '丽水': [119.5642,28.1854],
-            '乌鲁木齐': [87.9236,43.5883],
-            '佛山': [112.8955,23.1097],
-            '保定': [115.0488,39.0948],
-            '兰州': [103.5901,36.3043],
-            '包头': [110.3467,41.4899],
-            '北京': [116.4551,40.2539],
-            '北海': [109.314,21.6211],
-            '南京': [118.8062,31.9208],
-            '南宁': [108.479,23.1152],
-            '南昌': [116.0046,28.6633],
-            '南通': [121.1023,32.1625],
-            '厦门': [118.1689,24.6478],
-            '台州': [121.1353,28.6688],
-            '合肥': [117.29,32.0581],
-            '呼和浩特': [111.4124,40.4901],
-            '咸阳': [108.4131,34.8706],
-            '哈尔滨': [127.9688,45.368],
-            '唐山': [118.4766,39.6826],
-            '嘉兴': [120.9155,30.6354],
-            '大同': [113.7854,39.8035],
-            '大连': [122.2229,39.4409],
-            '天津': [117.4219,39.4189],
-            '太原': [112.3352,37.9413],
-            '威海': [121.9482,37.1393],
-            '宁波': [121.5967,29.6466],
-            '宝鸡': [107.1826,34.3433],
-            '宿迁': [118.5535,33.7775],
-            '常州': [119.4543,31.5582],
-            '广州': [113.5107,23.2196],
-            '廊坊': [116.521,39.0509],
-            '延安': [109.1052,36.4252],
-            '张家口': [115.1477,40.8527],
-            '徐州': [117.5208,34.3268],
-            '德州': [116.6858,37.2107],
-            '惠州': [114.6204,23.1647],
-            '成都': [103.9526,30.7617],
-            '扬州': [119.4653,32.8162],
-            '承德': [117.5757,41.4075],
-            '拉萨': [91.1865,30.1465],
-            '无锡': [120.3442,31.5527],
-            '日照': [119.2786,35.5023],
-            '昆明': [102.9199,25.4663],
-            '杭州': [119.5313,29.8773],
-            '枣庄': [117.323,34.8926],
-            '柳州': [109.3799,24.9774],
-            '株洲': [113.5327,27.0319],
-            '武汉': [114.3896,30.6628],
-            '汕头': [117.1692,23.3405],
-            '江门': [112.6318,22.1484],
-            '沈阳': [123.1238,42.1216],
-            '沧州': [116.8286,38.2104],
-            '河源': [114.917,23.9722],
-            '泉州': [118.3228,25.1147],
-            '泰安': [117.0264,36.0516],
-            '泰州': [120.0586,32.5525],
-            '济南': [117.1582,36.8701],
-            '济宁': [116.8286,35.3375],
-            '海口': [110.3893,19.8516],
-            '淄博': [118.0371,36.6064],
-            '淮安': [118.927,33.4039],
-            '深圳': [114.5435,22.5439],
-            '清远': [112.9175,24.3292],
-            '温州': [120.498,27.8119],
-            '渭南': [109.7864,35.0299],
-            '湖州': [119.8608,30.7782],
-            '湘潭': [112.5439,27.7075],
-            '滨州': [117.8174,37.4963],
-            '潍坊': [119.0918,36.524],
-            '烟台': [120.7397,37.5128],
-            '玉溪': [101.9312,23.8898],
-            '珠海': [113.7305,22.1155],
-            '盐城': [120.2234,33.5577],
-            '盘锦': [121.9482,41.0449],
-            '石家庄': [114.4995,38.1006],
-            '福州': [119.4543,25.9222],
-            '秦皇岛': [119.2126,40.0232],
-            '绍兴': [120.564,29.7565],
-            '聊城': [115.9167,36.4032],
-            '肇庆': [112.1265,23.5822],
-            '舟山': [122.2559,30.2234],
-            '苏州': [120.6519,31.3989],
-            '莱芜': [117.6526,36.2714],
-            '菏泽': [115.6201,35.2057],
-            '营口': [122.4316,40.4297],
-            '葫芦岛': [120.1575,40.578],
-            '衡水': [115.8838,37.7161],
-            '衢州': [118.6853,28.8666],
-            '西宁': [101.4038,36.8207],
-            '西安': [109.1162,34.2004],
-            '贵阳': [106.6992,26.7682],
-            '连云港': [119.1248,34.552],
-            '邢台': [114.8071,37.2821],
-            '邯郸': [114.4775,36.535],
-            '郑州': [113.4668,34.6234],
-            '鄂尔多斯': [108.9734,39.2487],
-            '重庆': [107.7539,30.1904],
-            '金华': [120.0037,29.1028],
-            '铜川': [109.0393,35.1947],
-            '银川': [106.3586,38.1775],
-            '镇江': [119.4763,31.9702],
-            '长春': [125.8154,44.2584],
-            '长沙': [113.0823,28.2568],
-            '长治': [112.8625,36.4746],
-            '阳泉': [113.4778,38.0951],
-            '青岛': [120.4651,36.3373],
-            '韶关': [113.7964,24.7028]
-        };
-
-        var BJData = [
-            [{name:'北京'}, {name:'上海',value:95}],
-            [{name:'北京'}, {name:'广州',value:90}],
-            [{name:'北京'}, {name:'大连',value:80}],
-            [{name:'北京'}, {name:'南宁',value:70}],
-            [{name:'北京'}, {name:'南昌',value:60}],
-            [{name:'北京'}, {name:'拉萨',value:50}],
-            [{name:'北京'}, {name:'长春',value:40}],
-            [{name:'北京'}, {name:'包头',value:30}],
-            [{name:'北京'}, {name:'重庆',value:20}],
-            [{name:'北京'}, {name:'常州',value:10}]
-        ];
-
-        var SHData = [
-            [{name:'上海'},{name:'包头',value:95}],
-            [{name:'上海'},{name:'昆明',value:90}],
-            [{name:'上海'},{name:'广州',value:80}],
-            [{name:'上海'},{name:'郑州',value:70}],
-            [{name:'上海'},{name:'长春',value:60}],
-            [{name:'上海'},{name:'重庆',value:50}],
-            [{name:'上海'},{name:'长沙',value:40}],
-            [{name:'上海'},{name:'北京',value:30}],
-            [{name:'上海'},{name:'丹东',value:20}],
-            [{name:'上海'},{name:'大连',value:10}]
-        ];
-
-        var GZData = [
-            [{name:'广州'},{name:'福州',value:95}],
-            [{name:'广州'},{name:'太原',value:90}],
-            [{name:'广州'},{name:'长春',value:80}],
-            [{name:'广州'},{name:'重庆',value:70}],
-            [{name:'广州'},{name:'西安',value:60}],
-            [{name:'广州'},{name:'成都',value:50}],
-            [{name:'广州'},{name:'常州',value:40}],
-            [{name:'广州'},{name:'北京',value:30}],
-            [{name:'广州'},{name:'北海',value:20}],
-            [{name:'广州'},{name:'海口',value:10}]
-        ];
-
-        var planePath = 'path://M1705.06,1318.313v-89.254l-319.9-221.799l0.073-208.063c0.521-84.662-26.629-121.796-63.961-121.491c-37.332-0.305-64.482,36.829-63.961,121.491l0.073,208.063l-319.9,221.799v89.254l330.343-157.288l12.238,241.308l-134.449,92.931l0.531,42.034l175.125-42.917l175.125,42.917l0.531-42.034l-134.449-92.931l12.238-241.308L1705.06,1318.313z';
-
-        var convertData = function (data) {
-            var res = [];
-            for (var i = 0; i < data.length; i++) {
-                var dataItem = data[i];
-                var fromCoord = geoCoordMap[dataItem[0].name];
-                var toCoord = geoCoordMap[dataItem[1].name];
-                if (fromCoord && toCoord) {
-                    res.push({
-                        fromName: dataItem[0].name,
-                        toName: dataItem[1].name,
-                        coords: [fromCoord, toCoord]
-                    });
-                }
-            }
-            return res;
-        };
-
-        var color = ['#a6c84c', '#ffa022', '#46bee9'];
-        var series = [];
-        [['北京', BJData], ['上海', SHData], ['广州', GZData]].forEach(function (item, i) {
-            series.push({
-                name: item[0] + ' Top10',
-                type: 'lines',
-                zlevel: 1,
-                effect: {
-                    show: true,
-                    period: 6,
-                    trailLength: 0.7,
-                    color: '#fff',
-                    symbolSize: 3
-                },
-                lineStyle: {
-                    normal: {
-                        color: color[i],
-                        width: 0,
-                        curveness: 0.2
-                    }
-                },
-                data: convertData(item[1])
-            },
-            {
-                name: item[0] + ' Top10',
-                type: 'lines',
-                zlevel: 2,
-                effect: {
-                    show: true,
-                    period: 6,
-                    trailLength: 0,
-                    symbol: planePath,
-                    symbolSize: 15
-                },
-                lineStyle: {
-                    normal: {
-                        color: color[i],
-                        width: 1,
-                        opacity: 0.4,
-                        curveness: 0.2
-                    }
-                },
-                data: convertData(item[1])
-            },
-            {
-                name: item[0] + ' Top10',
-                type: 'effectScatter',
-                coordinateSystem: 'geo',
-                zlevel: 2,
-                rippleEffect: {
-                    brushType: 'stroke'
-                },
-                label: {
-                    normal: {
-                        show: true,
-                        position: 'right',
-                        formatter: '{b}'
-                    }
-                },
-                symbolSize: function (val) {
-                    return val[2] / 8;
-                },
-                itemStyle: {
-                    normal: {
-                        color: color[i]
-                    }
-                },
-                data: item[1].map(function (dataItem) {
-                    return {
-                        name: dataItem[1].name,
-                        value: geoCoordMap[dataItem[1].name].concat([dataItem[1].value])
-                    };
-                })
-            });
-        });
-
-        option = {
-            backgroundColor: '#404a59',
-            title : {
-                text: '模拟迁徙',
-                subtext: '数据纯属虚构',
-                left: 'center',
-                textStyle : {
-                    color: '#fff'
-                }
-            },
-            tooltip : {
-                trigger: 'item'
-            },
-            legend: {
-                orient: 'vertical',
-                top: 'bottom',
-                left: 'right',
-                data:['北京 Top10', '上海 Top10', '广州 Top10'],
-                textStyle: {
-                    color: '#fff'
-                },
-                selectedMode: 'single'
-            },
-            geo: {
-                map: 'china',
-                label: {
-                    emphasis: {
-                        show: false
-                    }
-                },
-                roam: true,
-                itemStyle: {
-                    normal: {
-                        areaColor: '#323c48',
-                        borderColor: '#404a59'
-                    },
-                    emphasis: {
-                        areaColor: '#2a333d'
-                    }
-                }
-            },
-            series: series
-        };
-
-
-
-        // 使用刚指定的配置项和数据显示图表。
-        myChart.setOption(option);
-    </script>
-    </body>
-</html>

+ 0 - 106
web/UM-admin/echarts4.html

@@ -1,106 +0,0 @@
-<!doctype html>
-<html lang="en">
-    <head>
-        <meta charset="UTF-8">
-        <title>后台登录</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">
-    </head>
-    <body>
-        <div class="x-body">
-            <blockquote class="layui-elem-quote">
-                特别声明:ECharts,一个纯 Javascript 的图表库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖轻量级的 Canvas 类库 ZRender,提供直观,生动,可交互,可高度个性化定制的数据可视化图表。如需使用或者详细更多案例可以访问官网 <a href="http://echarts.baidu.com/" style="color:red">ECharts</a>。 admin不承担任何版权问题。
-            </blockquote>
-            <!-- 为 ECharts 准备一个具备大小(宽高)的 DOM -->
-            <div id="main" style="width: 100%;height:400px;"></div>
-            <blockquote class="layui-elem-quote">
-                注意:本案例的Echarts图表库由cdn引入,需要在线才能正常使用,如想离想,请至Echarts官网下载。
-            </blockquote>
-        </div>
-        <script src="//cdn.bootcss.com/echarts/3.3.2/echarts.min.js" charset="utf-8"></script>
-        <script src="//cdn.bootcss.com/echarts/3.3.2/extension/bmap.min.js" type="text/javascript"></script>
-        <script type="text/javascript">
-        // 基于准备好的dom,初始化echarts实例
-        var myChart = echarts.init(document.getElementById('main'));
-
-        // 指定图表的配置项和数据
-        option = {
-            backgroundColor: '#2c343c',
-
-            title: {
-                text: 'Customized Pie',
-                left: 'center',
-                top: 20,
-                textStyle: {
-                    color: '#ccc'
-                }
-            },
-
-            tooltip : {
-                trigger: 'item',
-                formatter: "{a} <br/>{b} : {c} ({d}%)"
-            },
-
-            visualMap: {
-                show: false,
-                min: 80,
-                max: 600,
-                inRange: {
-                    colorLightness: [0, 1]
-                }
-            },
-            series : [
-                {
-                    name:'访问来源',
-                    type:'pie',
-                    radius : '55%',
-                    center: ['50%', '50%'],
-                    data:[
-                        {value:335, name:'直接访问'},
-                        {value:310, name:'邮件营销'},
-                        {value:274, name:'联盟广告'},
-                        {value:235, name:'视频广告'},
-                        {value:400, name:'搜索引擎'}
-                    ].sort(function (a, b) { return a.value - b.value}),
-                    roseType: 'angle',
-                    label: {
-                        normal: {
-                            textStyle: {
-                                color: 'rgba(255, 255, 255, 0.3)'
-                            }
-                        }
-                    },
-                    labelLine: {
-                        normal: {
-                            lineStyle: {
-                                color: 'rgba(255, 255, 255, 0.3)'
-                            },
-                            smooth: 0.2,
-                            length: 10,
-                            length2: 20
-                        }
-                    },
-                    itemStyle: {
-                        normal: {
-                            color: '#c23531',
-                            shadowBlur: 200,
-                            shadowColor: 'rgba(0, 0, 0, 0.5)'
-                        }
-                    }
-                }
-            ]
-        };
-
-
-
-        // 使用刚指定的配置项和数据显示图表。
-        myChart.setOption(option);
-    </script>
-    </body>
-</html>

+ 0 - 72
web/UM-admin/echarts5.html

@@ -1,72 +0,0 @@
-<!doctype html>
-<html lang="en">
-    <head>
-        <meta charset="UTF-8">
-        <title>后台登录-X-admin2.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">
-    </head>
-    <body>
-        <div class="x-body">
-            <blockquote class="layui-elem-quote">
-                特别声明:ECharts,一个纯 Javascript 的图表库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖轻量级的 Canvas 类库 ZRender,提供直观,生动,可交互,可高度个性化定制的数据可视化图表。如需使用,详细了解可以访问官网 <a href="http://echarts.baidu.com/" style="color:red">ECharts</a>。 x-admin不承担任何版权问题。
-            </blockquote>
-            <!-- 为 ECharts 准备一个具备大小(宽高)的 DOM -->
-            <div id="main" style="width: 100%;height:400px;"></div>
-            <blockquote class="layui-elem-quote">
-                注意:本案例的Echarts图表库由cdn引入,需要在线才能正常使用,如想离想,请至Echarts官网下载。
-            </blockquote>
-        </div>
-        <script src="//cdn.bootcss.com/echarts/3.3.2/echarts.min.js" charset="utf-8"></script>
-        <script type="text/javascript">
-        // 基于准备好的dom,初始化echarts实例
-        var myChart = echarts.init(document.getElementById('main'));
-
-        // 指定图表的配置项和数据
-        var option = {
-            title: {
-                text: '基础雷达图'
-            },
-            tooltip: {},
-            legend: {
-                data: ['预算分配(Allocated Budget)', '实际开销(Actual Spending)']
-            },
-            radar: {
-                // shape: 'circle',
-                indicator: [
-                   { name: '销售(sales)', max: 6500},
-                   { name: '管理(Administration)', max: 16000},
-                   { name: '信息技术(Information Techology)', max: 30000},
-                   { name: '客服(Customer Support)', max: 38000},
-                   { name: '研发(Development)', max: 52000},
-                   { name: '市场(Marketing)', max: 25000}
-                ]
-            },
-            series: [{
-                name: '预算 vs 开销(Budget vs spending)',
-                type: 'radar',
-                // areaStyle: {normal: {}},
-                data : [
-                    {
-                        value : [4300, 10000, 28000, 35000, 50000, 19000],
-                        name : '预算分配(Allocated Budget)'
-                    },
-                     {
-                        value : [5000, 14000, 28000, 31000, 42000, 21000],
-                        name : '实际开销(Actual Spending)'
-                    }
-                ]
-            }]
-        };
-
-        // 使用刚指定的配置项和数据显示图表。
-        myChart.setOption(option);
-    </script>
-    </body>
-</html>

+ 0 - 335
web/UM-admin/echarts6.html

@@ -1,335 +0,0 @@
-<!doctype html>
-<html lang="en">
-    <head>
-        <meta charset="UTF-8">
-        <title>后台登录-X-admin2.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">
-    </head>
-    <body>
-        <div class="x-body">
-            <blockquote class="layui-elem-quote">
-                特别声明:ECharts,一个纯 Javascript 的图表库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖轻量级的 Canvas 类库 ZRender,提供直观,生动,可交互,可高度个性化定制的数据可视化图表。如需使用,详细了解可以访问官网 <a href="http://echarts.baidu.com/" style="color:red">ECharts</a>。 x-admin不承担任何版权问题。
-            </blockquote>
-            <!-- 为 ECharts 准备一个具备大小(宽高)的 DOM -->
-            <div id="main" style="width: 100%;height:400px;"></div>
-            <blockquote class="layui-elem-quote">
-                注意:本案例的Echarts图表库由cdn引入,需要在线才能正常使用,如想离想,请至Echarts官网下载。
-            </blockquote>
-        </div>
-        <script src="//cdn.bootcss.com/echarts/3.3.2/echarts.min.js" charset="utf-8"></script>
-        <script type="text/javascript">
-        // 基于准备好的dom,初始化echarts实例
-        var myChart = echarts.init(document.getElementById('main'));
-
-        // 指定图表的配置项和数据
-        // 数据意义:开盘(open),收盘(close),最低(lowest),最高(highest)
-        var data0 = splitData([
-            ['2013/1/24', 2320.26,2320.26,2287.3,2362.94],
-            ['2013/1/25', 2300,2291.3,2288.26,2308.38],
-            ['2013/1/28', 2295.35,2346.5,2295.35,2346.92],
-            ['2013/1/29', 2347.22,2358.98,2337.35,2363.8],
-            ['2013/1/30', 2360.75,2382.48,2347.89,2383.76],
-            ['2013/1/31', 2383.43,2385.42,2371.23,2391.82],
-            ['2013/2/1', 2377.41,2419.02,2369.57,2421.15],
-            ['2013/2/4', 2425.92,2428.15,2417.58,2440.38],
-            ['2013/2/5', 2411,2433.13,2403.3,2437.42],
-            ['2013/2/6', 2432.68,2434.48,2427.7,2441.73],
-            ['2013/2/7', 2430.69,2418.53,2394.22,2433.89],
-            ['2013/2/8', 2416.62,2432.4,2414.4,2443.03],
-            ['2013/2/18', 2441.91,2421.56,2415.43,2444.8],
-            ['2013/2/19', 2420.26,2382.91,2373.53,2427.07],
-            ['2013/2/20', 2383.49,2397.18,2370.61,2397.94],
-            ['2013/2/21', 2378.82,2325.95,2309.17,2378.82],
-            ['2013/2/22', 2322.94,2314.16,2308.76,2330.88],
-            ['2013/2/25', 2320.62,2325.82,2315.01,2338.78],
-            ['2013/2/26', 2313.74,2293.34,2289.89,2340.71],
-            ['2013/2/27', 2297.77,2313.22,2292.03,2324.63],
-            ['2013/2/28', 2322.32,2365.59,2308.92,2366.16],
-            ['2013/3/1', 2364.54,2359.51,2330.86,2369.65],
-            ['2013/3/4', 2332.08,2273.4,2259.25,2333.54],
-            ['2013/3/5', 2274.81,2326.31,2270.1,2328.14],
-            ['2013/3/6', 2333.61,2347.18,2321.6,2351.44],
-            ['2013/3/7', 2340.44,2324.29,2304.27,2352.02],
-            ['2013/3/8', 2326.42,2318.61,2314.59,2333.67],
-            ['2013/3/11', 2314.68,2310.59,2296.58,2320.96],
-            ['2013/3/12', 2309.16,2286.6,2264.83,2333.29],
-            ['2013/3/13', 2282.17,2263.97,2253.25,2286.33],
-            ['2013/3/14', 2255.77,2270.28,2253.31,2276.22],
-            ['2013/3/15', 2269.31,2278.4,2250,2312.08],
-            ['2013/3/18', 2267.29,2240.02,2239.21,2276.05],
-            ['2013/3/19', 2244.26,2257.43,2232.02,2261.31],
-            ['2013/3/20', 2257.74,2317.37,2257.42,2317.86],
-            ['2013/3/21', 2318.21,2324.24,2311.6,2330.81],
-            ['2013/3/22', 2321.4,2328.28,2314.97,2332],
-            ['2013/3/25', 2334.74,2326.72,2319.91,2344.89],
-            ['2013/3/26', 2318.58,2297.67,2281.12,2319.99],
-            ['2013/3/27', 2299.38,2301.26,2289,2323.48],
-            ['2013/3/28', 2273.55,2236.3,2232.91,2273.55],
-            ['2013/3/29', 2238.49,2236.62,2228.81,2246.87],
-            ['2013/4/1', 2229.46,2234.4,2227.31,2243.95],
-            ['2013/4/2', 2234.9,2227.74,2220.44,2253.42],
-            ['2013/4/3', 2232.69,2225.29,2217.25,2241.34],
-            ['2013/4/8', 2196.24,2211.59,2180.67,2212.59],
-            ['2013/4/9', 2215.47,2225.77,2215.47,2234.73],
-            ['2013/4/10', 2224.93,2226.13,2212.56,2233.04],
-            ['2013/4/11', 2236.98,2219.55,2217.26,2242.48],
-            ['2013/4/12', 2218.09,2206.78,2204.44,2226.26],
-            ['2013/4/15', 2199.91,2181.94,2177.39,2204.99],
-            ['2013/4/16', 2169.63,2194.85,2165.78,2196.43],
-            ['2013/4/17', 2195.03,2193.8,2178.47,2197.51],
-            ['2013/4/18', 2181.82,2197.6,2175.44,2206.03],
-            ['2013/4/19', 2201.12,2244.64,2200.58,2250.11],
-            ['2013/4/22', 2236.4,2242.17,2232.26,2245.12],
-            ['2013/4/23', 2242.62,2184.54,2182.81,2242.62],
-            ['2013/4/24', 2187.35,2218.32,2184.11,2226.12],
-            ['2013/4/25', 2213.19,2199.31,2191.85,2224.63],
-            ['2013/4/26', 2203.89,2177.91,2173.86,2210.58],
-            ['2013/5/2', 2170.78,2174.12,2161.14,2179.65],
-            ['2013/5/3', 2179.05,2205.5,2179.05,2222.81],
-            ['2013/5/6', 2212.5,2231.17,2212.5,2236.07],
-            ['2013/5/7', 2227.86,2235.57,2219.44,2240.26],
-            ['2013/5/8', 2242.39,2246.3,2235.42,2255.21],
-            ['2013/5/9', 2246.96,2232.97,2221.38,2247.86],
-            ['2013/5/10', 2228.82,2246.83,2225.81,2247.67],
-            ['2013/5/13', 2247.68,2241.92,2231.36,2250.85],
-            ['2013/5/14', 2238.9,2217.01,2205.87,2239.93],
-            ['2013/5/15', 2217.09,2224.8,2213.58,2225.19],
-            ['2013/5/16', 2221.34,2251.81,2210.77,2252.87],
-            ['2013/5/17', 2249.81,2282.87,2248.41,2288.09],
-            ['2013/5/20', 2286.33,2299.99,2281.9,2309.39],
-            ['2013/5/21', 2297.11,2305.11,2290.12,2305.3],
-            ['2013/5/22', 2303.75,2302.4,2292.43,2314.18],
-            ['2013/5/23', 2293.81,2275.67,2274.1,2304.95],
-            ['2013/5/24', 2281.45,2288.53,2270.25,2292.59],
-            ['2013/5/27', 2286.66,2293.08,2283.94,2301.7],
-            ['2013/5/28', 2293.4,2321.32,2281.47,2322.1],
-            ['2013/5/29', 2323.54,2324.02,2321.17,2334.33],
-            ['2013/5/30', 2316.25,2317.75,2310.49,2325.72],
-            ['2013/5/31', 2320.74,2300.59,2299.37,2325.53],
-            ['2013/6/3', 2300.21,2299.25,2294.11,2313.43],
-            ['2013/6/4', 2297.1,2272.42,2264.76,2297.1],
-            ['2013/6/5', 2270.71,2270.93,2260.87,2276.86],
-            ['2013/6/6', 2264.43,2242.11,2240.07,2266.69],
-            ['2013/6/7', 2242.26,2210.9,2205.07,2250.63],
-            ['2013/6/13', 2190.1,2148.35,2126.22,2190.1]
-        ]);
-
-
-        function splitData(rawData) {
-            var categoryData = [];
-            var values = []
-            for (var i = 0; i < rawData.length; i++) {
-                categoryData.push(rawData[i].splice(0, 1)[0]);
-                values.push(rawData[i])
-            }
-            return {
-                categoryData: categoryData,
-                values: values
-            };
-        }
-
-        function calculateMA(dayCount) {
-            var result = [];
-            for (var i = 0, len = data0.values.length; i < len; i++) {
-                if (i < dayCount) {
-                    result.push('-');
-                    continue;
-                }
-                var sum = 0;
-                for (var j = 0; j < dayCount; j++) {
-                    sum += data0.values[i - j][1];
-                }
-                result.push(sum / dayCount);
-            }
-            return result;
-        }
-
-
-
-        option = {
-            title: {
-                text: '上证指数',
-                left: 0
-            },
-            tooltip: {
-                trigger: 'axis',
-                axisPointer: {
-                    type: 'line'
-                }
-            },
-            legend: {
-                data: ['日K', 'MA5', 'MA10', 'MA20', 'MA30']
-            },
-            grid: {
-                left: '10%',
-                right: '10%',
-                bottom: '15%'
-            },
-            xAxis: {
-                type: 'category',
-                data: data0.categoryData,
-                scale: true,
-                boundaryGap : false,
-                axisLine: {onZero: false},
-                splitLine: {show: false},
-                splitNumber: 20,
-                min: 'dataMin',
-                max: 'dataMax'
-            },
-            yAxis: {
-                scale: true,
-                splitArea: {
-                    show: true
-                }
-            },
-            dataZoom: [
-                {
-                    type: 'inside',
-                    start: 50,
-                    end: 100
-                },
-                {
-                    show: true,
-                    type: 'slider',
-                    y: '90%',
-                    start: 50,
-                    end: 100
-                }
-            ],
-            series: [
-                {
-                    name: '日K',
-                    type: 'candlestick',
-                    data: data0.values,
-                    markPoint: {
-                        label: {
-                            normal: {
-                                formatter: function (param) {
-                                    return param != null ? Math.round(param.value) : '';
-                                }
-                            }
-                        },
-                        data: [
-                            {
-                                name: 'XX标点',
-                                coord: ['2013/5/31', 2300],
-                                value: 2300,
-                                itemStyle: {
-                                    normal: {color: 'rgb(41,60,85)'}
-                                }
-                            },
-                            {
-                                name: 'highest value',
-                                type: 'max',
-                                valueDim: 'highest'
-                            },
-                            {
-                                name: 'lowest value',
-                                type: 'min',
-                                valueDim: 'lowest'
-                            },
-                            {
-                                name: 'average value on close',
-                                type: 'average',
-                                valueDim: 'close'
-                            }
-                        ],
-                        tooltip: {
-                            formatter: function (param) {
-                                return param.name + '<br>' + (param.data.coord || '');
-                            }
-                        }
-                    },
-                    markLine: {
-                        symbol: ['none', 'none'],
-                        data: [
-                            [
-                                {
-                                    name: 'from lowest to highest',
-                                    type: 'min',
-                                    valueDim: 'lowest',
-                                    symbol: 'circle',
-                                    symbolSize: 10,
-                                    label: {
-                                        normal: {show: false},
-                                        emphasis: {show: false}
-                                    }
-                                },
-                                {
-                                    type: 'max',
-                                    valueDim: 'highest',
-                                    symbol: 'circle',
-                                    symbolSize: 10,
-                                    label: {
-                                        normal: {show: false},
-                                        emphasis: {show: false}
-                                    }
-                                }
-                            ],
-                            {
-                                name: 'min line on close',
-                                type: 'min',
-                                valueDim: 'close'
-                            },
-                            {
-                                name: 'max line on close',
-                                type: 'max',
-                                valueDim: 'close'
-                            }
-                        ]
-                    }
-                },
-                {
-                    name: 'MA5',
-                    type: 'line',
-                    data: calculateMA(5),
-                    smooth: true,
-                    lineStyle: {
-                        normal: {opacity: 0.5}
-                    }
-                },
-                {
-                    name: 'MA10',
-                    type: 'line',
-                    data: calculateMA(10),
-                    smooth: true,
-                    lineStyle: {
-                        normal: {opacity: 0.5}
-                    }
-                },
-                {
-                    name: 'MA20',
-                    type: 'line',
-                    data: calculateMA(20),
-                    smooth: true,
-                    lineStyle: {
-                        normal: {opacity: 0.5}
-                    }
-                },
-                {
-                    name: 'MA30',
-                    type: 'line',
-                    data: calculateMA(30),
-                    smooth: true,
-                    lineStyle: {
-                        normal: {opacity: 0.5}
-                    }
-                },
-
-            ]
-        };
-
-
-
-        // 使用刚指定的配置项和数据显示图表。
-        myChart.setOption(option);
-    </script>
-    </body>
-</html>

+ 0 - 488
web/UM-admin/echarts7.html

@@ -1,488 +0,0 @@
-<!doctype html>
-<html lang="en">
-    <head>
-        <meta charset="UTF-8">
-        <title>后台登录-X-admin2.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">
-    </head>
-    <body>
-        <div class="x-body">
-            <blockquote class="layui-elem-quote">
-                特别声明:ECharts,一个纯 Javascript 的图表库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖轻量级的 Canvas 类库 ZRender,提供直观,生动,可交互,可高度个性化定制的数据可视化图表。如需使用或者详细更多案例可以访问官网 <a href="http://echarts.baidu.com/" style="color:red">ECharts</a>。 x-admin不承担任何版权问题。
-            </blockquote>
-            <!-- 为 ECharts 准备一个具备大小(宽高)的 DOM -->
-            <div id="main" style="width: 100%;height:400px;"></div>
-            <blockquote class="layui-elem-quote">
-                注意:本案例的Echarts图表库由cdn引入,需要在线才能正常使用,如想离想,请至Echarts官网下载。
-            </blockquote>
-        </div>
-        <script src="//cdn.bootcss.com/echarts/3.3.2/echarts.min.js" charset="utf-8"></script>
-        <script src="//cdn.bootcss.com/echarts/3.3.2/extension/bmap.min.js" type="text/javascript"></script>
-        <script src="http://echarts.baidu.com/asset/map/js/china.js"></script>
-        <script type="text/javascript">
-        // 基于准备好的dom,初始化echarts实例
-        var myChart = echarts.init(document.getElementById('main'));
-        myChart.setOption({
-            series: [{
-                type: 'map',
-                map: 'china'
-            }]
-        });
-
-        var geoCoordMap = {
-            "海门":[121.15,31.89],
-            "鄂尔多斯":[109.781327,39.608266],
-            "招远":[120.38,37.35],
-            "舟山":[122.207216,29.985295],
-            "齐齐哈尔":[123.97,47.33],
-            "盐城":[120.13,33.38],
-            "赤峰":[118.87,42.28],
-            "青岛":[120.33,36.07],
-            "乳山":[121.52,36.89],
-            "金昌":[102.188043,38.520089],
-            "泉州":[118.58,24.93],
-            "莱西":[120.53,36.86],
-            "日照":[119.46,35.42],
-            "胶南":[119.97,35.88],
-            "南通":[121.05,32.08],
-            "拉萨":[91.11,29.97],
-            "云浮":[112.02,22.93],
-            "梅州":[116.1,24.55],
-            "文登":[122.05,37.2],
-            "上海":[121.48,31.22],
-            "攀枝花":[101.718637,26.582347],
-            "威海":[122.1,37.5],
-            "承德":[117.93,40.97],
-            "厦门":[118.1,24.46],
-            "汕尾":[115.375279,22.786211],
-            "潮州":[116.63,23.68],
-            "丹东":[124.37,40.13],
-            "太仓":[121.1,31.45],
-            "曲靖":[103.79,25.51],
-            "烟台":[121.39,37.52],
-            "福州":[119.3,26.08],
-            "瓦房店":[121.979603,39.627114],
-            "即墨":[120.45,36.38],
-            "抚顺":[123.97,41.97],
-            "玉溪":[102.52,24.35],
-            "张家口":[114.87,40.82],
-            "阳泉":[113.57,37.85],
-            "莱州":[119.942327,37.177017],
-            "湖州":[120.1,30.86],
-            "汕头":[116.69,23.39],
-            "昆山":[120.95,31.39],
-            "宁波":[121.56,29.86],
-            "湛江":[110.359377,21.270708],
-            "揭阳":[116.35,23.55],
-            "荣成":[122.41,37.16],
-            "连云港":[119.16,34.59],
-            "葫芦岛":[120.836932,40.711052],
-            "常熟":[120.74,31.64],
-            "东莞":[113.75,23.04],
-            "河源":[114.68,23.73],
-            "淮安":[119.15,33.5],
-            "泰州":[119.9,32.49],
-            "南宁":[108.33,22.84],
-            "营口":[122.18,40.65],
-            "惠州":[114.4,23.09],
-            "江阴":[120.26,31.91],
-            "蓬莱":[120.75,37.8],
-            "韶关":[113.62,24.84],
-            "嘉峪关":[98.289152,39.77313],
-            "广州":[113.23,23.16],
-            "延安":[109.47,36.6],
-            "太原":[112.53,37.87],
-            "清远":[113.01,23.7],
-            "中山":[113.38,22.52],
-            "昆明":[102.73,25.04],
-            "寿光":[118.73,36.86],
-            "盘锦":[122.070714,41.119997],
-            "长治":[113.08,36.18],
-            "深圳":[114.07,22.62],
-            "珠海":[113.52,22.3],
-            "宿迁":[118.3,33.96],
-            "咸阳":[108.72,34.36],
-            "铜川":[109.11,35.09],
-            "平度":[119.97,36.77],
-            "佛山":[113.11,23.05],
-            "海口":[110.35,20.02],
-            "江门":[113.06,22.61],
-            "章丘":[117.53,36.72],
-            "肇庆":[112.44,23.05],
-            "大连":[121.62,38.92],
-            "临汾":[111.5,36.08],
-            "吴江":[120.63,31.16],
-            "石嘴山":[106.39,39.04],
-            "沈阳":[123.38,41.8],
-            "苏州":[120.62,31.32],
-            "茂名":[110.88,21.68],
-            "嘉兴":[120.76,30.77],
-            "长春":[125.35,43.88],
-            "胶州":[120.03336,36.264622],
-            "银川":[106.27,38.47],
-            "张家港":[120.555821,31.875428],
-            "三门峡":[111.19,34.76],
-            "锦州":[121.15,41.13],
-            "南昌":[115.89,28.68],
-            "柳州":[109.4,24.33],
-            "三亚":[109.511909,18.252847],
-            "自贡":[104.778442,29.33903],
-            "吉林":[126.57,43.87],
-            "阳江":[111.95,21.85],
-            "泸州":[105.39,28.91],
-            "西宁":[101.74,36.56],
-            "宜宾":[104.56,29.77],
-            "呼和浩特":[111.65,40.82],
-            "成都":[104.06,30.67],
-            "大同":[113.3,40.12],
-            "镇江":[119.44,32.2],
-            "桂林":[110.28,25.29],
-            "张家界":[110.479191,29.117096],
-            "宜兴":[119.82,31.36],
-            "北海":[109.12,21.49],
-            "西安":[108.95,34.27],
-            "金坛":[119.56,31.74],
-            "东营":[118.49,37.46],
-            "牡丹江":[129.58,44.6],
-            "遵义":[106.9,27.7],
-            "绍兴":[120.58,30.01],
-            "扬州":[119.42,32.39],
-            "常州":[119.95,31.79],
-            "潍坊":[119.1,36.62],
-            "重庆":[106.54,29.59],
-            "台州":[121.420757,28.656386],
-            "南京":[118.78,32.04],
-            "滨州":[118.03,37.36],
-            "贵阳":[106.71,26.57],
-            "无锡":[120.29,31.59],
-            "本溪":[123.73,41.3],
-            "克拉玛依":[84.77,45.59],
-            "渭南":[109.5,34.52],
-            "马鞍山":[118.48,31.56],
-            "宝鸡":[107.15,34.38],
-            "焦作":[113.21,35.24],
-            "句容":[119.16,31.95],
-            "北京":[116.46,39.92],
-            "徐州":[117.2,34.26],
-            "衡水":[115.72,37.72],
-            "包头":[110,40.58],
-            "绵阳":[104.73,31.48],
-            "乌鲁木齐":[87.68,43.77],
-            "枣庄":[117.57,34.86],
-            "杭州":[120.19,30.26],
-            "淄博":[118.05,36.78],
-            "鞍山":[122.85,41.12],
-            "溧阳":[119.48,31.43],
-            "库尔勒":[86.06,41.68],
-            "安阳":[114.35,36.1],
-            "开封":[114.35,34.79],
-            "济南":[117,36.65],
-            "德阳":[104.37,31.13],
-            "温州":[120.65,28.01],
-            "九江":[115.97,29.71],
-            "邯郸":[114.47,36.6],
-            "临安":[119.72,30.23],
-            "兰州":[103.73,36.03],
-            "沧州":[116.83,38.33],
-            "临沂":[118.35,35.05],
-            "南充":[106.110698,30.837793],
-            "天津":[117.2,39.13],
-            "富阳":[119.95,30.07],
-            "泰安":[117.13,36.18],
-            "诸暨":[120.23,29.71],
-            "郑州":[113.65,34.76],
-            "哈尔滨":[126.63,45.75],
-            "聊城":[115.97,36.45],
-            "芜湖":[118.38,31.33],
-            "唐山":[118.02,39.63],
-            "平顶山":[113.29,33.75],
-            "邢台":[114.48,37.05],
-            "德州":[116.29,37.45],
-            "济宁":[116.59,35.38],
-            "荆州":[112.239741,30.335165],
-            "宜昌":[111.3,30.7],
-            "义乌":[120.06,29.32],
-            "丽水":[119.92,28.45],
-            "洛阳":[112.44,34.7],
-            "秦皇岛":[119.57,39.95],
-            "株洲":[113.16,27.83],
-            "石家庄":[114.48,38.03],
-            "莱芜":[117.67,36.19],
-            "常德":[111.69,29.05],
-            "保定":[115.48,38.85],
-            "湘潭":[112.91,27.87],
-            "金华":[119.64,29.12],
-            "岳阳":[113.09,29.37],
-            "长沙":[113,28.21],
-            "衢州":[118.88,28.97],
-            "廊坊":[116.7,39.53],
-            "菏泽":[115.480656,35.23375],
-            "合肥":[117.27,31.86],
-            "武汉":[114.31,30.52],
-            "大庆":[125.03,46.58]
-        };
-
-        var convertData = function (data) {
-            var res = [];
-            for (var i = 0; i < data.length; i++) {
-                var geoCoord = geoCoordMap[data[i].name];
-                if (geoCoord) {
-                    res.push(geoCoord.concat(data[i].value));
-                }
-            }
-            return res;
-        };
-
-        option = {
-            title: {
-                text: '全国主要城市空气质量',
-                subtext: 'data from PM25.in',
-                sublink: 'http://www.pm25.in',
-                left: 'center',
-                textStyle: {
-                    color: '#fff'
-                }
-            },
-            backgroundColor: '#404a59',
-            visualMap: {
-                min: 0,
-                max: 500,
-                splitNumber: 5,
-                inRange: {
-                    color: ['#d94e5d','#eac736','#50a3ba'].reverse()
-                },
-                textStyle: {
-                    color: '#fff'
-                }
-            },
-            geo: {
-                map: 'china',
-                label: {
-                    emphasis: {
-                        show: false
-                    }
-                },
-                roam: true,
-                itemStyle: {
-                    normal: {
-                        areaColor: '#323c48',
-                        borderColor: '#111'
-                    },
-                    emphasis: {
-                        areaColor: '#2a333d'
-                    }
-                }
-            },
-            series: [{
-                name: 'AQI',
-                type: 'heatmap',
-                coordinateSystem: 'geo',
-                data: convertData([
-                    {name: "海门", value: 9},
-                    {name: "鄂尔多斯", value: 12},
-                    {name: "招远", value: 12},
-                    {name: "舟山", value: 12},
-                    {name: "齐齐哈尔", value: 14},
-                    {name: "盐城", value: 15},
-                    {name: "赤峰", value: 16},
-                    {name: "青岛", value: 18},
-                    {name: "乳山", value: 18},
-                    {name: "金昌", value: 19},
-                    {name: "泉州", value: 21},
-                    {name: "莱西", value: 21},
-                    {name: "日照", value: 21},
-                    {name: "胶南", value: 22},
-                    {name: "南通", value: 23},
-                    {name: "拉萨", value: 24},
-                    {name: "云浮", value: 24},
-                    {name: "梅州", value: 25},
-                    {name: "文登", value: 25},
-                    {name: "上海", value: 25},
-                    {name: "攀枝花", value: 25},
-                    {name: "威海", value: 25},
-                    {name: "承德", value: 25},
-                    {name: "厦门", value: 26},
-                    {name: "汕尾", value: 26},
-                    {name: "潮州", value: 26},
-                    {name: "丹东", value: 27},
-                    {name: "太仓", value: 27},
-                    {name: "曲靖", value: 27},
-                    {name: "烟台", value: 28},
-                    {name: "福州", value: 29},
-                    {name: "瓦房店", value: 30},
-                    {name: "即墨", value: 30},
-                    {name: "抚顺", value: 31},
-                    {name: "玉溪", value: 31},
-                    {name: "张家口", value: 31},
-                    {name: "阳泉", value: 31},
-                    {name: "莱州", value: 32},
-                    {name: "湖州", value: 32},
-                    {name: "汕头", value: 32},
-                    {name: "昆山", value: 33},
-                    {name: "宁波", value: 33},
-                    {name: "湛江", value: 33},
-                    {name: "揭阳", value: 34},
-                    {name: "荣成", value: 34},
-                    {name: "连云港", value: 35},
-                    {name: "葫芦岛", value: 35},
-                    {name: "常熟", value: 36},
-                    {name: "东莞", value: 36},
-                    {name: "河源", value: 36},
-                    {name: "淮安", value: 36},
-                    {name: "泰州", value: 36},
-                    {name: "南宁", value: 37},
-                    {name: "营口", value: 37},
-                    {name: "惠州", value: 37},
-                    {name: "江阴", value: 37},
-                    {name: "蓬莱", value: 37},
-                    {name: "韶关", value: 38},
-                    {name: "嘉峪关", value: 38},
-                    {name: "广州", value: 38},
-                    {name: "延安", value: 38},
-                    {name: "太原", value: 39},
-                    {name: "清远", value: 39},
-                    {name: "中山", value: 39},
-                    {name: "昆明", value: 39},
-                    {name: "寿光", value: 40},
-                    {name: "盘锦", value: 40},
-                    {name: "长治", value: 41},
-                    {name: "深圳", value: 41},
-                    {name: "珠海", value: 42},
-                    {name: "宿迁", value: 43},
-                    {name: "咸阳", value: 43},
-                    {name: "铜川", value: 44},
-                    {name: "平度", value: 44},
-                    {name: "佛山", value: 44},
-                    {name: "海口", value: 44},
-                    {name: "江门", value: 45},
-                    {name: "章丘", value: 45},
-                    {name: "肇庆", value: 46},
-                    {name: "大连", value: 47},
-                    {name: "临汾", value: 47},
-                    {name: "吴江", value: 47},
-                    {name: "石嘴山", value: 49},
-                    {name: "沈阳", value: 50},
-                    {name: "苏州", value: 50},
-                    {name: "茂名", value: 50},
-                    {name: "嘉兴", value: 51},
-                    {name: "长春", value: 51},
-                    {name: "胶州", value: 52},
-                    {name: "银川", value: 52},
-                    {name: "张家港", value: 52},
-                    {name: "三门峡", value: 53},
-                    {name: "锦州", value: 54},
-                    {name: "南昌", value: 54},
-                    {name: "柳州", value: 54},
-                    {name: "三亚", value: 54},
-                    {name: "自贡", value: 56},
-                    {name: "吉林", value: 56},
-                    {name: "阳江", value: 57},
-                    {name: "泸州", value: 57},
-                    {name: "西宁", value: 57},
-                    {name: "宜宾", value: 58},
-                    {name: "呼和浩特", value: 58},
-                    {name: "成都", value: 58},
-                    {name: "大同", value: 58},
-                    {name: "镇江", value: 59},
-                    {name: "桂林", value: 59},
-                    {name: "张家界", value: 59},
-                    {name: "宜兴", value: 59},
-                    {name: "北海", value: 60},
-                    {name: "西安", value: 61},
-                    {name: "金坛", value: 62},
-                    {name: "东营", value: 62},
-                    {name: "牡丹江", value: 63},
-                    {name: "遵义", value: 63},
-                    {name: "绍兴", value: 63},
-                    {name: "扬州", value: 64},
-                    {name: "常州", value: 64},
-                    {name: "潍坊", value: 65},
-                    {name: "重庆", value: 66},
-                    {name: "台州", value: 67},
-                    {name: "南京", value: 67},
-                    {name: "滨州", value: 70},
-                    {name: "贵阳", value: 71},
-                    {name: "无锡", value: 71},
-                    {name: "本溪", value: 71},
-                    {name: "克拉玛依", value: 72},
-                    {name: "渭南", value: 72},
-                    {name: "马鞍山", value: 72},
-                    {name: "宝鸡", value: 72},
-                    {name: "焦作", value: 75},
-                    {name: "句容", value: 75},
-                    {name: "北京", value: 79},
-                    {name: "徐州", value: 79},
-                    {name: "衡水", value: 80},
-                    {name: "包头", value: 80},
-                    {name: "绵阳", value: 80},
-                    {name: "乌鲁木齐", value: 84},
-                    {name: "枣庄", value: 84},
-                    {name: "杭州", value: 84},
-                    {name: "淄博", value: 85},
-                    {name: "鞍山", value: 86},
-                    {name: "溧阳", value: 86},
-                    {name: "库尔勒", value: 86},
-                    {name: "安阳", value: 90},
-                    {name: "开封", value: 90},
-                    {name: "济南", value: 92},
-                    {name: "德阳", value: 93},
-                    {name: "温州", value: 95},
-                    {name: "九江", value: 96},
-                    {name: "邯郸", value: 98},
-                    {name: "临安", value: 99},
-                    {name: "兰州", value: 99},
-                    {name: "沧州", value: 100},
-                    {name: "临沂", value: 103},
-                    {name: "南充", value: 104},
-                    {name: "天津", value: 105},
-                    {name: "富阳", value: 106},
-                    {name: "泰安", value: 112},
-                    {name: "诸暨", value: 112},
-                    {name: "郑州", value: 113},
-                    {name: "哈尔滨", value: 114},
-                    {name: "聊城", value: 116},
-                    {name: "芜湖", value: 117},
-                    {name: "唐山", value: 119},
-                    {name: "平顶山", value: 119},
-                    {name: "邢台", value: 119},
-                    {name: "德州", value: 120},
-                    {name: "济宁", value: 120},
-                    {name: "荆州", value: 127},
-                    {name: "宜昌", value: 130},
-                    {name: "义乌", value: 132},
-                    {name: "丽水", value: 133},
-                    {name: "洛阳", value: 134},
-                    {name: "秦皇岛", value: 136},
-                    {name: "株洲", value: 143},
-                    {name: "石家庄", value: 147},
-                    {name: "莱芜", value: 148},
-                    {name: "常德", value: 152},
-                    {name: "保定", value: 153},
-                    {name: "湘潭", value: 154},
-                    {name: "金华", value: 157},
-                    {name: "岳阳", value: 169},
-                    {name: "长沙", value: 175},
-                    {name: "衢州", value: 177},
-                    {name: "廊坊", value: 193},
-                    {name: "菏泽", value: 194},
-                    {name: "合肥", value: 229},
-                    {name: "武汉", value: 273},
-                    {name: "大庆", value: 279}
-                ])
-            }]
-        };
-
-
-
-        // 使用刚指定的配置项和数据显示图表。
-        myChart.setOption(option);
-    </script>
-    </body>
-</html>

+ 0 - 230
web/UM-admin/echarts8.html

@@ -1,230 +0,0 @@
-<!doctype html>
-<html lang="en">
-    <head>
-        <meta charset="UTF-8">
-        <title>后台登录-X-admin2.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">
-    </head>
-    <body>
-        <div class="x-body">
-            <blockquote class="layui-elem-quote">
-                特别声明:ECharts,一个纯 Javascript 的图表库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖轻量级的 Canvas 类库 ZRender,提供直观,生动,可交互,可高度个性化定制的数据可视化图表。如需使用,详细了解可以访问官网 <a href="http://echarts.baidu.com/" style="color:red">ECharts</a>。 x-admin不承担任何版权问题。
-            </blockquote>
-            <!-- 为 ECharts 准备一个具备大小(宽高)的 DOM -->
-            <div id="main" style="width: 100%;height:400px;"></div>
-            <blockquote class="layui-elem-quote">
-                注意:本案例的Echarts图表库由cdn引入,需要在线才能正常使用,如想离想,请至Echarts官网下载。
-            </blockquote>
-        </div>
-        <script src="//cdn.bootcss.com/echarts/3.3.2/echarts.min.js" charset="utf-8"></script>
-        <script type="text/javascript">
-        // 基于准备好的dom,初始化echarts实例
-        var myChart = echarts.init(document.getElementById('main'));
-
-        // 指定图表的配置项和数据
-        option = {
-            tooltip : {
-                formatter: "{a} <br/>{c} {b}"
-            },
-            toolbox: {
-                show: true,
-                feature: {
-                    restore: {show: true},
-                    saveAsImage: {show: true}
-                }
-            },
-            series : [
-                {
-                    name: '速度',
-                    type: 'gauge',
-                    z: 3,
-                    min: 0,
-                    max: 220,
-                    splitNumber: 11,
-                    radius: '50%',
-                    axisLine: {            // 坐标轴线
-                        lineStyle: {       // 属性lineStyle控制线条样式
-                            width: 10
-                        }
-                    },
-                    axisTick: {            // 坐标轴小标记
-                        length: 15,        // 属性length控制线长
-                        lineStyle: {       // 属性lineStyle控制线条样式
-                            color: 'auto'
-                        }
-                    },
-                    splitLine: {           // 分隔线
-                        length: 20,         // 属性length控制线长
-                        lineStyle: {       // 属性lineStyle(详见lineStyle)控制线条样式
-                            color: 'auto'
-                        }
-                    },
-                    title : {
-                        textStyle: {       // 其余属性默认使用全局文本样式,详见TEXTSTYLE
-                            fontWeight: 'bolder',
-                            fontSize: 20,
-                            fontStyle: 'italic'
-                        }
-                    },
-                    detail : {
-                        textStyle: {       // 其余属性默认使用全局文本样式,详见TEXTSTYLE
-                            fontWeight: 'bolder'
-                        }
-                    },
-                    data:[{value: 40, name: 'km/h'}]
-                },
-                {
-                    name: '转速',
-                    type: 'gauge',
-                    center: ['20%', '55%'],    // 默认全局居中
-                    radius: '35%',
-                    min:0,
-                    max:7,
-                    endAngle:45,
-                    splitNumber:7,
-                    axisLine: {            // 坐标轴线
-                        lineStyle: {       // 属性lineStyle控制线条样式
-                            width: 8
-                        }
-                    },
-                    axisTick: {            // 坐标轴小标记
-                        length:12,        // 属性length控制线长
-                        lineStyle: {       // 属性lineStyle控制线条样式
-                            color: 'auto'
-                        }
-                    },
-                    splitLine: {           // 分隔线
-                        length:20,         // 属性length控制线长
-                        lineStyle: {       // 属性lineStyle(详见lineStyle)控制线条样式
-                            color: 'auto'
-                        }
-                    },
-                    pointer: {
-                        width:5
-                    },
-                    title: {
-                        offsetCenter: [0, '-30%'],       // x, y,单位px
-                    },
-                    detail: {
-                        textStyle: {       // 其余属性默认使用全局文本样式,详见TEXTSTYLE
-                            fontWeight: 'bolder'
-                        }
-                    },
-                    data:[{value: 1.5, name: 'x1000 r/min'}]
-                },
-                {
-                    name: '油表',
-                    type: 'gauge',
-                    center: ['77%', '50%'],    // 默认全局居中
-                    radius: '25%',
-                    min: 0,
-                    max: 2,
-                    startAngle: 135,
-                    endAngle: 45,
-                    splitNumber: 2,
-                    axisLine: {            // 坐标轴线
-                        lineStyle: {       // 属性lineStyle控制线条样式
-                            width: 8
-                        }
-                    },
-                    axisTick: {            // 坐标轴小标记
-                        splitNumber: 5,
-                        length: 10,        // 属性length控制线长
-                        lineStyle: {       // 属性lineStyle控制线条样式
-                            color: 'auto'
-                        }
-                    },
-                    axisLabel: {
-                        formatter:function(v){
-                            switch (v + '') {
-                                case '0' : return 'E';
-                                case '1' : return 'Gas';
-                                case '2' : return 'F';
-                            }
-                        }
-                    },
-                    splitLine: {           // 分隔线
-                        length: 15,         // 属性length控制线长
-                        lineStyle: {       // 属性lineStyle(详见lineStyle)控制线条样式
-                            color: 'auto'
-                        }
-                    },
-                    pointer: {
-                        width:2
-                    },
-                    title : {
-                        show: false
-                    },
-                    detail : {
-                        show: false
-                    },
-                    data:[{value: 0.5, name: 'gas'}]
-                },
-                {
-                    name: '水表',
-                    type: 'gauge',
-                    center : ['77%', '50%'],    // 默认全局居中
-                    radius : '25%',
-                    min: 0,
-                    max: 2,
-                    startAngle: 315,
-                    endAngle: 225,
-                    splitNumber: 2,
-                    axisLine: {            // 坐标轴线
-                        lineStyle: {       // 属性lineStyle控制线条样式
-                            width: 8
-                        }
-                    },
-                    axisTick: {            // 坐标轴小标记
-                        show: false
-                    },
-                    axisLabel: {
-                        formatter:function(v){
-                            switch (v + '') {
-                                case '0' : return 'H';
-                                case '1' : return 'Water';
-                                case '2' : return 'C';
-                            }
-                        }
-                    },
-                    splitLine: {           // 分隔线
-                        length: 15,         // 属性length控制线长
-                        lineStyle: {       // 属性lineStyle(详见lineStyle)控制线条样式
-                            color: 'auto'
-                        }
-                    },
-                    pointer: {
-                        width:2
-                    },
-                    title: {
-                        show: false
-                    },
-                    detail: {
-                        show: false
-                    },
-                    data:[{value: 0.5, name: 'gas'}]
-                }
-            ]
-        };
-
-        setInterval(function (){
-            option.series[0].data[0].value = (Math.random()*100).toFixed(2) - 0;
-            option.series[1].data[0].value = (Math.random()*7).toFixed(2) - 0;
-            option.series[2].data[0].value = (Math.random()*2).toFixed(2) - 0;
-            option.series[3].data[0].value = (Math.random()*2).toFixed(2) - 0;
-            myChart.setOption(option,true);
-        },2000);
-
-
-        // 使用刚指定的配置项和数据显示图表。
-        myChart.setOption(option);
-    </script>
-    </body>
-</html>

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

@@ -0,0 +1,444 @@
+<!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>

+ 19 - 3
web/UM-admin/index.html

@@ -65,14 +65,14 @@
                     <li>
                     <li>
                         <a _href="umlist.html">
                         <a _href="umlist.html">
                             <i class="iconfont">&#xe6a7;</i>
                             <i class="iconfont">&#xe6a7;</i>
-                            <cite>设备信息</cite>
+                            <cite>UI信息</cite>
                         </a>
                         </a>
                     </li>
                     </li>
                 </ul>
                 </ul>
             </li>
             </li>
             <li>
             <li>
                 <a href="javascript:;">
                 <a href="javascript:;">
-                    <i class="iconfont">&#xe6b8;</i>
+                    <i class="iconfont">&#59409;</i>
                     <cite>日志管理</cite>
                     <cite>日志管理</cite>
                     <i class="iconfont nav_right">&#xe697;</i>
                     <i class="iconfont nav_right">&#xe697;</i>
                 </a>
                 </a>
@@ -104,7 +104,7 @@
 
 
             <li>
             <li>
                 <a href="javascript:;">
                 <a href="javascript:;">
-                    <i class="iconfont">&#xe6b8;</i>
+                    <i class="iconfont">&#59171;</i>
                     <cite>订单任务管理</cite>
                     <cite>订单任务管理</cite>
                     <i class="iconfont nav_right">&#xe697;</i>
                     <i class="iconfont nav_right">&#xe697;</i>
                 </a>
                 </a>
@@ -117,6 +117,22 @@
                     </li>
                     </li>
                 </ul>
                 </ul>
             </li>
             </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>
         </ul>
     </div>
     </div>
 </div>
 </div>

+ 2 - 2
web/UM-admin/js/jqhttpsdk.js

@@ -2,8 +2,8 @@
  * 获取数据ajax-get请求
  * 获取数据ajax-get请求
  * @author chanjunkai
  * @author chanjunkai
  */
  */
-// http_ip_port = 'http://47.107.129.126:6639'
- http_ip_port = 'http://192.168.136.35:8800'
+http_ip_port = 'http://47.107.129.126:6639'
+// http_ip_port = 'http://192.168.136.35:8800'
 $.GetJSON = function (url,data,callback){
 $.GetJSON = function (url,data,callback){
     $.ajax({
     $.ajax({
         url:url,
         url:url,

File diff suppressed because it is too large
+ 0 - 0
web/UM-admin/lib/layui/css/layui.css


+ 6 - 6
web/UM-admin/member-list.html

@@ -101,10 +101,10 @@
                                 tableInstance.reload();
                                 tableInstance.reload();
                                 layer.close(index)
                                 layer.close(index)
                             }else {
                             }else {
-                                alert(res.code)
+                                layer.msg(res.code)
                             }
                             }
                         }
                         }
-                    )
+                    );
                 });
                 });
             }else if(layEvent === 'reset'){
             }else if(layEvent === 'reset'){
                 layer.confirm('确定重置\r\n' + data.username + '的密码吗?', {icon: 3, title:'提示信息'}, function (index) {
                 layer.confirm('确定重置\r\n' + data.username + '的密码吗?', {icon: 3, title:'提示信息'}, function (index) {
@@ -117,14 +117,14 @@
                         function (res) {
                         function (res) {
                             res = JSON.parse(res);
                             res = JSON.parse(res);
                             if(res.code === 0) {
                             if(res.code === 0) {
-                                alert('重置成功!')
+                                layer.msg('重置成功!')
                                 tableInstance.reload();
                                 tableInstance.reload();
                                 layer.close(index);
                                 layer.close(index);
                             }else{
                             }else{
-                                alert(res.msg);
+                                layer.msg(res.msg);
                             }
                             }
                         }
                         }
-                    )
+                    );
                 });
                 });
             }
             }
 
 
@@ -138,7 +138,7 @@
 <script type="text/html" id="ListBar">
 <script type="text/html" id="ListBar">
     <a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
     <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-danger" lay-event="del">删除</a>
-    <a class="layui-btn layui-btn-xs" lay-event="reset">重置密码</a>
+    <a class="layui-btn layui-btn-xs layui-btn-normal" lay-event="reset">重置密码</a>
     <!--<a class="layui-btn layui-btn-xs layui-btn-primary" lay-event="look">预览</a>-->
     <!--<a class="layui-btn layui-btn-xs layui-btn-primary" lay-event="look">预览</a>-->
 </script>
 </script>
 <script type="text/html" id="role">
 <script type="text/html" id="role">

+ 0 - 97
web/UM-admin/member-password.html

@@ -1,97 +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-body">
-        <form class="layui-form">
-          <div class="layui-form-item">
-              <label for="L_username" class="layui-form-label">
-                  昵称
-              </label>
-              <div class="layui-input-inline">
-                  <input type="text" id="L_username" name="username" disabled="" value="小明" class="layui-input">
-              </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="oldpass" required="" lay-verify="required"
-                  autocomplete="off" class="layui-input">
-              </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="newpass" required="" lay-verify="required"
-                  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="required"
-                  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="save" lay-submit="">
-                  增加
-              </button>
-          </div>
-      </form>
-    </div>
-    <script>
-            layui.use(['form','layer'], function(){
-                $ = layui.jquery;
-              var form = layui.form
-              ,layer = layui.layer;
-            
-              //监听提交
-              form.on('submit(save)', function(data){
-                console.log(data);
-                //发异步,把数据提交给php
-                layer.alert("修改成功", {icon: 6},function () {
-                    // 获得frame索引
-                    var index = parent.layer.getFrameIndex(window.name);
-                    //关闭当前frame
-                    parent.layer.close(index);
-                });
-                return false;
-              });
-              
-              
-            });
-        </script>
-  </body>
-
-</html>

+ 20 - 2
web/UM-admin/uid-edit.html

@@ -50,7 +50,16 @@
             <div class="layui-input-block">
             <div class="layui-input-block">
                 <input type="radio" name="status" lay-skin="primary" title="未暂用" value="0" checked="">
                 <input type="radio" name="status" lay-skin="primary" title="未暂用" value="0" checked="">
                 <input type="radio" name="status" lay-skin="primary" title="待暂用" value="1">
                 <input type="radio" name="status" lay-skin="primary" title="待暂用" value="1">
-                <input type="radio" name="status" lay-skin="primary" title="已暂用" value="1">
+                <input type="radio" name="status" lay-skin="primary" title="已暂用" value="2">
+
+            </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="area" lay-skin="primary" title="国内" value="0" checked="">
+                <input type="radio" name="area" lay-skin="primary" title="国外" value="1">
 
 
             </div>
             </div>
         </div>
         </div>
@@ -94,6 +103,14 @@
             $("input[title='已暂用']").click();
             $("input[title='已暂用']").click();
         }
         }
 
 
+        var area = getQueryString('area');
+        if(area == 0){
+            $("input[title='国内']").click();
+
+        }else if(area == 1){
+            $("input[title='国外']").click();
+        }
+
         $('#mac').val(getQueryString('mac'));
         $('#mac').val(getQueryString('mac'));
         $('#add_time').val(formatDate(getQueryString('add_time') * 1000));
         $('#add_time').val(formatDate(getQueryString('add_time') * 1000));
         $('#update_time').val(formatDate(getQueryString('update_time') * 1000));
         $('#update_time').val(formatDate(getQueryString('update_time') * 1000));
@@ -131,7 +148,8 @@
             var values = data.field;
             var values = data.field;
             var content = {
             var content = {
                 mac: values.mac,
                 mac: values.mac,
-                status: values.status
+                status: values.status,
+                area: values.area
             };
             };
             $.post(
             $.post(
                 http_ip_port + '/uid/adminUpdate',
                 http_ip_port + '/uid/adminUpdate',

+ 51 - 2
web/UM-admin/umlist.html

@@ -53,6 +53,17 @@
                 </label>
                 </label>
             </div>
             </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-inline x-right">
                 <div class="layui-input-inline">
                 <div class="layui-input-inline">
                     <input type="text" class="layui-input searchVal" placeholder="请输入搜索的uid"/>
                     <input type="text" class="layui-input searchVal" placeholder="请输入搜索的uid"/>
@@ -148,6 +159,7 @@
                 {type: "checkbox", fixed: "left", width: 50},
                 {type: "checkbox", fixed: "left", width: 50},
                 {field: 'uid', title: 'UID', width: 250, sort: true,},
                 {field: 'uid', title: 'UID', width: 250, sort: true,},
                 {field: 'mac', title: 'mac地址', width: 250},
                 {field: 'mac', title: 'mac地址', width: 250},
+                {field: 'area', title: '地区', width: 80, templet: '#area'},
                 {field: 'status', title: '使用状态', width: 100, templet: '#isUse'},
                 {field: 'status', title: '使用状态', width: 100, templet: '#isUse'},
                 {field: 'add_time', title: '添加时间', width: 250, sort: true, templet: '#add_time'},
                 {field: 'add_time', title: '添加时间', width: 250, sort: true, templet: '#add_time'},
                 {field: 'update_time', title: '修改时间', width: 250, templet:'#update_time'},
                 {field: 'update_time', title: '修改时间', width: 250, templet:'#update_time'},
@@ -170,7 +182,7 @@
                 data = obj.data;
                 data = obj.data;
             if (layEvent === 'edit') { //编辑
             if (layEvent === 'edit') { //编辑
                 var url = './uid-edit.html?uid=' + data.uid + '&mac=' + data.mac + '&status=' + data.status
                 var url = './uid-edit.html?uid=' + data.uid + '&mac=' + data.mac + '&status=' + data.status
-                    + '&add_time=' + data.add_time + '&update_time=' + data.update_time;
+                    + '&add_time=' + data.add_time + '&update_time=' + data.update_time + '&area=' + data.area;
 
 
                 x_admin_show('编辑', url);
                 x_admin_show('编辑', url);
             } else if (layEvent === 'del') { //删除
             } else if (layEvent === 'del') { //删除
@@ -241,7 +253,26 @@
             } else {
             } else {
                 layer.msg("请选择需要删除的数据");
                 layer.msg("请选择需要删除的数据");
             }
             }
-        })
+        });
+
+
+        //批量删除
+        $(".history_btn").click(function () {
+            layer.confirm('确定把已占用的UID转为“历史UID”?', {icon: 3, title: '提示信息'}, function (index) {
+                    $.post(
+                        http_ip_port + '/uid/history',
+
+                        {
+                            'token': $.cookie('access_token')
+                        },
+                        function (data) {
+                            console.log(data);
+                            tableIns.reload();
+                            layer.close(index);
+                        }
+                    );
+                });
+        });
 
 
         function searchTable(where) {
         function searchTable(where) {
             // where['token'] = $.cookie('access_token')
             // where['token'] = $.cookie('access_token')
@@ -288,6 +319,16 @@
                 uid: $(".searchVal").val(),
                 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 () {
         $(".distribute_btn").on("click", function () {
             var distribute;
             var distribute;
@@ -378,6 +419,14 @@
     {{#  }}}
     {{#  }}}
 </script>
 </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">
 <script type="text/html" id="add_time">
     {{#
     {{#

+ 0 - 1312
web/UM-admin/unicode.html

@@ -1,1312 +0,0 @@
-
-<!DOCTYPE html>
-<html>
-<head>
-    <meta charset="utf-8"/>
-    <title>IconFont</title>
-    <link rel="stylesheet" href="./css/font.css">
-    <link rel="stylesheet" href="./css/xadmin.css">
-
-    <style type="text/css">
-
-        *{margin: 0;padding: 0;list-style: none;}
-            /*
-            KISSY CSS Reset
-            理念:1. reset 的目的不是清除浏览器的默认样式,这仅是部分工作。清除和重置是紧密不可分的。
-            2. reset 的目的不是让默认样式在所有浏览器下一致,而是减少默认样式有可能带来的问题。
-            3. reset 期望提供一套普适通用的基础样式。但没有银弹,推荐根据具体需求,裁剪和修改后再使用。
-            特色:1. 适应中文;2. 基于最新主流浏览器。
-            维护:玉伯<lifesinger@gmail.com>, 正淳<ragecarrier@gmail.com>
-             */
-
-            /** 清除内外边距 **/
-            body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, /* structural elements 结构元素 */
-            dl, dt, dd, ul, ol, li, /* list elements 列表元素 */
-            pre, /* text formatting elements 文本格式元素 */
-            form, fieldset, legend, button, input, textarea, /* form elements 表单元素 */
-            th, td /* table elements 表格元素 */ {
-              margin: 0;
-              padding: 0;
-            }
-
-            /** 设置默认字体 **/
-            body,
-            button, input, select, textarea /* for ie */ {
-              font: 12px/1.5 tahoma, arial, \5b8b\4f53, sans-serif;
-            }
-            h1, h2, h3, h4, h5, h6 { font-size: 100%; }
-            address, cite, dfn, em, var { font-style: normal; } /* 将斜体扶正 */
-            code, kbd, pre, samp { font-family: courier new, courier, monospace; } /* 统一等宽字体 */
-            small { font-size: 12px; } /* 小于 12px 的中文很难阅读,让 small 正常化 */
-
-            /** 重置列表元素 **/
-            ul, ol { list-style: none; }
-
-            /** 重置文本格式元素 **/
-            a { text-decoration: none; }
-            a:hover { text-decoration: underline; }
-
-
-            /** 重置表单元素 **/
-            legend { color: #000; } /* for ie6 */
-            fieldset, img { border: 0; } /* img 搭车:让链接里的 img 无边框 */
-            button, input, select, textarea { font-size: 100%; } /* 使得表单元素在 ie 下能继承字体大小 */
-            /* 注:optgroup 无法扶正 */
-
-            /** 重置表格元素 **/
-            table { border-collapse: collapse; border-spacing: 0; }
-
-            /* 清除浮动 */
-            .ks-clear:after, .clear:after {
-              content: '\20';
-              display: block;
-              height: 0;
-              clear: both;
-            }
-            .ks-clear, .clear {
-              *zoom: 1;
-            }
-
-            .main {
-              padding: 30px 100px;
-            width: 960px;
-            margin: 0 auto;
-            }
-            .main h1{font-size:36px; color:#333; text-align:left;margin-bottom:30px; border-bottom: 1px solid #eee;}
-
-            .helps{margin-top:40px;}
-            .helps pre{
-              padding:20px;
-              margin:10px 0;
-              border:solid 1px #e7e1cd;
-              background-color: #fffdef;
-              overflow: auto;
-            }
-
-            .icon_lists{
-              width: 100% !important;
-
-            }
-
-            .icon_lists li{
-              float:left;
-              width: 100px;
-              height:180px;
-              text-align: center;
-              list-style: none !important;
-            }
-            .icon_lists .icon{
-              font-size: 42px;
-              line-height: 100px;
-              margin: 10px 0;
-              color:#333;
-              -webkit-transition: font-size 0.25s ease-out 0s;
-              -moz-transition: font-size 0.25s ease-out 0s;
-              transition: font-size 0.25s ease-out 0s;
-
-            }
-            .icon_lists .icon:hover{
-              font-size: 100px;
-            }
-
-
-
-            .markdown {
-              color: #666;
-              font-size: 14px;
-              line-height: 1.8;
-            }
-
-            .highlight {
-              line-height: 1.5;
-            }
-
-            .markdown img {
-              vertical-align: middle;
-              max-width: 100%;
-            }
-
-            .markdown h1 {
-              color: #404040;
-              font-weight: 500;
-              line-height: 40px;
-              margin-bottom: 24px;
-            }
-
-            .markdown h2,
-            .markdown h3,
-            .markdown h4,
-            .markdown h5,
-            .markdown h6 {
-              color: #404040;
-              margin: 1.6em 0 0.6em 0;
-              font-weight: 500;
-              clear: both;
-            }
-
-            .markdown h1 {
-              font-size: 28px;
-            }
-
-            .markdown h2 {
-              font-size: 22px;
-            }
-
-            .markdown h3 {
-              font-size: 16px;
-            }
-
-            .markdown h4 {
-              font-size: 14px;
-            }
-
-            .markdown h5 {
-              font-size: 12px;
-            }
-
-            .markdown h6 {
-              font-size: 12px;
-            }
-
-            .markdown hr {
-              height: 1px;
-              border: 0;
-              background: #e9e9e9;
-              margin: 16px 0;
-              clear: both;
-            }
-
-            .markdown p,
-            .markdown pre {
-              margin: 1em 0;
-            }
-
-            .markdown > p,
-            .markdown > blockquote,
-            .markdown > .highlight,
-            .markdown > ol,
-            .markdown > ul {
-              width: 80%;
-            }
-
-            .markdown ul > li {
-              list-style: circle;
-            }
-
-            .markdown > ul li,
-            .markdown blockquote ul > li {
-              margin-left: 20px;
-              padding-left: 4px;
-            }
-
-            .markdown > ul li p,
-            .markdown > ol li p {
-              margin: 0.6em 0;
-            }
-
-            .markdown ol > li {
-              list-style: decimal;
-            }
-
-            .markdown > ol li,
-            .markdown blockquote ol > li {
-              margin-left: 20px;
-              padding-left: 4px;
-            }
-
-            .markdown code {
-              margin: 0 3px;
-              padding: 0 5px;
-              background: #eee;
-              border-radius: 3px;
-            }
-
-            .markdown pre {
-              border-radius: 6px;
-              background: #f7f7f7;
-              padding: 20px;
-            }
-
-            .markdown pre code {
-              border: none;
-              background: #f7f7f7;
-              margin: 0;
-            }
-
-            .markdown strong,
-            .markdown b {
-              font-weight: 600;
-            }
-
-            .markdown > table {
-              border-collapse: collapse;
-              border-spacing: 0px;
-              empty-cells: show;
-              border: 1px solid #e9e9e9;
-              width: 95%;
-              margin-bottom: 24px;
-            }
-
-            .markdown > table th {
-              white-space: nowrap;
-              color: #333;
-              font-weight: 600;
-
-            }
-
-            .markdown > table th,
-            .markdown > table td {
-              border: 1px solid #e9e9e9;
-              padding: 8px 16px;
-              text-align: left;
-            }
-
-            .markdown > table th {
-              background: #F7F7F7;
-            }
-
-            .markdown blockquote {
-              font-size: 90%;
-              color: #999;
-              border-left: 4px solid #e9e9e9;
-              padding-left: 0.8em;
-              margin: 1em 0;
-              font-style: italic;
-            }
-
-            .markdown blockquote p {
-              margin: 0;
-            }
-
-            .markdown .anchor {
-              opacity: 0;
-              transition: opacity 0.3s ease;
-              margin-left: 8px;
-            }
-
-            .markdown .waiting {
-              color: #ccc;
-            }
-
-            .markdown h1:hover .anchor,
-            .markdown h2:hover .anchor,
-            .markdown h3:hover .anchor,
-            .markdown h4:hover .anchor,
-            .markdown h5:hover .anchor,
-            .markdown h6:hover .anchor {
-              opacity: 1;
-              display: inline-block;
-            }
-
-            .markdown > br,
-            .markdown > p > br {
-              clear: both;
-            }
-
-
-            .hljs {
-              display: block;
-              background: white;
-              padding: 0.5em;
-              color: #333333;
-              overflow-x: auto;
-            }
-
-            .hljs-comment,
-            .hljs-meta {
-              color: #969896;
-            }
-
-            .hljs-string,
-            .hljs-variable,
-            .hljs-template-variable,
-            .hljs-strong,
-            .hljs-emphasis,
-            .hljs-quote {
-              color: #df5000;
-            }
-
-            .hljs-keyword,
-            .hljs-selector-tag,
-            .hljs-type {
-              color: #a71d5d;
-            }
-
-            .hljs-literal,
-            .hljs-symbol,
-            .hljs-bullet,
-            .hljs-attribute {
-              color: #0086b3;
-            }
-
-            .hljs-section,
-            .hljs-name {
-              color: #63a35c;
-            }
-
-            .hljs-tag {
-              color: #333333;
-            }
-
-            .hljs-title,
-            .hljs-attr,
-            .hljs-selector-id,
-            .hljs-selector-class,
-            .hljs-selector-attr,
-            .hljs-selector-pseudo {
-              color: #795da3;
-            }
-
-            .hljs-addition {
-              color: #55a532;
-              background-color: #eaffea;
-            }
-
-            .hljs-deletion {
-              color: #bd2c00;
-              background-color: #ffecec;
-            }
-
-            .hljs-link {
-              text-decoration: underline;
-            }
-
-            pre{
-              background: #fff;
-            }
-
-
-
-
-
-
-
-        .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;
-        }
-
-    </style>
-</head>
-<body>
-    <div class="main markdown">
-        <h1>IconFont 图标</h1>
-        <ul class="icon_lists clear">
-            
-                <li>
-                <i class="icon iconfont">&#xe696;</i>
-                    <div class="name">all</div>
-                    <div class="code">&amp;#xe696;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe697;</i>
-                    <div class="name">back</div>
-                    <div class="code">&amp;#xe697;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe698;</i>
-                    <div class="name">cart</div>
-                    <div class="code">&amp;#xe698;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe699;</i>
-                    <div class="name">Category</div>
-                    <div class="code">&amp;#xe699;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe69a;</i>
-                    <div class="name">close</div>
-                    <div class="code">&amp;#xe69a;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe69b;</i>
-                    <div class="name">comments</div>
-                    <div class="code">&amp;#xe69b;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe69c;</i>
-                    <div class="name">cry</div>
-                    <div class="code">&amp;#xe69c;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe69d;</i>
-                    <div class="name">delete</div>
-                    <div class="code">&amp;#xe69d;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe69e;</i>
-                    <div class="name">edit</div>
-                    <div class="code">&amp;#xe69e;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe69f;</i>
-                    <div class="name">email</div>
-                    <div class="code">&amp;#xe69f;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6a0;</i>
-                    <div class="name">favorite</div>
-                    <div class="code">&amp;#xe6a0;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6a2;</i>
-                    <div class="name">form</div>
-                    <div class="code">&amp;#xe6a2;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6a3;</i>
-                    <div class="name">help</div>
-                    <div class="code">&amp;#xe6a3;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6a4;</i>
-                    <div class="name">information</div>
-                    <div class="code">&amp;#xe6a4;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6a5;</i>
-                    <div class="name">less</div>
-                    <div class="code">&amp;#xe6a5;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6a6;</i>
-                    <div class="name">more_unfold</div>
-                    <div class="code">&amp;#xe6a6;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6a7;</i>
-                    <div class="name">more</div>
-                    <div class="code">&amp;#xe6a7;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6a8;</i>
-                    <div class="name">pic</div>
-                    <div class="code">&amp;#xe6a8;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6a9;</i>
-                    <div class="name">QRCode</div>
-                    <div class="code">&amp;#xe6a9;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6aa;</i>
-                    <div class="name">refresh</div>
-                    <div class="code">&amp;#xe6aa;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6ab;</i>
-                    <div class="name">RFQ</div>
-                    <div class="code">&amp;#xe6ab;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6ac;</i>
-                    <div class="name">search</div>
-                    <div class="code">&amp;#xe6ac;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6ad;</i>
-                    <div class="name">selected</div>
-                    <div class="code">&amp;#xe6ad;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6ae;</i>
-                    <div class="name">set</div>
-                    <div class="code">&amp;#xe6ae;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6af;</i>
-                    <div class="name">Smile</div>
-                    <div class="code">&amp;#xe6af;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6b1;</i>
-                    <div class="name">success</div>
-                    <div class="code">&amp;#xe6b1;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6b2;</i>
-                    <div class="name">survey</div>
-                    <div class="code">&amp;#xe6b2;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6b3;</i>
-                    <div class="name">training</div>
-                    <div class="code">&amp;#xe6b3;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6b4;</i>
-                    <div class="name">ViewGallery</div>
-                    <div class="code">&amp;#xe6b4;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6b5;</i>
-                    <div class="name">Viewlist</div>
-                    <div class="code">&amp;#xe6b5;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6b6;</i>
-                    <div class="name">warning</div>
-                    <div class="code">&amp;#xe6b6;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6b7;</i>
-                    <div class="name">wrong</div>
-                    <div class="code">&amp;#xe6b7;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6b8;</i>
-                    <div class="name">account</div>
-                    <div class="code">&amp;#xe6b8;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6b9;</i>
-                    <div class="name">add</div>
-                    <div class="code">&amp;#xe6b9;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6ba;</i>
-                    <div class="name">atm</div>
-                    <div class="code">&amp;#xe6ba;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6bb;</i>
-                    <div class="name">clock</div>
-                    <div class="code">&amp;#xe6bb;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6bc;</i>
-                    <div class="name">remind</div>
-                    <div class="code">&amp;#xe6bc;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6bf;</i>
-                    <div class="name">calendar</div>
-                    <div class="code">&amp;#xe6bf;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6c0;</i>
-                    <div class="name">attachment</div>
-                    <div class="code">&amp;#xe6c0;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6c5;</i>
-                    <div class="name">discount</div>
-                    <div class="code">&amp;#xe6c5;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6c7;</i>
-                    <div class="name">service</div>
-                    <div class="code">&amp;#xe6c7;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6c9;</i>
-                    <div class="name">print</div>
-                    <div class="code">&amp;#xe6c9;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6cb;</i>
-                    <div class="name">box</div>
-                    <div class="code">&amp;#xe6cb;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6ce;</i>
-                    <div class="name">process</div>
-                    <div class="code">&amp;#xe6ce;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6d2;</i>
-                    <div class="name">beauty</div>
-                    <div class="code">&amp;#xe6d2;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6d4;</i>
-                    <div class="name">electrical</div>
-                    <div class="code">&amp;#xe6d4;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6d7;</i>
-                    <div class="name">home</div>
-                    <div class="code">&amp;#xe6d7;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6da;</i>
-                    <div class="name">electronics</div>
-                    <div class="code">&amp;#xe6da;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6db;</i>
-                    <div class="name">gifts</div>
-                    <div class="code">&amp;#xe6db;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6de;</i>
-                    <div class="name">lights</div>
-                    <div class="code">&amp;#xe6de;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6e0;</i>
-                    <div class="name">sports</div>
-                    <div class="code">&amp;#xe6e0;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6e1;</i>
-                    <div class="name">toys</div>
-                    <div class="code">&amp;#xe6e1;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6e3;</i>
-                    <div class="name">auto</div>
-                    <div class="code">&amp;#xe6e3;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6e4;</i>
-                    <div class="name">jewelry</div>
-                    <div class="code">&amp;#xe6e4;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6e5;</i>
-                    <div class="name">trade-assurance</div>
-                    <div class="code">&amp;#xe6e5;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6e6;</i>
-                    <div class="name">browse</div>
-                    <div class="code">&amp;#xe6e6;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6e7;</i>
-                    <div class="name">rfq-qm</div>
-                    <div class="code">&amp;#xe6e7;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6e8;</i>
-                    <div class="name">rfq-quantity</div>
-                    <div class="code">&amp;#xe6e8;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6e9;</i>
-                    <div class="name">atm-away</div>
-                    <div class="code">&amp;#xe6e9;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6eb;</i>
-                    <div class="name">rfq</div>
-                    <div class="code">&amp;#xe6eb;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6ec;</i>
-                    <div class="name">scanning</div>
-                    <div class="code">&amp;#xe6ec;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6ee;</i>
-                    <div class="name">compare</div>
-                    <div class="code">&amp;#xe6ee;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6f1;</i>
-                    <div class="name">filter</div>
-                    <div class="code">&amp;#xe6f1;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6f2;</i>
-                    <div class="name">pin</div>
-                    <div class="code">&amp;#xe6f2;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6f3;</i>
-                    <div class="name">history</div>
-                    <div class="code">&amp;#xe6f3;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6f4;</i>
-                    <div class="name">product-features</div>
-                    <div class="code">&amp;#xe6f4;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6f5;</i>
-                    <div class="name">supplier-features</div>
-                    <div class="code">&amp;#xe6f5;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6f6;</i>
-                    <div class="name">similar-product</div>
-                    <div class="code">&amp;#xe6f6;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6f7;</i>
-                    <div class="name">link</div>
-                    <div class="code">&amp;#xe6f7;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6f8;</i>
-                    <div class="name">cut</div>
-                    <div class="code">&amp;#xe6f8;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6fa;</i>
-                    <div class="name">nav-list</div>
-                    <div class="code">&amp;#xe6fa;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6fb;</i>
-                    <div class="name">image-text</div>
-                    <div class="code">&amp;#xe6fb;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6fc;</i>
-                    <div class="name">text</div>
-                    <div class="code">&amp;#xe6fc;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6fd;</i>
-                    <div class="name">move</div>
-                    <div class="code">&amp;#xe6fd;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe6fe;</i>
-                    <div class="name">subtract</div>
-                    <div class="code">&amp;#xe6fe;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe702;</i>
-                    <div class="name">dollar</div>
-                    <div class="code">&amp;#xe702;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe704;</i>
-                    <div class="name">raw</div>
-                    <div class="code">&amp;#xe704;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe705;</i>
-                    <div class="name">office</div>
-                    <div class="code">&amp;#xe705;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe707;</i>
-                    <div class="name">agriculture</div>
-                    <div class="code">&amp;#xe707;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe709;</i>
-                    <div class="name">machinery</div>
-                    <div class="code">&amp;#xe709;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe70a;</i>
-                    <div class="name">assessed-Badge</div>
-                    <div class="code">&amp;#xe70a;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe70b;</i>
-                    <div class="name">personal-center</div>
-                    <div class="code">&amp;#xe70b;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe70c;</i>
-                    <div class="name">integral</div>
-                    <div class="code">&amp;#xe70c;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe70e;</i>
-                    <div class="name">operation</div>
-                    <div class="code">&amp;#xe70e;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe713;</i>
-                    <div class="name">remind</div>
-                    <div class="code">&amp;#xe713;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe714;</i>
-                    <div class="name">download</div>
-                    <div class="code">&amp;#xe714;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe715;</i>
-                    <div class="name">map</div>
-                    <div class="code">&amp;#xe715;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe716;</i>
-                    <div class="name">bad</div>
-                    <div class="code">&amp;#xe716;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe717;</i>
-                    <div class="name">good</div>
-                    <div class="code">&amp;#xe717;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe718;</i>
-                    <div class="name">skip</div>
-                    <div class="code">&amp;#xe718;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe719;</i>
-                    <div class="name">play</div>
-                    <div class="code">&amp;#xe719;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe71a;</i>
-                    <div class="name">stop</div>
-                    <div class="code">&amp;#xe71a;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe71b;</i>
-                    <div class="name">compass</div>
-                    <div class="code">&amp;#xe71b;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe71c;</i>
-                    <div class="name">security</div>
-                    <div class="code">&amp;#xe71c;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe71d;</i>
-                    <div class="name">share</div>
-                    <div class="code">&amp;#xe71d;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe722;</i>
-                    <div class="name">store</div>
-                    <div class="code">&amp;#xe722;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe723;</i>
-                    <div class="name">manage-order</div>
-                    <div class="code">&amp;#xe723;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe724;</i>
-                    <div class="name">rejected-order</div>
-                    <div class="code">&amp;#xe724;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe725;</i>
-                    <div class="name">phone</div>
-                    <div class="code">&amp;#xe725;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe726;</i>
-                    <div class="name">bussiness-man</div>
-                    <div class="code">&amp;#xe726;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe728;</i>
-                    <div class="name">shoes</div>
-                    <div class="code">&amp;#xe728;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe72a;</i>
-                    <div class="name">Mobile-phone</div>
-                    <div class="code">&amp;#xe72a;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe72d;</i>
-                    <div class="name">email-filling</div>
-                    <div class="code">&amp;#xe72d;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe730;</i>
-                    <div class="name">favorites-filling</div>
-                    <div class="code">&amp;#xe730;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe732;</i>
-                    <div class="name">account-filling</div>
-                    <div class="code">&amp;#xe732;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe735;</i>
-                    <div class="name">credit-level</div>
-                    <div class="code">&amp;#xe735;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe736;</i>
-                    <div class="name">credit-level-filling</div>
-                    <div class="code">&amp;#xe736;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe73f;</i>
-                    <div class="name">exl</div>
-                    <div class="code">&amp;#xe73f;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe740;</i>
-                    <div class="name">pdf</div>
-                    <div class="code">&amp;#xe740;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe741;</i>
-                    <div class="name">zip</div>
-                    <div class="code">&amp;#xe741;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe743;</i>
-                    <div class="name">sorting</div>
-                    <div class="code">&amp;#xe743;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe744;</i>
-                    <div class="name">copy</div>
-                    <div class="code">&amp;#xe744;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe747;</i>
-                    <div class="name">save</div>
-                    <div class="code">&amp;#xe747;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe749;</i>
-                    <div class="name"> inquiry-template</div>
-                    <div class="code">&amp;#xe749;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe74a;</i>
-                    <div class="name">template-default</div>
-                    <div class="code">&amp;#xe74a;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe74c;</i>
-                    <div class="name">libra</div>
-                    <div class="code">&amp;#xe74c;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe74e;</i>
-                    <div class="name">survey</div>
-                    <div class="code">&amp;#xe74e;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe74f;</i>
-                    <div class="name">ship</div>
-                    <div class="code">&amp;#xe74f;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe753;</i>
-                    <div class="name">bussiness-card</div>
-                    <div class="code">&amp;#xe753;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe756;</i>
-                    <div class="name">hot</div>
-                    <div class="code">&amp;#xe756;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe757;</i>
-                    <div class="name">data</div>
-                    <div class="code">&amp;#xe757;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe758;</i>
-                    <div class="name">trade</div>
-                    <div class="code">&amp;#xe758;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe75a;</i>
-                    <div class="name">onepage</div>
-                    <div class="code">&amp;#xe75a;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe75c;</i>
-                    <div class="name">signboard</div>
-                    <div class="code">&amp;#xe75c;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe75e;</i>
-                    <div class="name">shuffling-banner</div>
-                    <div class="code">&amp;#xe75e;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe75f;</i>
-                    <div class="name">component</div>
-                    <div class="code">&amp;#xe75f;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe760;</i>
-                    <div class="name">component-filling</div>
-                    <div class="code">&amp;#xe760;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe761;</i>
-                    <div class="name">color</div>
-                    <div class="code">&amp;#xe761;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe7cd;</i>
-                    <div class="name">color-filling</div>
-                    <div class="code">&amp;#xe7cd;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe7ce;</i>
-                    <div class="name">favorites</div>
-                    <div class="code">&amp;#xe7ce;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe802;</i>
-                    <div class="name">pic-filling</div>
-                    <div class="code">&amp;#xe802;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe803;</i>
-                    <div class="name">RFQ</div>
-                    <div class="code">&amp;#xe803;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe804;</i>
-                    <div class="name">RFQ-filling</div>
-                    <div class="code">&amp;#xe804;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe806;</i>
-                    <div class="name">original-image</div>
-                    <div class="code">&amp;#xe806;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe811;</i>
-                    <div class="name">logistic</div>
-                    <div class="code">&amp;#xe811;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe812;</i>
-                    <div class="name">Calculator</div>
-                    <div class="code">&amp;#xe812;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe820;</i>
-                    <div class="name">video</div>
-                    <div class="code">&amp;#xe820;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe828;</i>
-                    <div class="name">earth</div>
-                    <div class="code">&amp;#xe828;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe829;</i>
-                    <div class="name">task-management</div>
-                    <div class="code">&amp;#xe829;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe82a;</i>
-                    <div class="name">trust</div>
-                    <div class="code">&amp;#xe82a;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe82b;</i>
-                    <div class="name">password</div>
-                    <div class="code">&amp;#xe82b;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe839;</i>
-                    <div class="name">3column</div>
-                    <div class="code">&amp;#xe839;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe83a;</i>
-                    <div class="name">apparel</div>
-                    <div class="code">&amp;#xe83a;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe83b;</i>
-                    <div class="name">bags</div>
-                    <div class="code">&amp;#xe83b;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe83c;</i>
-                    <div class="name">folder</div>
-                    <div class="code">&amp;#xe83c;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe83d;</i>
-                    <div class="name">4column</div>
-                    <div class="code">&amp;#xe83d;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe842;</i>
-                    <div class="name">code</div>
-                    <div class="code">&amp;#xe842;</div>
-                </li>
-            
-                <li>
-                <i class="icon iconfont">&#xe843;</i>
-                    <div class="name">RFQ-filling</div>
-                    <div class="code">&amp;#xe843;</div>
-                </li>
-            
-        </ul>
-        <h2 id="unicode-">unicode引用</h2>
-        <hr>
-
-        <p>unicode是字体在网页端最原始的应用方式,特点是:</p>
-        <ul>
-        <li>兼容性最好,支持ie6+,及所有现代浏览器。</li>
-        <li>支持按字体的方式去动态调整图标大小,颜色等等。</li>
-        <li>但是因为是字体,所以不支持多色。只能使用平台里单色的图标,就算项目里有多色图标也会自动去色。</li>
-        </ul>
-        <blockquote>
-        <p>注意:新版iconfont支持多色图标,这些多色图标在unicode模式下将不能使用,如果有需求建议使用symbol的引用方式</p>
-        </blockquote>
-        
-        <h3 id="-">挑选相应图标并获取字体编码,应用于页面</h3>
-        <pre><code class="lang-js hljs javascript">&lt;i <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"iconfont"</span>&gt;&amp;#x33;<span class="xml"><span class="hljs-tag">&lt;/<span class="hljs-name">i</span>&gt;</span></span></code></pre>
-
-        <blockquote>
-        <p>"iconfont"是你项目下的font-family。可以通过编辑项目查看,默认是"iconfont"。</p>
-        </blockquote>
-    </div>
-
-
-</body>
-</html>

+ 15 - 15
web/UM-admin/welcome.html

@@ -17,7 +17,7 @@
         <p class="x-red">欢迎管理员!</p>
         <p class="x-red">欢迎管理员!</p>
         <p id="shownowTime" align="left">显示时间的位置</p>
         <p id="shownowTime" align="left">显示时间的位置</p>
     </blockquote>
     </blockquote>
-    <fieldset class="layui-elem-field" style="display: none;">
+    <fieldset class="layui-elem-field" >
         <legend>数据统计</legend>
         <legend>数据统计</legend>
         <div class="layui-field-box">
         <div class="layui-field-box">
             <div class="layui-col-md12">
             <div class="layui-col-md12">
@@ -29,30 +29,30 @@
                                 <ul class="layui-row layui-col-space10 layui-this">
                                 <ul class="layui-row layui-col-space10 layui-this">
                                     <li class="layui-col-xs3">
                                     <li class="layui-col-xs3">
                                         <a href="javascript:;" class="x-admin-backlog-body">
                                         <a href="javascript:;" class="x-admin-backlog-body">
-                                            <h3>设备总数</h3>
+                                            <h3>UID总数</h3>
                                             <p>
                                             <p>
-                                                <cite id="dve_total">66</cite></p>
+                                                <cite id="total">0</cite></p>
                                         </a>
                                         </a>
                                     </li>
                                     </li>
                                     <li class="layui-col-xs3">
                                     <li class="layui-col-xs3">
                                         <a href="javascript:;" class="x-admin-backlog-body">
                                         <a href="javascript:;" class="x-admin-backlog-body">
-                                            <h3>设备已使用</h3>
+                                            <h3>未分配UID</h3>
                                             <p>
                                             <p>
-                                                <cite id="dve_has_use">12</cite></p>
+                                                <cite id="uid_not_use">0</cite></p>
                                         </a>
                                         </a>
                                     </li>
                                     </li>
                                     <li class="layui-col-xs3">
                                     <li class="layui-col-xs3">
                                         <a href="javascript:;" class="x-admin-backlog-body">
                                         <a href="javascript:;" class="x-admin-backlog-body">
-                                            <h3>设备未使用</h3>
+                                            <h3>已分配UID</h3>
                                             <p>
                                             <p>
-                                                <cite id="dve_not_use">99</cite></p>
+                                                <cite id="uid_allocated">0</cite></p>
                                         </a>
                                         </a>
                                     </li>
                                     </li>
                                     <li class="layui-col-xs3">
                                     <li class="layui-col-xs3">
                                         <a href="javascript:;" class="x-admin-backlog-body">
                                         <a href="javascript:;" class="x-admin-backlog-body">
-                                            <h3>用户总数</h3>
+                                            <h3>已使用UID</h3>
                                             <p>
                                             <p>
-                                                <cite id="user_total">67</cite></p>
+                                                <cite id="uid_has_use">0</cite></p>
                                         </a>
                                         </a>
                                     </li>
                                     </li>
                                 </ul>
                                 </ul>
@@ -70,7 +70,7 @@
                 <tbody>
                 <tbody>
                 <tr>
                 <tr>
                     <th>系统版本</th>
                     <th>系统版本</th>
-                    <td>1.0</td>
+                    <td>2.0</td>
                 </tr>
                 </tr>
                 <tr>
                 <tr>
                     <th>服务器地址</th>
                     <th>服务器地址</th>
@@ -139,16 +139,16 @@
         var access_token = $.cookie('access_token')
         var access_token = $.cookie('access_token')
         if (access_token) {
         if (access_token) {
             $.GetJSON(
             $.GetJSON(
-                http_ip_port + '/sys/total/',
+                http_ip_port + '/uid/statistics',
                 {'token': access_token},
                 {'token': access_token},
                 function (data) {
                 function (data) {
                     console.log(data)
                     console.log(data)
                     if (data['code'] == 0) {
                     if (data['code'] == 0) {
                         var res = data['res']
                         var res = data['res']
-                        $('#user_total').html(res['user_total'])
-                        $('#dve_has_use').html(res['dve_has_use'])
-                        $('#dve_not_use').html(res['dve_not_use'])
-                        $('#dve_total').html(res['dve_total'])
+                        $('#total').html(res['total'])
+                        $('#uid_not_use').html(res['uid_not_use'])
+                        $('#uid_allocated').html(res['uid_allocated'])
+                        $('#uid_has_use').html(res['uid_has_use'])
                     } else {
                     } else {
                         alert(data['msg'])
                         alert(data['msg'])
                     }
                     }

Some files were not shown because too many files changed in this diff