Quellcode durchsuchen

完善UID系统2.0

tanghongbin vor 4 Jahren
Ursprung
Commit
3f093e4114

BIN
AnsjerUIDManage.rar


+ 15 - 4
AnsjerUIDManage/settings.py

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

+ 7 - 3
AnsjerUIDManage/urls.py

@@ -16,15 +16,19 @@ Including another URLconf
 from django.contrib import admin
 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 = [
     path('admin/', admin.site.urls),
     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('history/(?P<operation>.*)', HistoryUIDController.HistoryUIDView.as_view()),
     re_path('log/(?P<operation>.*)', LogController.LogView.as_view()),
+    re_path('orderTask/(?P<operation>.*)', OrderTaskController.OrderTaskView.as_view()),
+    path('upload', FileController.UploadUIDFileView.as_view()),
+    path('download', FileController.DownloadUIDFileView.as_view()),
     path('sales', SalesController.SalesView.as_view()),
     path('device/online', SalesController.DeviceOnlineView.as_view())
+
 ]

+ 5 - 1
Controller/FileController.py

@@ -2,6 +2,7 @@
 # -*- coding: utf-8 -*-
 import base64
 import json
+import logging
 import os
 import time
 import zipfile
@@ -129,6 +130,8 @@ class UploadUIDFileView(View):
                     # print(repr(e))
                     if savePoint:
                         transaction.rollback(savePoint)
+                    djangoLogger = logging.getLogger('django')
+                    djangoLogger.exception(repr(e))
                     return response.json(174, str(e))
                 else:
                     savePoint = None
@@ -521,4 +524,5 @@ class DownloadUIDFileView(View):
         response['content_type'] = "application/octet-stream"
         response['Content-Disposition'] = 'attachment; filename=UID' + time.strftime('_%Y_%m_%d_%H_%M_%S',
                                                                                      time.localtime()) + '.zip'
-        return response
+        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)
         elif operation == 'queryAll':
             return self.do_query_all(request_dict, token, response)
+        elif operation == 'delete':
+            return self.do_delete(request_dict, response)
         else:
             return response.json(404)
 
     def do_query(self, request_dict, token: TokenObject, response):
         page = request_dict.get('page', None)
-        line = request_dict.get('line', None)
+        line = request_dict.get('limit', None)
 
         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():
                 page = int(page)
                 line = int(line)
@@ -65,4 +67,13 @@ class LogView(View):
             count = log_qs.count()
             return response.json(0, {'count': count, 'data': list(log_qs)})
         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.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
+from Service.ModelService import ModelService
 
 
 class UIDView(View):
@@ -53,6 +54,18 @@ class UIDView(View):
             return self.download_txt(token, response)
         elif operation == 'download_1':
             return self.download_txt_two(token, response)
+        elif operation == 'list':
+            return self.do_list(request_dict, response)
+        elif operation == 'delete':
+            return self.do_delete(token.userID, request_dict, response)
+        elif operation == 'batchDelete':
+            return self.do_batch_delete(token.userID, request_dict, response)
+        elif operation == 'adminUpdate':
+            return self.do_admin_update(token.userID, request_dict, response)
+        elif operation == 'history':
+            return self.do_history(token.userID, request_dict, response)
+        elif operation == 'statistics':
+            return self.do_admin_statistics(token.userID, request_dict, response)
         else:
             return response.json(309)
 
@@ -161,7 +174,6 @@ class UIDView(View):
                 updates.append(item)
 
                 if len(datas) % 5000 == 0:
-                    # count += 1
                     result = self.do_update(datas, updates, savePoint)
                     if result != 0:
                         return response.json(result)
@@ -317,3 +329,151 @@ class UIDView(View):
         response['Content-Disposition'] = 'attachment;filename=' + filename
 
         return response
+
+    def do_list(self, request_dict, response):
+        page = request_dict.get('page', None)
+        line = request_dict.get('limit', None)
+        status = request_dict.get('status', None)
+        area = request_dict.get('area', None)
+        start_time = request_dict.get('starttime', None)
+        stop_time = request_dict.get('endtime', None)
+        uid = request_dict.get('uid', None)
+
+        if page and line:
+
+            uid_qs = UIDModel.objects.filter()
+            res = {
+                'count': 0,
+                'data': []
+            }
+
+            if uid_qs.exists():
+                page = int(page)
+                line = int(line)
+
+                start = (page - 1) * line
+                end = start + line
+
+                if uid:
+                    uid_qs = uid_qs.filter(uid=uid)
+
+                if status:
+                    uid_qs = uid_qs.filter(status=status)
+
+                if area:
+                    uid_qs = uid_qs.filter(area=area)
+
+                if start_time:
+                    uid_qs = uid_qs.filter(update_time__gte=start_time)
+
+                if stop_time:
+                    if stop_time > start:
+                        uid_qs = uid_qs.filter(update_time__lte=stop_time)
+
+                res['count'] = uid_qs.count()
+                uid_qs = uid_qs.values()[start:end]
+
+                res['data'] = list(uid_qs)
+
+            print(res)
+            return response.json(0, res)
+        else:
+            return response.json(444)
+
+    def do_delete(self, userID, request_dict, response):
+        uid = request_dict.get('uid', None)
+        user_qs = UserModel.objects.filter(id=userID)
+
+        if user_qs.exists():
+            user = user_qs[0]
+            if int(user.permission) != 0:
+                return response.json(309)
+
+            UIDModel.objects.filter(uid=uid).delete()
+            return response.json(0)
+        else:
+            return response.json(309)
+
+    def do_batch_delete(self, userID, request_dict, response):
+        perm = ModelService.check_perm(userID, 0)
+        if not perm:
+            return response.json(309)
+
+        uids = request_dict.get('uidlist', None)
+
+        if uids:
+            uids = json.loads(uids)
+            UIDModel.objects.filter(uid__in=uids).delete()
+            return response.json(0)
+        else:
+            return response.json(444)
+
+    def do_admin_update(self, userID, request_dict, response):
+        perm = ModelService.check_perm(userID, 0)
+        if not perm:
+            return response.json(309)
+
+        uid = request_dict.get('uid', None)
+        content = request_dict.get('content', None)
+        print(content)
+
+        if uid and content:
+            content = json.loads(content)
+            print(content)
+            content['update_time'] = int(time.time())
+            uid_qs = UIDModel.objects.filter(uid=uid)
+            if uid_qs.exists():
+                uid_qs.update(**content)
+                return response.json(0)
+            else:
+                return response.json(173)
+        else:
+            return response.json(444)
+
+    def do_history(self, userID, request_dict, response):
+        perm = ModelService.check_perm(userID, 0)
+        if not perm:
+            return response.json(309)
+
+        uid_qs = UIDModel.objects.filter(status=2)
+
+        if uid_qs.exists():
+
+            uids = []
+            for uid in uid_qs:
+                uids.append(uid)
+
+                if (len(uids) % 5000) == 0:
+                    HistoryUIDModel.objects.bulk_create(uids)
+                    uids.clear()
+
+            if len(uids) > 0:
+                HistoryUIDModel.objects.bulk_create(uids)
+                uids.clear()
+
+        uid_qs.delete()
+
+        return response.json(0)
+
+    def do_admin_statistics(self, userID, request_dict, response):
+        perm = ModelService.check_perm(userID, 0)
+        if not perm:
+            return response.json(309)
+
+        uid_not_use = UIDModel.objects.filter(status=0).count()
+
+        uid_allocated = UIDModel.objects.filter(status=1).count()
+
+        uid_has_use = UIDModel.objects.filter(status=2).count()
+
+        total = uid_not_use + uid_allocated + uid_has_use
+
+        res = {
+            'uid_not_use': uid_not_use,
+            'uid_allocated': uid_allocated,
+            'uid_has_use': uid_has_use,
+            'total': total
+        }
+
+        return response.json(0, res)
+

+ 143 - 5
Controller/UserController.py

@@ -1,5 +1,7 @@
 #!/usr/bin/env python3
 # -*- coding: utf-8 -*-
+import time
+
 from django.db.models import Q
 from django.utils.decorators import method_decorator
 from django.views import View
@@ -8,6 +10,7 @@ from django.views.decorators.csrf import csrf_exempt
 from Model.models import UserModel
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
+from Service.ModelService import ModelService
 
 
 class UserView(View):
@@ -30,16 +33,35 @@ class UserView(View):
         return self.validation(request_dict, operation)
 
     def validation(self, request_dict, operation):
+
         if operation == 'login':
             return self.login(request_dict)
         elif operation == 'logout':
             return self.logout(request_dict)
-        elif operation == 'query':
-            return self.do_query(request_dict)
-        elif operation == 'modify':
-            return self.do_modify_password(request_dict)
         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):
         username = request_dict.get('username', None)
@@ -156,3 +178,119 @@ class UserView(View):
             return response.json(0)
         else:
             return response.json(0)
+
+    def do_list(self, request_dict):
+        token = request_dict.get('token', None)
+
+        response = ResponseObject()
+        token = TokenObject(token)
+        if token.code != 0:
+            return response.json(token.code)
+
+        page = request_dict.get('page', None)
+        line = request_dict.get('limit', None)
+
+        if page and line:
+            user_qs = UserModel.objects.filter()
+
+            res = {
+                'count': user_qs.count(),
+                'data': []
+            }
+            if user_qs.exists():
+                page = int(page)
+                line = int(line)
+
+                start = (page - 1) * line
+                end = start + line
+
+                user_qs = user_qs[start:end].values('id', 'username', 'permission', 'phone', 'login_time', 'add_time')
+
+                res['data'] = list(user_qs)
+            return response.json(0, res)
+        else:
+            return response.json(444)
+
+    def do_admin_add(self, userID, request_dict, response):
+        perm = ModelService.check_perm(userID, 0)
+        if not perm:
+            return response.json(309)
+
+        print(request_dict)
+        username = request_dict.get('username', None)
+        password = request_dict.get('password', None)
+        phone = request_dict.get('phone', None)
+        role = request_dict.get('role', None)
+
+        if username and password and role:
+            user = UserModel()
+            user.username = username
+            user.password = password
+            user.permission = role
+            user.phone = phone
+            user.add_time = int(time.time())
+            user.save()
+            return response.json(0)
+        else:
+            return response.json(444)
+
+    def do_admin_delete(self, userID, request_dict, response):
+        perm = ModelService.check_perm(userID, 0)
+        if not perm:
+            return response.json(309)
+
+        username = request_dict.get('username', None)
+
+        if username:
+            user_qs = UserModel.objects.filter(username=username)
+            if user_qs.exists():
+                user_qs.delete()
+                return response.json(0)
+            else:
+                return response.json(9)
+        else:
+            return response.json(444)
+
+    def do_admin_update(self, userID, request_dict, response):
+        perm = ModelService.check_perm(userID, 0)
+        if not perm:
+            return response.json(309)
+
+        username = request_dict.get('username', None)
+        role = request_dict.get('role', None)
+        password = request_dict.get('password', None)
+        phone = request_dict.get('phone', None)
+
+        if username:
+            update_data = {}
+
+            if role:
+                update_data['permission'] = role
+
+            if password:
+                update_data['password'] = password
+
+            if phone:
+                update_data['phone'] = phone
+
+            UserModel.objects.filter(username=username).update(**update_data)
+            return response.json(0)
+        else:
+            return response.json(444)
+
+    def do_admin_reset(self, userID, request_dict, response):
+        perm = ModelService.check_perm(userID, 0)
+        if not perm:
+            return response.json(309)
+
+        username = request_dict.get('username', None)
+
+        if username:
+            user_qs = UserModel.objects.filter(username=username)
+            if user_qs.exists():
+                user_qs.update(password='123456')
+                return response.json(0)
+            else:
+                return response.json(9)
+        else:
+            return response.json(444)

+ 3 - 0
Model/models.py

@@ -10,6 +10,8 @@ class UserModel(models.Model):
     permission = models.CharField(max_length=24, null=False, verbose_name='权限')
     login_time = models.IntegerField(blank=True, default=0, verbose_name='登录时间')
     online = models.SmallIntegerField(default=0, verbose_name='是否在线')
+    phone = models.CharField(max_length=11, default='', verbose_name='手机号')
+    add_time = models.IntegerField(default=0, verbose_name='添加时间')
 
     class Meta:
         verbose_name = '用户表'
@@ -28,6 +30,7 @@ class UIDModel(models.Model):
     area = models.SmallIntegerField(default=0, verbose_name='区域')  #0:国内;1:国外
 
     class Meta:
+        ordering = ('-add_time',)
         verbose_name = 'uid表'
         verbose_name_plural = verbose_name
         db_table = 'uid'

+ 7 - 2
Service/LogMiddleware.py

@@ -50,8 +50,13 @@ def add_log(request, response):
         if response.status_code != 200:
             return
     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:
             print('code is {code}'.format(code=code))
             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>
                         <a _href="umlist.html">
                             <i class="iconfont">&#xe6a7;</i>
-                            <cite>设备信息</cite>
+                            <cite>UI信息</cite>
                         </a>
                     </li>
                 </ul>
             </li>
             <li>
                 <a href="javascript:;">
-                    <i class="iconfont">&#xe6b8;</i>
+                    <i class="iconfont">&#59409;</i>
                     <cite>日志管理</cite>
                     <i class="iconfont nav_right">&#xe697;</i>
                 </a>
@@ -104,7 +104,7 @@
 
             <li>
                 <a href="javascript:;">
-                    <i class="iconfont">&#xe6b8;</i>
+                    <i class="iconfont">&#59171;</i>
                     <cite>订单任务管理</cite>
                     <i class="iconfont nav_right">&#xe697;</i>
                 </a>
@@ -117,6 +117,22 @@
                     </li>
                 </ul>
             </li>
+
+            <li>
+                <a href="javascript:;">
+                    <i class="iconfont">&#xe723;</i>
+                    <cite>历史UID管理</cite>
+                    <i class="iconfont nav_right">&#xe697;</i>
+                </a>
+                <ul class="sub-menu">
+                    <li>
+                        <a _href="history-uid-list.html">
+                            <i class="iconfont">&#xe6a7;</i>
+                            <cite>UID信息</cite>
+                        </a>
+                    </li>
+                </ul>
+            </li>
         </ul>
     </div>
 </div>

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

@@ -2,8 +2,8 @@
  * 获取数据ajax-get请求
  * @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){
     $.ajax({
         url:url,

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
web/UM-admin/lib/layui/css/layui.css


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

@@ -101,10 +101,10 @@
                                 tableInstance.reload();
                                 layer.close(index)
                             }else {
-                                alert(res.code)
+                                layer.msg(res.code)
                             }
                         }
-                    )
+                    );
                 });
             }else if(layEvent === 'reset'){
                 layer.confirm('确定重置\r\n' + data.username + '的密码吗?', {icon: 3, title:'提示信息'}, function (index) {
@@ -117,14 +117,14 @@
                         function (res) {
                             res = JSON.parse(res);
                             if(res.code === 0) {
-                                alert('重置成功!')
+                                layer.msg('重置成功!')
                                 tableInstance.reload();
                                 layer.close(index);
                             }else{
-                                alert(res.msg);
+                                layer.msg(res.msg);
                             }
                         }
-                    )
+                    );
                 });
             }
 
@@ -138,7 +138,7 @@
 <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" 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>-->
 </script>
 <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">
                 <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="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>
@@ -94,6 +103,14 @@
             $("input[title='已暂用']").click();
         }
 
+        var area = getQueryString('area');
+        if(area == 0){
+            $("input[title='国内']").click();
+
+        }else if(area == 1){
+            $("input[title='国外']").click();
+        }
+
         $('#mac').val(getQueryString('mac'));
         $('#add_time').val(formatDate(getQueryString('add_time') * 1000));
         $('#update_time').val(formatDate(getQueryString('update_time') * 1000));
@@ -131,7 +148,8 @@
             var values = data.field;
             var content = {
                 mac: values.mac,
-                status: values.status
+                status: values.status,
+                area: values.area
             };
             $.post(
                 http_ip_port + '/uid/adminUpdate',

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

@@ -53,6 +53,17 @@
                 </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"/>
@@ -148,6 +159,7 @@
                 {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'},
@@ -170,7 +182,7 @@
                 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;
+                    + '&add_time=' + data.add_time + '&update_time=' + data.update_time + '&area=' + data.area;
 
                 x_admin_show('编辑', url);
             } else if (layEvent === 'del') { //删除
@@ -241,7 +253,26 @@
             } else {
                 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) {
             // where['token'] = $.cookie('access_token')
@@ -288,6 +319,16 @@
                 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;
@@ -378,6 +419,14 @@
     {{#  }}}
 </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">
     {{#

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

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.