Commit a0bdc4ca authored by Jalin's avatar Jalin

增加 Web 管理页面

parent b1e826b2
......@@ -65,6 +65,14 @@ EMAIL_SERVER_HOST = 'localhost' # 邮件服务 host
EMAIL_SERVER_USER = ''
EMAIL_SERVER_PASSWORD = ''
# Web 管理
WEB_ENABLE = 1 # 是否打开 Web 管理
WEB_USER = { # 登录信息
'username': 'admin',
'password': 'password'
}
WEB_PORT = 8008 # 监听端口
# 查询任务
QUERY_JOBS = [
{
......
......@@ -54,7 +54,6 @@ REDIS_HOST = 'localhost' # Redis host
REDIS_PORT = '6379' # Redis post
REDIS_PASSWORD = '' # # Redis 密码 没有可以留空
# 邮箱配置
EMAIL_ENABLED = 0 # 是否开启邮件通知
EMAIL_SENDER = 'sender@example.com' # 邮件发送者
......@@ -63,6 +62,14 @@ EMAIL_SERVER_HOST = 'localhost' # 邮件服务 host
EMAIL_SERVER_USER = ''
EMAIL_SERVER_PASSWORD = ''
# Web 管理
WEB_ENABLE = 1 # 是否打开 Web 管理
WEB_USER = { # 登录信息
'username': 'admin',
'password': 'password'
}
WEB_PORT = 8008 # 监听端口
# 查询任务
QUERY_JOBS = [
{
......
......@@ -5,6 +5,7 @@ from py12306.app import *
from py12306.log.common_log import CommonLog
from py12306.query.query import Query
from py12306.user.user import User
from py12306.web.web import Web
def main():
......@@ -18,6 +19,7 @@ def main():
Query.check_before_fun()
####### 运行任务
Web.run()
User.run()
Query.run()
if not Const.IS_TEST:
......
......@@ -64,6 +64,7 @@ class Config:
WEB_ENABLE = 0
WEB_USER = {}
WEB_PORT = 8080
WEB_ENTER_HTML_PATH = PROJECT_DIR + 'py12306/web/static/index.html'
envs = []
retry_time = 5
......
......@@ -100,6 +100,11 @@ def get_file_modify_time(filePath):
return timestamp_to_time(timestamp)
def get_file_total_line_num(file, encoding='utf-8'):
with open(file, 'r', encoding=encoding) as f:
return len(f.readlines())
def str_to_time(str):
return datetime.datetime.strptime(str, '%Y-%m-%d %H:%M:%S.%f')
......
......@@ -72,7 +72,7 @@ class BaseLog:
return self
def notification(self, title, content=''):
if sys.platform == 'darwin':
os.system(
'osascript -e \'tell app "System Events" to display notification "{content}" with title "{title}"\''.format(
title=title, content=content))
# if sys.platform == 'darwin': # 不太友好 先关闭,之前没考虑到 mac 下会请求权限
# os.system( 'osascript -e \'tell app "System Events" to display notification "{content}" with title "{title}"\''.format(
# title=title, content=content))
pass
......@@ -30,6 +30,8 @@ class CommonLog(BaseLog):
MESSAGE_SEND_EMAIL_SUCCESS = '邮件发送成功,请检查收件箱'
MESSAGE_SEND_EMAIL_FAIL = '邮件发送失败,请手动检查配置,错误原因 {}'
MESSAGE_OUTPUT_TO_FILE_IS_UN_ENABLE = '请先打开配置:输出到文件'
def __init__(self):
super().__init__()
self.init_data()
......
......@@ -153,7 +153,8 @@ class QueryLog(BaseLog):
def print_job_start(cls, job_name):
self = cls()
self.add_log(
'=== 正在进行第 {query_count} 次查询 {job_name} === {time}'.format(query_count=self.data.get('query_count') + 1,
'=== 正在进行第 {query_count} 次查询 {job_name} === {time}'.format(
query_count=(self.data.get('query_count', 0)) + 1,
job_name=job_name, time=datetime.datetime.now()))
self.refresh_data()
if is_main_thread():
......
......@@ -200,7 +200,7 @@ class UserJob:
self.info = {**self.info, **info}
def get_name(self):
return self.info.get('user_name')
return self.info.get('user_name', '')
def save_user(self):
if Config().is_cluster_enabled():
......
from flask import Blueprint, request
import json
import re
from flask import Blueprint, request, send_file
from flask.json import jsonify
from flask_jwt_extended import (jwt_required)
......@@ -9,6 +12,21 @@ from py12306.user.user import User
app = Blueprint('app', __name__)
@app.route('/', methods=['GET', 'POST'])
def index():
file = Config().WEB_ENTER_HTML_PATH
result = ''
with open(file, 'r', encoding='utf-8') as f:
result = f.read()
config = {
'API_BASE_URL': '' # TODO 自定义 Host
}
result = re.sub(r'<script>[\s\S]*?<\/script>', '<script>window.config={}</script>'.format(json.dumps(config)),
result)
return result
@app.route('/app/menus', methods=['GET'])
@jwt_required
def menus():
......@@ -17,8 +35,10 @@ def menus():
"""
menus = [
{"id": 10, "name": "首页", "url": "/", "icon": "fa fa-tachometer-alt"},
{"id": 40, "name": "数据分析", "url": "/analyze", "icon": "fa fa-signature"},
{"id": 50, "name": "帮助中心", "url": "/help", "icon": "fa fa-search"}
{"id": 20, "name": "用户管理", "url": "/user", "icon": "fa fa-user"},
{"id": 30, "name": "查询任务", "url": "/query", "icon": "fa fa-infinity"},
{"id": 40, "name": "实时日志", "url": "/log/realtime", "icon": "fa fa-signature"},
{"id": 50, "name": "帮助", "url": "/help", "icon": "fa fa-search"}
]
return jsonify(menus)
......@@ -30,6 +50,6 @@ def actions():
操作列表
"""
actions = [
{"text": "退出登录", "link": "", "icon": "fa fa-sign-out-alt"}
{"text": "退出登录", "key": 'logout', "link": "", "icon": "fa fa-sign-out-alt"}
]
return jsonify(actions)
import linecache
from flask import Blueprint, request
from flask.json import jsonify
from flask_jwt_extended import (jwt_required)
from py12306.config import Config
from py12306.helpers.func import get_file_total_line_num
from py12306.log.common_log import CommonLog
from py12306.query.query import Query
from py12306.user.user import User
log = Blueprint('log', __name__)
@log.route('/log/output', methods=['GET'])
@jwt_required
def log_output():
"""
日志
:return:
"""
last_line = int(request.args.get('line', 0))
limit = int(request.args.get('limit', 10))
max_old = 200 # 取最新时 往后再取的数
file = Config().OUT_PUT_LOG_TO_FILE_PATH
res = []
if last_line == -1:
total_line = get_file_total_line_num(file)
last_line = total_line - max_old if total_line > max_old else 0
ranges = range(max_old + limit)
else:
ranges = range(limit)
if Config().OUT_PUT_LOG_TO_FILE_ENABLED:
# with open(Config().OUT_PUT_LOG_TO_FILE_PATH, 'r', encoding='utf-8') as f:
# res = f.readlines()[last_line:limit]
linecache.updatecache(file)
for i in ranges:
tmp = linecache.getline(file, last_line + i)
if tmp != '': res.append(tmp)
last_line += len(res)
else:
res = CommonLog.MESSAGE_OUTPUT_TO_FILE_IS_UN_ENABLE
return jsonify({
'last_line': last_line,
'data': res
})
......@@ -26,6 +26,8 @@ def convert_job_to_info(job: Job):
'name': job.job_name,
'left_dates': job.left_dates,
'stations': job.stations,
'members': job.members,
'member_num': job.member_num,
'allow_seats': job.allow_seats,
'allow_train_numbers': job.allow_train_numbers,
'passengers': job.passengers,
......
......@@ -3,6 +3,7 @@ from flask.json import jsonify
from flask_jwt_extended import (jwt_required, create_access_token)
from py12306.config import Config
from py12306.helpers.func import str_to_time, timestamp_to_time
from py12306.user.job import UserJob
from py12306.user.user import User
......@@ -21,7 +22,7 @@ def login():
'password'):
access_token = create_access_token(identity=username)
return jsonify(access_token=access_token)
return jsonify({"msg": "用户名或密码错误"}), 401
return jsonify({"msg": "用户名或密码错误"}), 422
@user.route('/users', methods=['GET'])
......@@ -36,11 +37,24 @@ def users():
return jsonify(result)
@user.route('/user/info', methods=['GET'])
@jwt_required
def user_info():
"""
获取用户信息
:return:
"""
result = {
'name': Config().WEB_USER.get('username')
}
return jsonify(result)
def convert_job_to_info(job: UserJob):
return {
'key': job.key,
'user_name': job.user_name,
'name': job.get_name(),
'is_ready': job.is_ready,
'is_loaded': job.user_loaded, # 是否成功加载 ready 是当前是否可用
'last_heartbeat': job.last_heartbeat
'last_heartbeat': timestamp_to_time(job.last_heartbeat)
}
This source diff could not be displayed because it is too large. You can view the blob instead.
<?xml version="1.0" encoding="UTF-8"?>
<svg width="60px" height="65px" viewBox="0 0 60 65" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 52.1 (67048) - http://www.bohemiancoding.com/sketch -->
<title>2754577-avatar-business-face-people</title>
<desc>Created with Sketch.</desc>
<g id="Symbols" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="left-bar" transform="translate(-90.000000, -43.000000)">
<g id="avatar">
<g transform="translate(90.000000, 43.000000)">
<g id="Group-3">
<g id="2754577-avatar-business-face-people" transform="translate(0.000000, 0.000000)">
<path d="M46.3055556,57.5277778 C46.3055556,57.5277778 46.4166667,58.3333333 46.5833333,59.6527778 C50.125,57.3055556 53.125,54.2222222 55.3888889,50.625 C54.9861111,49.8055556 54.5694444,49.1527778 54.0972222,48.7361111 C52.5694444,47.3888889 48.8472222,44.4583333 35.9722222,38.8055556 L30.9027778,38.7777778 L30.9027778,38.3472222 L26.2638889,38.3472222 L26.2638889,38.8055556 L24.0416667,38.8194444 C11.1666667,44.4583333 7.44444444,47.3888889 5.91666667,48.75 C5.44444444,49.1666667 5.01388889,49.8194444 4.625,50.6388889 C6.88888889,54.2361111 9.88888889,57.3194444 13.4305556,59.6666667 C13.5972222,58.3472222 13.7083333,57.5416667 13.7083333,57.5416667 C13.7083333,57.5416667 13.7083333,58.4027778 13.7083333,59.8472222 C18.4027778,62.8888889 24,64.6666667 30,64.6666667 C36.0138889,64.6666667 41.6111111,62.9027778 46.2916667,59.8472222 C46.3055556,58.3888889 46.3055556,57.5277778 46.3055556,57.5277778 Z" id="Path" fill="#B9DAF3"></path>
<path d="M5.91666667,48.7361111 C7.44444444,47.3888889 11.1666667,44.4583333 24.0416667,38.8055556 L26.2638889,38.7916667 L26.2638889,38.3333333 L30.9027778,38.3333333 L30.9027778,38.7638889 L35.9722222,38.7916667 C48.8472222,44.4305556 52.5694444,47.3611111 54.0972222,48.7222222 C54.5694444,49.1388889 55,49.7916667 55.3888889,50.6111111 C58.2916667,46 59.9722222,40.5416667 59.9722222,34.6805556 C59.9583333,18.1388889 46.5416667,4.72222222 30,4.72222222 C13.4583333,4.72222222 0.0416666667,18.1388889 0.0416666667,34.6944444 C0.0416666667,40.5416667 1.72222222,46.0138889 4.625,50.625 C5.01388889,49.8055556 5.44444444,49.1527778 5.91666667,48.7361111 Z" id="Path" fill="#D1E6F7"></path>
<path d="M30,21.7083333 L30,44.8612519 C32.2638889,44.875 34.5277778,43.8611111 36.25,41.7638889 L36.25,27.4861111 C36.25,23.625 33.125,21.7083333 30,21.7083333 Z" id="Path" fill="#EDD9B4"></path>
<path d="M23.75,27.4861111 L23.75,41.75 C25.4722222,43.7777778 27.7361111,44.8333333 30,44.8472222 L30,21.7083333 C26.875,21.7083333 23.75,23.625 23.75,27.4861111 Z" id="Path" fill="#DCC5A1"></path>
<path d="M36.25,27.4861111 L36.25,37.0416667 C33.8888889,38.7638889 31.6111111,39.7361111 30,39.7361111 C28.3888889,39.7361111 26.1111111,38.7638889 23.75,37.0416667 L23.75,27.4861111 C23.75,19.7777778 36.25,19.7777778 36.25,27.4861111" id="Path" fill="#BC9F82"></path>
<polygon id="Path" fill="#89BCE5" points="36.25 38.9305556 41.1805556 41.1805556 34.9027778 49.8888889 30 44.8611111"></polygon>
<polygon id="Path" fill="#89BCE5" points="23.75 38.9305556 18.8194444 41.1805556 25.0972222 49.8888889 30 44.8611111"></polygon>
<path d="M30.1527778,33.125 C30.1944444,33.125 30.2222222,33.125 30.2638889,33.125 C33.3194444,32.9861111 30.7777778,36.5555556 34.6666667,34.4722222 C38.5555556,32.3888889 38.3888889,26.3194444 36.4444444,26.1805556 C34.5138889,26.0416667 32.9166667,27.4166667 30.1666667,27.4305556 L30.1388889,27.4305556 C30.0972222,27.4305556 30.0555556,27.4305556 30.0138889,27.4305556 L30.0138889,33.125 C30.0555556,33.125 30.0972222,33.125 30.1527778,33.125 Z" id="Path" fill="#EDD9B4"></path>
<path d="M30.0111111,37.3611111 C30.0277778,37.3611111 30.0277778,37.3611111 30.0444444,37.3611111 C30.0277778,37.3611111 30.0277778,37.3611111 30.0111111,37.3611111 Z" id="Path" fill="#FDDECC"></path>
<path d="M29.3888889,37.3083333 C29.3388889,37.2916667 29.2722222,37.2916667 29.2222222,37.275 C29.2722222,37.2916667 29.3388889,37.2916667 29.3888889,37.3083333 Z" id="Path" fill="#FDDECC"></path>
<path d="M24.0416667,26.3194444 C22.0972222,26.4583333 21.5138889,32.25 25.4027778,34.3333333 C29.1666667,36.3472222 27.3333333,33.1944444 30,33.125 L30,27.4305556 C27.3055556,27.3888889 25.9583333,26.1805556 24.0416667,26.3194444 Z" id="Path" fill="#DCC5A1"></path>
<path d="M29.5555556,37.3305556 C29.7083333,37.3472222 29.8611111,37.3638889 30,37.3638889 C29.8611111,37.3638889 29.7083333,37.3472222 29.5555556,37.3305556 Z" id="Path" fill="#FDDECC"></path>
<g id="Group" transform="translate(12.777778, 1.805556)">
<path d="M33.4722222,16.7083333 C32.8888889,16.5138889 32.2361111,16.7777778 31.6388889,17.3333333 C32.1944444,9.51388889 30.0277778,0.0555555556 17.2222222,0.0555555556 L17.2222222,24.5694444 C17.25,24.5694444 17.2916667,24.5694444 17.3333333,24.5694444 L17.375,24.5694444 C19.5416667,24.5416667 23.2638889,22.4027778 24.7638889,24.0972222 C27,26.6527778 25.2777778,31.4444444 23.3611111,32.7361111 C26,30.9027778 28.4722222,28.6111111 29.2916667,27.4166667 C29.5972222,26.9722222 30.1805556,25.4305556 30.7083333,23.2777778 C30.8472222,23.4166667 31.0277778,23.5277778 31.2083333,23.5972222 C32.3055556,23.9583333 33.7083333,22.7083333 34.3333333,20.8055556 C34.9583333,18.9027778 34.5694444,17.0694444 33.4722222,16.7083333 Z" id="Path" fill="#EDD9B4"></path>
<path d="M2.77777778,17.0555556 C2.27777778,16.6944444 1.76388889,16.5555556 1.29166667,16.7083333 C0.194444444,17.0694444 -0.194444444,18.9027778 0.430555556,20.8055556 C1.05555556,22.7083333 2.45833333,23.9583333 3.55555556,23.5972222 C3.63888889,23.5694444 3.72222222,23.5277778 3.79166667,23.4861111 C4.30555556,25.5277778 4.86111111,27 5.15277778,27.4166667 C6,28.6666667 8.63888889,31.0833333 11.3888889,32.9444444 C8.75,30.7222222 7.69444444,26.4166667 10.0833333,24.1944444 C11.6805556,22.7083333 15.0555556,24.5 17.2222222,24.5555556 L17.2222222,0.0555555556 C4.56944444,0.0555555556 2.29166667,9.29166667 2.77777778,17.0555556 Z" id="Path" fill="#DCC5A1"></path>
</g>
<path d="M29.5555556,37.3361111 C29.4861111,37.3194444 29.4305556,37.3194444 29.3611111,37.3027778 C29.4305556,37.3194444 29.5,37.3194444 29.5555556,37.3361111 Z" id="Path" fill="#0B0C14"></path>
<path d="M30.1527778,37.3597222 C30.1666667,37.3597222 30.1805556,37.3597222 30.1805556,37.3597222 C30.125,37.3597222 30.0694444,37.3763889 30.0138889,37.3763889 C30.0694444,37.3597222 30.1111111,37.3597222 30.1527778,37.3597222 Z" id="Path" fill="#0B0C14"></path>
<path d="M36.1263889,34.5833333 C36.1430556,34.5833333 36.1430556,34.5666667 36.1597222,34.55 C36.1263889,34.5666667 36.1097222,34.5833333 36.0763889,34.6166667 C36.0930556,34.6166667 36.1097222,34.6 36.1263889,34.5833333 Z" id="Path" fill="#0B0C14"></path>
<path d="M37.5416667,25.9166667 C36.0416667,24.2083333 32.3194444,26.3472222 30.1527778,26.3888889 L30.1111111,26.3888889 C30.0833333,26.3888889 30.0416667,26.3888889 30,26.3888889 C27.8333333,26.3333333 24.4583333,24.5277778 22.8611111,26.0277778 C20.4722222,28.25 21.5277778,32.5555556 24.1666667,34.7777778 C25.9583333,36 27.7916667,36.9861111 29.2222222,37.2777778 C29.2638889,37.2916667 29.3194444,37.3055556 29.3611111,37.3055556 C29.4305556,37.3194444 29.4861111,37.3194444 29.5555556,37.3333333 C29.7083333,37.3472222 29.8611111,37.3611111 30,37.3611111 C30.0138889,37.3611111 30.0138889,37.3611111 30.0277778,37.3611111 C30.0833333,37.3611111 30.1388889,37.3611111 30.1944444,37.3472222 C31.7222222,37.25 33.9166667,36.0138889 36.0694444,34.6111111 C36.0972222,34.5972222 36.1111111,34.5833333 36.1388889,34.5555556 C38.0555556,33.2638889 39.7777778,28.4722222 37.5416667,25.9166667 Z M34.6666667,34.4722222 C30.7777778,36.5555556 33.3194444,32.9861111 30.2638889,33.125 C30.2222222,33.125 30.1944444,33.125 30.1527778,33.125 C30.0972222,33.125 30.0555556,33.125 30,33.125 C27.3333333,33.1944444 29.1666667,36.3472222 25.4027778,34.3333333 C21.5138889,32.25 22.0972222,26.4583333 24.0416667,26.3194444 C25.9583333,26.1805556 27.3055556,27.3888889 30,27.4305556 C30.0416667,27.4305556 30.0833333,27.4305556 30.125,27.4305556 L30.1527778,27.4305556 C32.9166667,27.4166667 34.5,26.0416667 36.4305556,26.1805556 C38.375,26.3194444 38.5416667,32.3888889 34.6666667,34.4722222 Z" id="Shape" fill="#000000" fill-rule="nonzero"></path>
<path d="M30.0277778,9.06944444 C23.5416667,9.09722222 17.4722222,8.80555556 16.2361111,23.0277778 C13.0833333,11.9027778 17.3888889,-0.0277777778 29.7916667,0.0694444444 C42.625,0.180555556 47.2638889,11.9861111 43.7222222,23.0416667 C40.8333333,7.77777778 35.9027778,9.04166667 30.0277778,9.06944444" id="Path" fill="#000000"></path>
<g id="Group" transform="translate(23.055556, 18.750000)">
<path d="M1.48611111,0.0833333333 C2.25,0.0833333333 2.875,0.791666667 2.875,1.65277778 C2.875,2.52777778 2.25,3.22222222 1.48611111,3.22222222 C0.722222222,3.22222222 0.0972222222,2.51388889 0.0972222222,1.65277778 C0.0972222222,0.791666667 0.708333333,0.0833333333 1.48611111,0.0833333333" id="Path" fill="#342214"></path>
<path d="M12.7361111,0.0833333333 C13.5,0.0833333333 14.125,0.791666667 14.125,1.65277778 C14.125,2.52777778 13.5,3.22222222 12.7361111,3.22222222 C11.9722222,3.22222222 11.3472222,2.51388889 11.3472222,1.65277778 C11.3472222,0.791666667 11.9722222,0.0833333333 12.7361111,0.0833333333" id="Path" fill="#342214"></path>
<path d="M4.25,10.0277778 C4.73611111,11.1111111 5.83333333,11.875 7.11111111,11.875 C8.38888889,11.875 9.47222222,11.1111111 9.97222222,10.0277778 L4.25,10.0277778 Z" id="Path" fill="#FFFFFF"></path>
</g>
<path d="M13.7232639,59.8333333 C13.7232639,58.3888889 13.7232639,57.5277778 13.7232639,57.5277778 C13.7065972,57.5555556 13.7065972,58.4027778 13.7232639,59.8333333 C13.7232639,59.8333333 13.7232639,59.8333333 13.7232639,59.8333333 Z" id="Path" fill="#89BCE5"></path>
<path d="M46.2916667,59.8333333 C46.3888889,59.7777778 46.4861111,59.7083333 46.5694444,59.6527778 C46.4027778,58.3333333 46.2916667,57.5277778 46.2916667,57.5277778 C46.2916667,57.5277778 46.3055556,58.3888889 46.2916667,59.8333333 Z" id="Path" fill="#89BCE5"></path>
<path d="M13.6944444,57.5277778 C13.6944444,57.5277778 13.5833333,58.3194444 13.4166667,59.6527778 C13.5833333,58.3472222 13.6944444,57.5555556 13.6944444,57.5277778 Z" id="Path" fill="#89BCE5"></path>
<path d="M13.7083333,59.8333333 C13.7083333,58.4027778 13.7083333,57.5555556 13.7083333,57.5277778 C13.7083333,57.5416667 13.5972222,58.3472222 13.4305556,59.6527778 C13.5138889,59.7083333 13.6111111,59.7777778 13.7083333,59.8333333 Z" id="Path" fill="#89BCE5"></path>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
<!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><title>py12306 购票助手</title><link href=../../static/css/app.dfb5ffed622907edd7c5f81709f2b782.css rel=stylesheet></head><body><script>window.config = {
API_BASE_URL: 'http://localhost:8080/',
}</script><div id=app></div><script type=text/javascript src=../../static/js/manifest.82f431004cf9bb6ad2cb.js></script><script type=text/javascript src=../../static/js/vendor.aebd1de04bf90e88d9c7.js></script><script type=text/javascript src=../../static/js/app.96ef02c9e5601eb5ebcb.js></script></body></html>
\ No newline at end of file
webpackJsonp([1],{"5ZdE":function(t,e){},E5Rs:function(t,e){},GpBP:function(t,e){},NHnr:function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n,s,r,i,o=a("7+uW"),l=a("zL8q"),c=a.n(l),u=(a("tvR6"),a("NYxO")),d=a("bOdI"),f=a.n(d),m={state:{sidebar:!0},mutations:(n={},f()(n,"TOGGLE_SIDEBAR",function(t,e){e=e||!t.sidebar,localStorage.sidebar=e,t.sidebar=e}),f()(n,"ALERT_NOTIFICATION",function(t,e){}),f()(n,"ALERT_MESSAGE",function(t,e){var a=e.text,n=e.type,s=void 0===n?"info":n;Object(l.Message)({message:a,type:s})}),n),actions:(s={},f()(s,"TOGGLE_SIDEBAR",function(t,e){(0,t.commit)("TOGGLE_SIDEBAR",e)}),f()(s,"ALERT_MESSAGE",function(t,e){(0,t.commit)("ALERT_MESSAGE",e)}),s),getters:{}},_={state:{user:{},token:null},mutations:(r={},f()(r,"LOGIN_SUCCESS",function(t,e){this.dispatch("UPDATE_TOKEN",e.access_token)}),f()(r,"UPDATE_TOKEN",function(t,e){localStorage.user_token=e,t.token=e}),f()(r,"LOAD_TOKEN",function(t){var e;(e=localStorage.getItem("user_token"))&&(t.token=e)}),f()(r,"LOGOUT_SUCCESS",function(t){delete localStorage.user_token}),r),actions:(i={},f()(i,"LOGIN_SUCCESS",function(t,e){(0,t.commit)("LOGIN_SUCCESS",e)}),f()(i,"UPDATE_TOKEN",function(t,e){(0,t.commit)("UPDATE_TOKEN",e)}),f()(i,"LOAD_TOKEN",function(t){(0,t.commit)("LOAD_TOKEN")}),f()(i,"LOGOUT_SUCCESS",function(t){(0,t.commit)("LOGOUT_SUCCESS")}),i),getters:{}};o.default.use(u.a);var p=new u.a.Store({modules:{common:m,user:_}}),h=a("/ocq"),v={name:"main-header",data:function(){return{app:{},actions:[]}},created:function(){this.getActions()},methods:{getActions:function(){var t=this;this.$api.get_actions().then(function(e){t.actions=e.data})},handleAction:function(t){"logout"==t.key&&(this.$store.dispatch("LOGOUT_SUCCESS"),this.$store.dispatch("ALERT_MESSAGE",{text:"退出成功",type:"success"}),this.$router.push("/login"))}}},g={render:function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"nav-bar"},[a("el-row",[a("el-col",{attrs:{span:10}},[a("div",{staticClass:"logo-area vertical-center"},[a("h2",{staticClass:"no-margin vertical-center"},[t._v("PY 12306")])])]),t._v(" "),a("el-col",{attrs:{span:14}},[a("div",{staticClass:"actions float-right margin-right-1-rem"},[a("ul",{staticClass:"list-style-none"},t._l(t.actions,function(e){return a("li",{staticClass:"float-left margin-left-3-rem"},[a("a",{staticClass:"color-white vertical-center",attrs:{href:e.link},on:{click:function(a){a.preventDefault(),t.handleAction(e)}}},[e.icon?a("i",{staticClass:"font-size-14 margin-right-s5-rem",class:e.icon}):t._e(),t._v(" "),a("span",{domProps:{textContent:t._s(e.text)}})])])}))])])],1)],1)},staticRenderFns:[]};var b=a("VU/8")(v,g,!1,function(t){a("dXVw")},null,null).exports,C=a("Xxa5"),w=a.n(C),x=a("exGp"),y=a.n(x),k={name:"main-sidebar",data:function(){return{index:"0",loading:null,user:{},menus:[]}},created:function(){var t=this;return y()(w.a.mark(function e(){return w.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return t.handleLoading("on"),e.next=3,t.getUserInfo();case 3:return e.next=5,t.getMenus();case 5:t.handleLoading("off");case 6:case"end":return e.stop()}},e,t)}))()},watch:{$route:function(t,e){var a=this;this.$nextTick(function(t){a.updateMenus()})}},mounted:function(){},methods:{handleLoading:function(){"on"==(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"on")?this.loading=this.$loading({lock:!0,text:"加载中..."}):this.loading.close()},getUserInfo:function(){var t=this;return y()(w.a.mark(function e(){return w.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t.$api.get_user_info().then(function(e){t.user=e.data}).catch(function(e){t.handleLoading("off")});case 2:case"end":return e.stop()}},e,t)}))()},getMenus:function(){var t=this;return y()(w.a.mark(function e(){return w.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t.$api.get_menus().then(function(e){t.updateMenus(e.data)}).catch(function(e){t.handleLoading("off")});case 2:case"end":return e.stop()}},e,t)}))()},updateMenus:function(t){var e=this;(t=t||this.menus).forEach(function(t){0===e.$route.path.indexOf(t.url)&&(e.index=t.id.toString())}),this.menus=t}}},E={render:function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{attrs:{id:"menus"}},[a("div",{staticClass:"user-info margin-tb-3-rem"},[a("div",{staticClass:"text-align-center"},[a("div",{staticClass:"avatar"},[a("img",{staticClass:"border-circle",attrs:{src:t.user.avatar,alt:"",width:"60"}})]),t._v(" "),a("div",{staticClass:"name"},[a("span",{staticClass:"font-size-18",domProps:{textContent:t._s(t.user.name)}})])])]),t._v(" "),a("el-menu",{attrs:{router:"",collapse:!t.$store.state.common.sidebar,"default-active":t.index}},[t._l(t.menus,function(e){return[a("el-menu-item",{attrs:{index:e.id?e.id.toString():"",route:{path:e.url}}},[e.icon?a("i",{class:e.icon}):t._e(),t._v(" "),a("span",{attrs:{slot:"title"},domProps:{textContent:t._s(e.name)},slot:"title"})])]})],2)],1)},staticRenderFns:[]};var S={components:{MainSidebar:a("VU/8")(k,E,!1,function(t){a("Wr15")},null,null).exports,MainHeader:b},mounted:function(){},data:function(){return{}}},A={render:function(){var t=this.$createElement,e=this._self._c||t;return e("el-container",{attrs:{id:"body"}},[e("el-header",[e("main-header")],1),this._v(" "),e("el-container",{attrs:{id:"content"}},[e("el-aside",[e("main-sidebar")],1),this._v(" "),e("el-main",{attrs:{id:"content-body"}},[e("router-view")],1)],1)],1)},staticRenderFns:[]};var L=a("VU/8")(S,A,!1,function(t){a("GpBP")},null,null).exports,T={data:function(){return{dashboard_lists:[{name:"用户",key:"user_job_count",icon:"fa fa-user",icon_color:"#7DD43B"},{name:"任务",key:"query_job_count",icon:"fa fa-infinity",icon_color:"#F5A623"},{name:"查询次数",key:"query_count",icon:"fa fa-search",icon_color:"#4A90E2"}],dashboard:{},real_time_message_colors:["#18D4AD"],real_time_message_data:{columns:["Date","实时消息"],rows:[]},real_time_message_last_time:0,week_message_colors:["#fb7e70"],week_message_data:{columns:["Date","处理消息"],rows:[]},week_message_last_time:0,dataEmpty:!0,refreshTime:2}},mounted:function(){this.refreshData()},methods:{refreshData:function(){var t=this;return y()(w.a.mark(function e(){return w.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if("/"==t.$route.path){e.next=2;break}return e.abrupt("return");case 2:return e.next=4,t.getDashboard();case 4:setTimeout(t.refreshData,1e3*t.refreshTime);case 5:case"end":return e.stop()}},e,t)}))()},getDashboard:function(){var t=this;return y()(w.a.mark(function e(){return w.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t.$api.get_dashboard().then(function(e){t.dashboard=e.data});case 2:case"end":return e.stop()}},e,t)}))()}}},$={render:function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"container",attrs:{id:"home-index"}},[a("el-container",[a("el-row",{staticClass:"width-full"},[a("h2",{staticClass:"action-title"},[t._v("接入状态")]),t._v(" "),a("el-row",{staticClass:"system-state",attrs:{gutter:40}},t._l(t.dashboard_lists,function(e){return a("el-col",{key:e.key,attrs:{lg:6,md:8,sm:12}},[a("div",{staticClass:"card"},[a("div",{staticClass:"left"},[a("div",{staticClass:"name",domProps:{textContent:t._s(e.name)}}),t._v(" "),a("div",{staticClass:"value",domProps:{textContent:t._s(void 0!=t.dashboard[e.key]?t.dashboard[e.key]:"-")}})]),t._v(" "),a("div",{staticClass:"right"},[e.icon?a("span",{class:e.icon,style:e.icon_color?"background: "+e.icon_color:""}):t._e()])]),t._v(" "),a("div",{staticClass:"break-2-rem clear hidden-lg-and-up"})])})),t._v(" "),a("div",{staticClass:"break-2-rem clear hidden-md-and-down"})],1)],1)],1)},staticRenderFns:[]};var D=a("VU/8")(T,$,!1,function(t){a("lIdD")},"data-v-65906f4e",null).exports,O={data:function(){return{info:{},loading_login:!1,rules:{username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}]}}},mounted:function(){},methods:{doLogin:function(){var t=this;this.$refs.form.validate(function(e){e&&(t.loading_login=!0,t.$api.login(t.info).then(function(e){t.loading_login=!1,t.$store.dispatch("LOGIN_SUCCESS",e.data),t.$router.push("/")}).catch(function(e){t.loading_login=!1}))})}}},R={render:function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"height-full vertical-center"},[a("div",{staticClass:"container width-full",attrs:{id:"login"}},[a("el-container",[a("el-row",{staticClass:"width-full",attrs:{type:"flex",justify:"center"}},[a("el-col",{attrs:{lg:10,md:12,sm:16}},[a("div",{staticClass:"card padding-2-rem padding-lr-3-rem text-align-center"},[a("h2",{staticClass:"card-title font-size-28"},[t._v("PY 12036")]),t._v(" "),a("el-form",{ref:"form",attrs:{model:t.info,rules:t.rules},nativeOn:{submit:function(e){return e.preventDefault(),t.doAdd(e)}}},[a("el-form-item",{attrs:{label:"用户名",prop:"username"}},[a("el-input",{model:{value:t.info.username,callback:function(e){t.$set(t.info,"username",e)},expression:"info.username"}})],1),t._v(" "),a("el-form-item",{attrs:{label:"密码",prop:"password"}},[a("el-input",{attrs:{type:"password"},model:{value:t.info.password,callback:function(e){t.$set(t.info,"password",e)},expression:"info.password"}})],1),t._v(" "),a("el-form-item",[a("div",{staticClass:"break-2-rem"}),t._v(" "),a("el-button",{attrs:{type:"primary",loading:t.loading_login,plain:""},on:{click:t.doLogin}},[t._v("登录\n ")])],1)],1)],1)])],1)],1)],1)])},staticRenderFns:[]};var U=a("VU/8")(O,R,!1,function(t){a("E5Rs")},null,null).exports,G={data:function(){return{empty:!1,lists:[],loading_lists:!1,retry_time:5,auto_refresh:!0}},mounted:function(){this.refreshData()},methods:{refreshData:function(){var t=this;return y()(w.a.mark(function e(){return w.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if("/user"==t.$route.path){e.next=2;break}return e.abrupt("return");case 2:if(!t.auto_refresh){e.next=5;break}return e.next=5,t.getLists();case 5:setTimeout(t.refreshData,1e3*t.retry_time);case 6:case"end":return e.stop()}},e,t)}))()},getLists:function(){var t=this;(!(arguments.length>0&&void 0!==arguments[0])||arguments[0])&&(this.loading_lists=!0),this.$api.get_users().then(function(e){!e.data||e.data.length<=0?t.empty=!0:t.empty=!1,t.lists=e.data,t.loading_lists=!1}).catch(function(e){t.loading_lists=!1})}}},N={render:function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"container",attrs:{id:"account-index"}},[a("el-container",[a("el-row",{staticClass:"width-full"},[a("div",{staticClass:"action-group"},[a("h2",{staticClass:"action-title"},[t._v("用户管理")]),t._v(" "),a("div",{staticClass:"refresh-switch"},[a("span",{staticClass:"helper-text margin-right-s5-rem"},[t._v("自动刷新 "),a("span",{domProps:{textContent:t._s(t.retry_time)}}),t._v(" 秒")]),t._v(" "),a("el-switch",{model:{value:t.auto_refresh,callback:function(e){t.auto_refresh=e},expression:"auto_refresh"}})],1)]),t._v(" "),t.empty?a("el-col",{staticClass:"data"},[a("div",{staticClass:"card text-align-center padding-tb-6-rem"},[a("h2",{staticClass:"font-size-24 font-weight-normal color-text-secondary"},[t._v("没有正在运行的用户任务")]),t._v(" "),a("div",{staticClass:"break-3-rem"})])]):a("el-col",{staticClass:"data"},[a("div",{directives:[{name:"loading",rawName:"v-loading",value:t.loading_lists,expression:"loading_lists"}],staticClass:"card padding-tb-1-rem padding-lr-2-rem"},[a("el-table",{staticStyle:{width:"100%"},attrs:{data:t.lists}},[a("el-table-column",{attrs:{prop:"key",label:"KEY"}}),t._v(" "),a("el-table-column",{attrs:{prop:"user_name",label:"账号"}}),t._v(" "),a("el-table-column",{attrs:{prop:"name",label:"姓名"}}),t._v(" "),a("el-table-column",{attrs:{prop:"is_loaded",label:"是否加载成功"},scopedSlots:t._u([{key:"default",fn:function(e){return[e.row.is_loaded?a("el-tag",{attrs:{type:"success"}},[t._v("成功")]):a("el-tag",{attrs:{type:"danger"}},[t._v("失败")])]}}])}),t._v(" "),a("el-table-column",{attrs:{prop:"is_ready",label:"可用状态"},scopedSlots:t._u([{key:"default",fn:function(e){return[e.row.is_ready?a("el-tag",{attrs:{type:"success"}},[t._v("成功")]):a("el-tag",{attrs:{type:"danger"}},[t._v("失败")])]}}])}),t._v(" "),a("el-table-column",{attrs:{prop:"last_heartbeat",label:"最后心跳"},scopedSlots:t._u([{key:"default",fn:function(e){return[a("span",{staticClass:"time",domProps:{textContent:t._s(e.row.last_heartbeat)}})]}}])})],1)],1)])],1)],1)],1)},staticRenderFns:[]};var P=a("VU/8")(G,N,!1,function(t){a("pr7r")},"data-v-118e303f",null).exports,M={data:function(){return{lists:[],loading_lists:!1,line:-1,limit:10,retry_time:1,is_first_time:!0,auto_refresh:!0,able_to_scroll:!0}},mounted:function(){this.refreshData()},methods:{refreshData:function(){var t=this;return y()(w.a.mark(function e(){return w.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if("/log/realtime"==t.$route.path){e.next=2;break}return e.abrupt("return");case 2:if(!t.is_first_time&&!t.auto_refresh){e.next=5;break}return e.next=5,t.getLists(t.is_first_time);case 5:t.is_first_time=!1,setTimeout(t.refreshData,1e3*t.retry_time);case 7:case"end":return e.stop()}},e,t)}))()},getLists:function(){var t=this,e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return y()(w.a.mark(function a(){return w.a.wrap(function(a){for(;;)switch(a.prev=a.next){case 0:return e&&(t.loading_lists=!0),a.next=3,t.$api.get_log_realtime({line:t.line,limit:t.limit}).then(function(e){e.data.data&&e.data.data.length&&(t.lists=t.lists.concat(e.data.data),t.$nextTick(function(){if(t.able_to_scroll){var e=t.$refs.logs;e.scrollTop=e.scrollHeight}}),t.line=e.data.last_line),t.loading_lists=!1}).catch(function(e){t.loading_lists=!1});case 3:case"end":return a.stop()}},a,t)}))()}}},j={render:function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"container",attrs:{id:"log-realtime"}},[a("el-container",[a("el-row",{staticClass:"width-full"},[a("div",{staticClass:"action-group"},[a("h2",{staticClass:"action-title"},[t._v("实时日志")]),t._v(" "),a("div",{staticClass:"refresh-switch"},[a("span",{staticClass:"helper-text margin-right-s5-rem"},[t._v("自动刷新 "),a("span",{domProps:{textContent:t._s(t.retry_time)}}),t._v(" 秒")]),t._v(" "),a("el-switch",{model:{value:t.auto_refresh,callback:function(e){t.auto_refresh=e},expression:"auto_refresh"}})],1)]),t._v(" "),a("el-col",{staticClass:"data height-full"},[a("div",{directives:[{name:"loading",rawName:"v-loading",value:t.loading_lists,expression:"loading_lists"}],staticClass:"card padding-tb-1-rem padding-lr-2-rem height-full log-area",on:{mouseover:function(e){t.able_to_scroll=!1},mouseout:function(e){t.able_to_scroll=!0}}},[a("div",{ref:"logs",staticClass:"logs"},t._l(t.lists,function(e){return a("span",{staticClass:"display-block",domProps:{textContent:t._s(e)}})}))])])],1)],1)],1)},staticRenderFns:[]};var I=a("VU/8")(M,j,!1,function(t){a("aAyn")},"data-v-47d90518",null).exports,q={data:function(){return{empty:!1,lists:[],loading_lists:!1,retry_time:5,auto_refresh:!0}},mounted:function(){this.refreshData()},methods:{refreshData:function(){var t=this;return y()(w.a.mark(function e(){return w.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if("/query"==t.$route.path){e.next=2;break}return e.abrupt("return");case 2:if(!t.auto_refresh){e.next=5;break}return e.next=5,t.getLists();case 5:setTimeout(t.refreshData,1e3*t.retry_time);case 6:case"end":return e.stop()}},e,t)}))()},getLists:function(){var t=this,e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return y()(w.a.mark(function a(){return w.a.wrap(function(a){for(;;)switch(a.prev=a.next){case 0:return e&&(t.loading_lists=!0),a.next=3,t.$api.get_query().then(function(e){!e.data||e.data.length<=0?t.empty=!0:t.empty=!1,t.lists=e.data,t.loading_lists=!1}).catch(function(e){t.loading_lists=!1});case 3:case"end":return a.stop()}},a,t)}))()}}},F={render:function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"container",attrs:{id:"account-index"}},[a("el-container",[a("el-row",{staticClass:"width-full"},[a("div",{staticClass:"action-group"},[a("h2",{staticClass:"action-title"},[t._v("查询任务")]),t._v(" "),a("div",{staticClass:"refresh-switch"},[a("span",{staticClass:"helper-text margin-right-s5-rem"},[t._v("自动刷新 "),a("span",{domProps:{textContent:t._s(t.retry_time)}}),t._v(" 秒")]),t._v(" "),a("el-switch",{model:{value:t.auto_refresh,callback:function(e){t.auto_refresh=e},expression:"auto_refresh"}})],1)]),t._v(" "),t.empty?a("el-col",{staticClass:"data"},[a("div",{staticClass:"card text-align-center padding-tb-6-rem"},[a("h2",{staticClass:"font-size-24 font-weight-normal color-text-secondary"},[t._v("没有正在运行的查询任务")]),t._v(" "),a("div",{staticClass:"break-3-rem"})])]):a("el-col",{staticClass:"data"},[a("div",{directives:[{name:"loading",rawName:"v-loading",value:t.loading_lists,expression:"loading_lists"}],staticClass:"card padding-tb-1-rem padding-lr-2-rem"},[a("el-table",{staticStyle:{width:"100%"},attrs:{data:t.lists}},[a("el-table-column",{attrs:{prop:"name",label:"名称",width:"150"}}),t._v(" "),a("el-table-column",{attrs:{label:"出发日期"},scopedSlots:t._u([{key:"default",fn:function(e){return[t._v("\n "+t._s(e.row.left_dates.join(", "))+"\n ")]}}])}),t._v(" "),a("el-table-column",{attrs:{label:"乘客人数",width:"120"},scopedSlots:t._u([{key:"default",fn:function(e){return[a("el-tag",{attrs:{size:"medium"}},[t._v(t._s(e.row.member_num))])]}}])}),t._v(" "),a("el-table-column",{attrs:{label:"部分提交",width:"120"},scopedSlots:t._u([{key:"default",fn:function(e){return[a("el-switch",{attrs:{disabled:""},model:{value:e.row.allow_less_member,callback:function(a){t.$set(e.row,"allow_less_member",a)},expression:"scope.row.allow_less_member"}})]}}])}),t._v(" "),a("el-table-column",{attrs:{label:"座位"},scopedSlots:t._u([{key:"default",fn:function(e){return[t._v("\n "+t._s(e.row.allow_seats.join(", "))+"\n ")]}}])}),t._v(" "),a("el-table-column",{attrs:{label:"筛选车次"},scopedSlots:t._u([{key:"default",fn:function(e){return[t._v("\n "+t._s(e.row.allow_train_numbers.join(", "))+"\n ")]}}])})],1)],1)])],1)],1)],1)},staticRenderFns:[]};var V=a("VU/8")(q,F,!1,function(t){a("a7/l")},"data-v-4396a4e9",null).exports,H={render:function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"container",attrs:{id:"help-index"}},[a("el-container",[a("el-row",{staticClass:"width-full"},[a("div",{staticClass:"action-group"},[a("h2",{staticClass:"action-title"},[t._v("快捷访问")])]),t._v(" "),a("el-row",{staticClass:"quick-links",attrs:{gutter:40}},t._l(t.function_lists,function(e){return a("el-col",{key:e.key,attrs:{lg:6,md:8,sm:12}},[a("router-link",{attrs:{to:e.url}},[a("div",{staticClass:"card text-align-center color-text-secondary"},[a("div",{staticClass:"break-2-rem"}),t._v(" "),a("div",[a("span",{staticClass:"font-size-30",class:e.icon})]),t._v(" "),a("div",{staticClass:"break-s2-rem"}),t._v(" "),a("div",[a("span",{staticClass:"font-size-18",domProps:{textContent:t._s(e.name)}})])])]),t._v(" "),a("div",{staticClass:"break-2-rem clear hidden-lg-and-up"})],1)})),t._v(" "),a("div",{staticClass:"break-2-rem clear hidden-md-and-down"}),t._v(" "),a("div",{staticClass:"action-group"},[a("h2",{staticClass:"action-title"},[t._v("关于")])]),t._v(" "),a("el-row",{staticClass:"common-problem"},[a("el-col",{attrs:{span:24}},[a("div",{staticClass:"card padding-2-rem",domProps:{innerHTML:t._s(t.about)}})])],1)],1)],1)],1)},staticRenderFns:[]};var z=a("VU/8")({data:function(){return{function_lists:[{name:"帮助文档",url:"/help/readme",icon:"fa fa-book-open"}],about:'写这个程序最初只是为了给自己父母买张回家的票,开源是希望能帮助到更多的人,请勿用于任何商业行为。<br /><br />github: <a href="https://github.com/pjialin/py12306" target="_blank">https://github.com/pjialin/py12306</a>'}},mounted:function(){},methods:{}},H,!1,function(t){a("VjHN")},"data-v-1f9d50cc",null).exports,K=a("HKE2"),B={data:function(){return{loading_readme:!1,info:""}},mounted:function(){this.getReadme()},methods:{getReadme:function(){var t=this;return y()(w.a.mark(function e(){return w.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return t.loading_readme=!0,e.next=3,t.$api.get_readme().then(function(e){var a=new K.Converter;t.info=a.makeHtml(e.data)});case 3:t.loading_readme=!1;case 4:case"end":return e.stop()}},e,t)}))()}}},Y={render:function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"container",attrs:{id:"readme-index"}},[e("el-container",[e("el-row",{staticClass:"width-full"},[e("div",{staticClass:"action-group"},[e("h2",{staticClass:"action-title"},[this._v("帮助文档")])]),this._v(" "),e("el-row",{directives:[{name:"loading",rawName:"v-loading",value:this.loading_readme,expression:"loading_readme"}]},[e("el-col",{attrs:{span:24}},[e("div",{staticClass:"card padding-2-rem"},[e("article",{staticClass:"markdown-body",domProps:{innerHTML:this._s(this.info)}})])])],1)],1)],1)],1)},staticRenderFns:[]};var W=a("VU/8")(B,Y,!1,function(t){a("5ZdE"),a("n//Q")},"data-v-32a9e4aa",null).exports;o.default.use(h.a);var X=[{path:"/",component:L,meta:{auth:!0},children:[{path:"",component:D},{path:"user",component:P},{path:"log/realtime",component:I},{path:"query",component:V},{path:"help",component:z},{path:"help/readme",component:W}]},{path:"/login",component:U}];p.dispatch("LOAD_TOKEN");var Q=new h.a({routes:X});Q.beforeEach(function(t,e,a){t.matched.some(function(t){return t.meta.auth})?p.state.user.token?a():a({path:"/login",query:{redirect:t.fullPath}}):a()});var Z=Q,J=a("Dd8w"),tt=a.n(J),et=a("pFYg"),at=a.n(et),nt=a("mvHQ"),st=a.n(nt),rt={shallow_copy:function(t){return JSON.parse(st()(t))},shallow_copy_object:function(t){var e={};for(var a in t)"object"==at()(t[a])?e[a]=this.shallow_copy_object(tt()({},t[a])):e[a]=t[a];return e},compare_object:function(t,e){return st()(t)===st()(e)},install:function(t){t.prototype.$util=this}},it=a("woOf"),ot=a.n(it),lt=a("//Fk"),ct=a.n(lt),ut=a("mtWM"),dt=a.n(ut),ft=function(t){mt[t.response.status]&&mt[t.response.status](t)},mt={422:function(t){var e=t.response.data.msg;p.dispatch("ALERT_MESSAGE",{text:e,type:"error"})},400:function(t){var e=t.response.data.msg;p.dispatch("ALERT_MESSAGE",{text:e,type:"error"})},401:function(t){p.dispatch("ALERT_MESSAGE",{text:"登录已过期,请重新登录",type:"warning"}),Z.push("/login")},405:function(t){},500:function(t){}},_t={baseURL:window.config.API_BASE_URL},pt=dt.a.create(_t);pt.interceptors.request.use(function(t){return 0!=t.auth&&p.state.user.token&&(t.headers.Authorization="Bearer "+p.state.user.token),t},function(t){return ct.a.reject(t)}),pt.interceptors.response.use(function(t){return t},function(t){return ft(t),ct.a.reject(t)});var ht=pt,vt=ot()({install:function(t){t.prototype.$request=this}},ht),gt=(window.config,{get_user_info:function(){return vt.get("user/info")},get_menus:function(){return vt.get("app/menus")},get_actions:function(){return vt.get("app/actions")},login:function(t){return vt.post("login",t)},get_users:function(){return vt.get("users")},get_log_realtime:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return vt.get("log/output",{params:t})},get_query:function(){return vt.get("query")},get_dashboard:function(){return vt.get("stat/dashboard")},get_readme:function(){return vt.get("https://raw.githubusercontent.com/pjialin/py12306/master/README.md",{auth:!1,responseType:"text"})}}),bt=ot()(gt,{install:function(t){t.prototype.$api=this}}),Ct={render:function(){var t=this.$createElement,e=this._self._c||t;return e("div",{attrs:{id:"app"}},[e("router-view")],1)},staticRenderFns:[]};var wt=a("VU/8")({name:"App"},Ct,!1,function(t){a("xcaL")},null,null).exports,xt=a("vXZn"),yt=a.n(xt),kt=a("p/TY"),Et=a.n(kt);o.default.use(c.a),o.default.use(rt),o.default.use(bt),o.default.component(yt.a.name,yt.a),o.default.component(Et.a.name,Et.a),o.default.config.productionTip=!1,new o.default({el:"#app",router:Z,store:p,components:{App:wt},template:"<App/>"})},VjHN:function(t,e){},Wr15:function(t,e){},"a7/l":function(t,e){},aAyn:function(t,e){},dXVw:function(t,e){},lIdD:function(t,e){},"n//Q":function(t,e){},pr7r:function(t,e){},tvR6:function(t,e){},xcaL:function(t,e){}},["NHnr"]);
\ No newline at end of file
webpackJsonp([1],{"5ZdE":function(t,e){},E5Rs:function(t,e){},GpBP:function(t,e){},NHnr:function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n,s,r,i,o=a("7+uW"),l=a("zL8q"),c=a.n(l),u=(a("tvR6"),a("NYxO")),d=a("bOdI"),f=a.n(d),m={state:{sidebar:!0},mutations:(n={},f()(n,"TOGGLE_SIDEBAR",function(t,e){e=e||!t.sidebar,localStorage.sidebar=e,t.sidebar=e}),f()(n,"ALERT_NOTIFICATION",function(t,e){}),f()(n,"ALERT_MESSAGE",function(t,e){var a=e.text,n=e.type,s=void 0===n?"info":n;Object(l.Message)({message:a,type:s})}),n),actions:(s={},f()(s,"TOGGLE_SIDEBAR",function(t,e){(0,t.commit)("TOGGLE_SIDEBAR",e)}),f()(s,"ALERT_MESSAGE",function(t,e){(0,t.commit)("ALERT_MESSAGE",e)}),s),getters:{}},_={state:{user:{},token:null},mutations:(r={},f()(r,"LOGIN_SUCCESS",function(t,e){this.dispatch("UPDATE_TOKEN",e.access_token)}),f()(r,"UPDATE_TOKEN",function(t,e){localStorage.user_token=e,t.token=e}),f()(r,"LOAD_TOKEN",function(t){var e;(e=localStorage.getItem("user_token"))&&(t.token=e)}),f()(r,"LOGOUT_SUCCESS",function(t){delete localStorage.user_token}),r),actions:(i={},f()(i,"LOGIN_SUCCESS",function(t,e){(0,t.commit)("LOGIN_SUCCESS",e)}),f()(i,"UPDATE_TOKEN",function(t,e){(0,t.commit)("UPDATE_TOKEN",e)}),f()(i,"LOAD_TOKEN",function(t){(0,t.commit)("LOAD_TOKEN")}),f()(i,"LOGOUT_SUCCESS",function(t){(0,t.commit)("LOGOUT_SUCCESS")}),i),getters:{}};o.default.use(u.a);var p=new u.a.Store({modules:{common:m,user:_}}),h=a("/ocq"),v={name:"main-header",data:function(){return{app:{},actions:[]}},created:function(){this.getActions()},methods:{getActions:function(){var t=this;this.$api.get_actions().then(function(e){t.actions=e.data})},handleAction:function(t){"logout"==t.key&&(this.$store.dispatch("LOGOUT_SUCCESS"),this.$store.dispatch("ALERT_MESSAGE",{text:"退出成功",type:"success"}),this.$router.push("/login"))}}},g={render:function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"nav-bar"},[a("el-row",[a("el-col",{attrs:{span:10}},[a("div",{staticClass:"logo-area vertical-center"},[a("h2",{staticClass:"no-margin vertical-center"},[t._v("PY 12306")])])]),t._v(" "),a("el-col",{attrs:{span:14}},[a("div",{staticClass:"actions float-right margin-right-1-rem"},[a("ul",{staticClass:"list-style-none"},t._l(t.actions,function(e){return a("li",{staticClass:"float-left margin-left-3-rem"},[a("a",{staticClass:"color-white vertical-center",attrs:{href:e.link},on:{click:function(a){a.preventDefault(),t.handleAction(e)}}},[e.icon?a("i",{staticClass:"font-size-14 margin-right-s5-rem",class:e.icon}):t._e(),t._v(" "),a("span",{domProps:{textContent:t._s(e.text)}})])])}))])])],1)],1)},staticRenderFns:[]};var b=a("VU/8")(v,g,!1,function(t){a("dXVw")},null,null).exports,C=a("Xxa5"),w=a.n(C),x=a("exGp"),y=a.n(x),k={name:"main-sidebar",data:function(){return{index:"0",loading:null,user:{},menus:[]}},created:function(){var t=this;return y()(w.a.mark(function e(){return w.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return t.handleLoading("on"),e.next=3,t.getUserInfo();case 3:return e.next=5,t.getMenus();case 5:t.handleLoading("off");case 6:case"end":return e.stop()}},e,t)}))()},watch:{$route:function(t,e){var a=this;this.$nextTick(function(t){a.updateMenus()})}},mounted:function(){},methods:{handleLoading:function(){"on"==(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"on")?this.loading=this.$loading({lock:!0,text:"加载中..."}):this.loading.close()},getUserInfo:function(){var t=this;return y()(w.a.mark(function e(){return w.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t.$api.get_user_info().then(function(e){t.user=e.data}).catch(function(e){t.handleLoading("off")});case 2:case"end":return e.stop()}},e,t)}))()},getMenus:function(){var t=this;return y()(w.a.mark(function e(){return w.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t.$api.get_menus().then(function(e){t.updateMenus(e.data)}).catch(function(e){t.handleLoading("off")});case 2:case"end":return e.stop()}},e,t)}))()},updateMenus:function(t){var e=this;(t=t||this.menus).forEach(function(t){0===e.$route.path.indexOf(t.url)&&(e.index=t.id.toString())}),this.menus=t}}},E={render:function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{attrs:{id:"menus"}},[a("div",{staticClass:"user-info margin-tb-3-rem"},[a("div",{staticClass:"text-align-center"},[a("div",{staticClass:"avatar"},[a("img",{staticClass:"border-circle",attrs:{src:t.user.avatar||"../../static/img/avatar_default.svg",alt:"",width:"60"}})]),t._v(" "),a("div",{staticClass:"name"},[a("span",{staticClass:"font-size-18",domProps:{textContent:t._s(t.user.name)}})])])]),t._v(" "),a("el-menu",{attrs:{router:"",collapse:!t.$store.state.common.sidebar,"default-active":t.index}},[t._l(t.menus,function(e){return[a("el-menu-item",{attrs:{index:e.id?e.id.toString():"",route:{path:e.url}}},[e.icon?a("i",{class:e.icon}):t._e(),t._v(" "),a("span",{attrs:{slot:"title"},domProps:{textContent:t._s(e.name)},slot:"title"})])]})],2)],1)},staticRenderFns:[]};var S={components:{MainSidebar:a("VU/8")(k,E,!1,function(t){a("YlHp")},null,null).exports,MainHeader:b},mounted:function(){},data:function(){return{}}},A={render:function(){var t=this.$createElement,e=this._self._c||t;return e("el-container",{attrs:{id:"body"}},[e("el-header",[e("main-header")],1),this._v(" "),e("el-container",{attrs:{id:"content"}},[e("el-aside",[e("main-sidebar")],1),this._v(" "),e("el-main",{attrs:{id:"content-body"}},[e("router-view")],1)],1)],1)},staticRenderFns:[]};var L=a("VU/8")(S,A,!1,function(t){a("GpBP")},null,null).exports,$={data:function(){return{dashboard_lists:[{name:"用户",key:"user_job_count",icon:"fa fa-user",icon_color:"#7DD43B"},{name:"任务",key:"query_job_count",icon:"fa fa-infinity",icon_color:"#F5A623"},{name:"查询次数",key:"query_count",icon:"fa fa-search",icon_color:"#4A90E2"}],dashboard:{},real_time_message_colors:["#18D4AD"],real_time_message_data:{columns:["Date","实时消息"],rows:[]},real_time_message_last_time:0,week_message_colors:["#fb7e70"],week_message_data:{columns:["Date","处理消息"],rows:[]},week_message_last_time:0,dataEmpty:!0,refreshTime:2}},mounted:function(){this.refreshData()},methods:{refreshData:function(){var t=this;return y()(w.a.mark(function e(){return w.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if("/"==t.$route.path){e.next=2;break}return e.abrupt("return");case 2:return e.next=4,t.getDashboard();case 4:setTimeout(t.refreshData,1e3*t.refreshTime);case 5:case"end":return e.stop()}},e,t)}))()},getDashboard:function(){var t=this;return y()(w.a.mark(function e(){return w.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t.$api.get_dashboard().then(function(e){t.dashboard=e.data});case 2:case"end":return e.stop()}},e,t)}))()}}},T={render:function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"container",attrs:{id:"home-index"}},[a("el-container",[a("el-row",{staticClass:"width-full"},[a("h2",{staticClass:"action-title"},[t._v("接入状态")]),t._v(" "),a("el-row",{staticClass:"system-state",attrs:{gutter:40}},t._l(t.dashboard_lists,function(e){return a("el-col",{key:e.key,attrs:{lg:6,md:8,sm:12}},[a("div",{staticClass:"card"},[a("div",{staticClass:"left"},[a("div",{staticClass:"name",domProps:{textContent:t._s(e.name)}}),t._v(" "),a("div",{staticClass:"value",domProps:{textContent:t._s(void 0!=t.dashboard[e.key]?t.dashboard[e.key]:"-")}})]),t._v(" "),a("div",{staticClass:"right"},[e.icon?a("span",{class:e.icon,style:e.icon_color?"background: "+e.icon_color:""}):t._e()])]),t._v(" "),a("div",{staticClass:"break-2-rem clear hidden-lg-and-up"})])})),t._v(" "),a("div",{staticClass:"break-2-rem clear hidden-md-and-down"})],1)],1)],1)},staticRenderFns:[]};var D=a("VU/8")($,T,!1,function(t){a("lIdD")},"data-v-65906f4e",null).exports,O={data:function(){return{info:{},loading_login:!1,rules:{username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}]}}},mounted:function(){},methods:{doLogin:function(){var t=this;this.$refs.form.validate(function(e){e&&(t.loading_login=!0,t.$api.login(t.info).then(function(e){t.loading_login=!1,t.$store.dispatch("LOGIN_SUCCESS",e.data),t.$router.push("/")}).catch(function(e){t.loading_login=!1}))})}}},R={render:function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"height-full vertical-center"},[a("div",{staticClass:"container width-full",attrs:{id:"login"}},[a("el-container",[a("el-row",{staticClass:"width-full",attrs:{type:"flex",justify:"center"}},[a("el-col",{attrs:{lg:10,md:12,sm:16}},[a("div",{staticClass:"card padding-2-rem padding-lr-3-rem text-align-center"},[a("h2",{staticClass:"card-title font-size-28"},[t._v("PY 12036")]),t._v(" "),a("el-form",{ref:"form",attrs:{model:t.info,rules:t.rules},nativeOn:{submit:function(e){return e.preventDefault(),t.doAdd(e)}}},[a("el-form-item",{attrs:{label:"用户名",prop:"username"}},[a("el-input",{model:{value:t.info.username,callback:function(e){t.$set(t.info,"username",e)},expression:"info.username"}})],1),t._v(" "),a("el-form-item",{attrs:{label:"密码",prop:"password"}},[a("el-input",{attrs:{type:"password"},model:{value:t.info.password,callback:function(e){t.$set(t.info,"password",e)},expression:"info.password"}})],1),t._v(" "),a("el-form-item",[a("div",{staticClass:"break-2-rem"}),t._v(" "),a("el-button",{attrs:{type:"primary",loading:t.loading_login,plain:""},on:{click:t.doLogin}},[t._v("登录\n ")])],1)],1)],1)])],1)],1)],1)])},staticRenderFns:[]};var U=a("VU/8")(O,R,!1,function(t){a("E5Rs")},null,null).exports,G={data:function(){return{empty:!1,lists:[],loading_lists:!1,retry_time:5,auto_refresh:!0}},mounted:function(){this.refreshData()},methods:{refreshData:function(){var t=this;return y()(w.a.mark(function e(){return w.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if("/user"==t.$route.path){e.next=2;break}return e.abrupt("return");case 2:if(!t.auto_refresh){e.next=5;break}return e.next=5,t.getLists();case 5:setTimeout(t.refreshData,1e3*t.retry_time);case 6:case"end":return e.stop()}},e,t)}))()},getLists:function(){var t=this;(!(arguments.length>0&&void 0!==arguments[0])||arguments[0])&&(this.loading_lists=!0),this.$api.get_users().then(function(e){!e.data||e.data.length<=0?t.empty=!0:t.empty=!1,t.lists=e.data,t.loading_lists=!1}).catch(function(e){t.loading_lists=!1})}}},N={render:function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"container",attrs:{id:"account-index"}},[a("el-container",[a("el-row",{staticClass:"width-full"},[a("div",{staticClass:"action-group"},[a("h2",{staticClass:"action-title"},[t._v("用户管理")]),t._v(" "),a("div",{staticClass:"refresh-switch"},[a("span",{staticClass:"helper-text margin-right-s5-rem"},[t._v("自动刷新 "),a("span",{domProps:{textContent:t._s(t.retry_time)}}),t._v(" 秒")]),t._v(" "),a("el-switch",{model:{value:t.auto_refresh,callback:function(e){t.auto_refresh=e},expression:"auto_refresh"}})],1)]),t._v(" "),t.empty?a("el-col",{staticClass:"data"},[a("div",{staticClass:"card text-align-center padding-tb-6-rem"},[a("h2",{staticClass:"font-size-24 font-weight-normal color-text-secondary"},[t._v("没有正在运行的用户任务")]),t._v(" "),a("div",{staticClass:"break-3-rem"})])]):a("el-col",{staticClass:"data"},[a("div",{directives:[{name:"loading",rawName:"v-loading",value:t.loading_lists,expression:"loading_lists"}],staticClass:"card padding-tb-1-rem padding-lr-2-rem"},[a("el-table",{staticStyle:{width:"100%"},attrs:{data:t.lists}},[a("el-table-column",{attrs:{prop:"key",label:"KEY"}}),t._v(" "),a("el-table-column",{attrs:{prop:"user_name",label:"账号"}}),t._v(" "),a("el-table-column",{attrs:{prop:"name",label:"姓名"}}),t._v(" "),a("el-table-column",{attrs:{prop:"is_loaded",label:"是否加载成功"},scopedSlots:t._u([{key:"default",fn:function(e){return[e.row.is_loaded?a("el-tag",{attrs:{type:"success"}},[t._v("成功")]):a("el-tag",{attrs:{type:"danger"}},[t._v("失败")])]}}])}),t._v(" "),a("el-table-column",{attrs:{prop:"is_ready",label:"可用状态"},scopedSlots:t._u([{key:"default",fn:function(e){return[e.row.is_ready?a("el-tag",{attrs:{type:"success"}},[t._v("成功")]):a("el-tag",{attrs:{type:"danger"}},[t._v("失败")])]}}])}),t._v(" "),a("el-table-column",{attrs:{prop:"last_heartbeat",label:"最后心跳"},scopedSlots:t._u([{key:"default",fn:function(e){return[a("span",{staticClass:"time",domProps:{textContent:t._s(e.row.last_heartbeat)}})]}}])})],1)],1)])],1)],1)],1)},staticRenderFns:[]};var P=a("VU/8")(G,N,!1,function(t){a("pr7r")},"data-v-118e303f",null).exports,M={data:function(){return{lists:[],loading_lists:!1,line:-1,limit:10,retry_time:1,is_first_time:!0,auto_refresh:!0,able_to_scroll:!0}},mounted:function(){this.refreshData()},methods:{refreshData:function(){var t=this;return y()(w.a.mark(function e(){return w.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if("/log/realtime"==t.$route.path){e.next=2;break}return e.abrupt("return");case 2:if(!t.is_first_time&&!t.auto_refresh){e.next=5;break}return e.next=5,t.getLists(t.is_first_time);case 5:t.is_first_time=!1,setTimeout(t.refreshData,1e3*t.retry_time);case 7:case"end":return e.stop()}},e,t)}))()},getLists:function(){var t=this,e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return y()(w.a.mark(function a(){return w.a.wrap(function(a){for(;;)switch(a.prev=a.next){case 0:return e&&(t.loading_lists=!0),a.next=3,t.$api.get_log_realtime({line:t.line,limit:t.limit}).then(function(e){e.data.data&&e.data.data.length&&(t.lists=t.lists.concat(e.data.data),t.$nextTick(function(){if(t.able_to_scroll){var e=t.$refs.logs;e.scrollTop=e.scrollHeight}}),t.line=e.data.last_line),t.loading_lists=!1}).catch(function(e){t.loading_lists=!1});case 3:case"end":return a.stop()}},a,t)}))()}}},j={render:function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"container",attrs:{id:"log-realtime"}},[a("el-container",[a("el-row",{staticClass:"width-full"},[a("div",{staticClass:"action-group"},[a("h2",{staticClass:"action-title"},[t._v("实时日志")]),t._v(" "),a("div",{staticClass:"refresh-switch"},[a("span",{staticClass:"helper-text margin-right-s5-rem"},[t._v("自动刷新 "),a("span",{domProps:{textContent:t._s(t.retry_time)}}),t._v(" 秒")]),t._v(" "),a("el-switch",{model:{value:t.auto_refresh,callback:function(e){t.auto_refresh=e},expression:"auto_refresh"}})],1)]),t._v(" "),a("el-col",{staticClass:"data height-full"},[a("div",{directives:[{name:"loading",rawName:"v-loading",value:t.loading_lists,expression:"loading_lists"}],staticClass:"card padding-tb-1-rem padding-lr-2-rem height-full log-area",on:{mouseover:function(e){t.able_to_scroll=!1},mouseout:function(e){t.able_to_scroll=!0}}},[a("div",{ref:"logs",staticClass:"logs"},t._l(t.lists,function(e){return a("span",{staticClass:"display-block",domProps:{textContent:t._s(e)}})}))])])],1)],1)],1)},staticRenderFns:[]};var I=a("VU/8")(M,j,!1,function(t){a("aAyn")},"data-v-47d90518",null).exports,q={data:function(){return{empty:!1,lists:[],loading_lists:!1,retry_time:5,auto_refresh:!0}},mounted:function(){this.refreshData()},methods:{refreshData:function(){var t=this;return y()(w.a.mark(function e(){return w.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if("/query"==t.$route.path){e.next=2;break}return e.abrupt("return");case 2:if(!t.auto_refresh){e.next=5;break}return e.next=5,t.getLists();case 5:setTimeout(t.refreshData,1e3*t.retry_time);case 6:case"end":return e.stop()}},e,t)}))()},getLists:function(){var t=this,e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return y()(w.a.mark(function a(){return w.a.wrap(function(a){for(;;)switch(a.prev=a.next){case 0:return e&&(t.loading_lists=!0),a.next=3,t.$api.get_query().then(function(e){!e.data||e.data.length<=0?t.empty=!0:t.empty=!1,t.lists=e.data,t.loading_lists=!1}).catch(function(e){t.loading_lists=!1});case 3:case"end":return a.stop()}},a,t)}))()}}},F={render:function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"container",attrs:{id:"account-index"}},[a("el-container",[a("el-row",{staticClass:"width-full"},[a("div",{staticClass:"action-group"},[a("h2",{staticClass:"action-title"},[t._v("查询任务")]),t._v(" "),a("div",{staticClass:"refresh-switch"},[a("span",{staticClass:"helper-text margin-right-s5-rem"},[t._v("自动刷新 "),a("span",{domProps:{textContent:t._s(t.retry_time)}}),t._v(" 秒")]),t._v(" "),a("el-switch",{model:{value:t.auto_refresh,callback:function(e){t.auto_refresh=e},expression:"auto_refresh"}})],1)]),t._v(" "),t.empty?a("el-col",{staticClass:"data"},[a("div",{staticClass:"card text-align-center padding-tb-6-rem"},[a("h2",{staticClass:"font-size-24 font-weight-normal color-text-secondary"},[t._v("没有正在运行的查询任务")]),t._v(" "),a("div",{staticClass:"break-3-rem"})])]):a("el-col",{staticClass:"data"},[a("div",{directives:[{name:"loading",rawName:"v-loading",value:t.loading_lists,expression:"loading_lists"}],staticClass:"card padding-tb-1-rem padding-lr-2-rem"},[a("el-table",{staticStyle:{width:"100%"},attrs:{data:t.lists}},[a("el-table-column",{attrs:{prop:"name",label:"名称",width:"150"}}),t._v(" "),a("el-table-column",{attrs:{label:"出发日期"},scopedSlots:t._u([{key:"default",fn:function(e){return[t._v("\n "+t._s(e.row.left_dates.join(", "))+"\n ")]}}])}),t._v(" "),a("el-table-column",{attrs:{label:"乘客人数",width:"120"},scopedSlots:t._u([{key:"default",fn:function(e){return[a("el-tag",{attrs:{size:"medium"}},[t._v(t._s(e.row.member_num))])]}}])}),t._v(" "),a("el-table-column",{attrs:{label:"部分提交",width:"120"},scopedSlots:t._u([{key:"default",fn:function(e){return[a("el-switch",{attrs:{disabled:""},model:{value:e.row.allow_less_member,callback:function(a){t.$set(e.row,"allow_less_member",a)},expression:"scope.row.allow_less_member"}})]}}])}),t._v(" "),a("el-table-column",{attrs:{label:"座位"},scopedSlots:t._u([{key:"default",fn:function(e){return[t._v("\n "+t._s(e.row.allow_seats.join(", "))+"\n ")]}}])}),t._v(" "),a("el-table-column",{attrs:{label:"筛选车次"},scopedSlots:t._u([{key:"default",fn:function(e){return[t._v("\n "+t._s(e.row.allow_train_numbers.join(", "))+"\n ")]}}])})],1)],1)])],1)],1)],1)},staticRenderFns:[]};var V=a("VU/8")(q,F,!1,function(t){a("a7/l")},"data-v-4396a4e9",null).exports,H={render:function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"container",attrs:{id:"help-index"}},[a("el-container",[a("el-row",{staticClass:"width-full"},[a("div",{staticClass:"action-group"},[a("h2",{staticClass:"action-title"},[t._v("快捷访问")])]),t._v(" "),a("el-row",{staticClass:"quick-links",attrs:{gutter:40}},t._l(t.function_lists,function(e){return a("el-col",{key:e.key,attrs:{lg:6,md:8,sm:12}},[a("router-link",{attrs:{to:e.url}},[a("div",{staticClass:"card text-align-center color-text-secondary"},[a("div",{staticClass:"break-2-rem"}),t._v(" "),a("div",[a("span",{staticClass:"font-size-30",class:e.icon})]),t._v(" "),a("div",{staticClass:"break-s2-rem"}),t._v(" "),a("div",[a("span",{staticClass:"font-size-18",domProps:{textContent:t._s(e.name)}})])])]),t._v(" "),a("div",{staticClass:"break-2-rem clear hidden-lg-and-up"})],1)})),t._v(" "),a("div",{staticClass:"break-2-rem clear hidden-md-and-down"}),t._v(" "),a("div",{staticClass:"action-group"},[a("h2",{staticClass:"action-title"},[t._v("关于")])]),t._v(" "),a("el-row",{staticClass:"common-problem"},[a("el-col",{attrs:{span:24}},[a("div",{staticClass:"card padding-2-rem",domProps:{innerHTML:t._s(t.about)}})])],1)],1)],1)],1)},staticRenderFns:[]};var z=a("VU/8")({data:function(){return{function_lists:[{name:"帮助文档",url:"/help/readme",icon:"fa fa-book-open"}],about:'写这个程序最初只是为了给自己父母买张回家的票,开源是希望能帮助到更多的人,请勿用于任何商业行为。<br /><br />github: <a href="https://github.com/pjialin/py12306" target="_blank">https://github.com/pjialin/py12306</a>'}},mounted:function(){},methods:{}},H,!1,function(t){a("VjHN")},"data-v-1f9d50cc",null).exports,K=a("HKE2"),B={data:function(){return{loading_readme:!1,info:""}},mounted:function(){this.getReadme()},methods:{getReadme:function(){var t=this;return y()(w.a.mark(function e(){return w.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return t.loading_readme=!0,e.next=3,t.$api.get_readme().then(function(e){var a=new K.Converter;t.info=a.makeHtml(e.data)});case 3:t.loading_readme=!1;case 4:case"end":return e.stop()}},e,t)}))()}}},Y={render:function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"container",attrs:{id:"readme-index"}},[e("el-container",[e("el-row",{staticClass:"width-full"},[e("div",{staticClass:"action-group"},[e("h2",{staticClass:"action-title"},[this._v("帮助文档")])]),this._v(" "),e("el-row",{directives:[{name:"loading",rawName:"v-loading",value:this.loading_readme,expression:"loading_readme"}]},[e("el-col",{attrs:{span:24}},[e("div",{staticClass:"card padding-2-rem"},[e("article",{staticClass:"markdown-body",domProps:{innerHTML:this._s(this.info)}})])])],1)],1)],1)],1)},staticRenderFns:[]};var Q=a("VU/8")(B,Y,!1,function(t){a("5ZdE"),a("n//Q")},"data-v-32a9e4aa",null).exports;o.default.use(h.a);var X=[{path:"/",component:L,meta:{auth:!0},children:[{path:"",component:D},{path:"user",component:P},{path:"log/realtime",component:I},{path:"query",component:V},{path:"help",component:z},{path:"help/readme",component:Q}]},{path:"/login",component:U}];p.dispatch("LOAD_TOKEN");var J=new h.a({routes:X});J.beforeEach(function(t,e,a){t.matched.some(function(t){return t.meta.auth})?p.state.user.token?a():a({path:"/login",query:{redirect:t.fullPath}}):a()});var W=J,Z=a("Dd8w"),tt=a.n(Z),et=a("pFYg"),at=a.n(et),nt=a("mvHQ"),st=a.n(nt),rt={shallow_copy:function(t){return JSON.parse(st()(t))},shallow_copy_object:function(t){var e={};for(var a in t)"object"==at()(t[a])?e[a]=this.shallow_copy_object(tt()({},t[a])):e[a]=t[a];return e},compare_object:function(t,e){return st()(t)===st()(e)},install:function(t){t.prototype.$util=this}},it=a("woOf"),ot=a.n(it),lt=a("//Fk"),ct=a.n(lt),ut=a("mtWM"),dt=a.n(ut),ft=function(t){mt[t.response.status]&&mt[t.response.status](t)},mt={422:function(t){var e=t.response.data.msg;p.dispatch("ALERT_MESSAGE",{text:e,type:"error"})},400:function(t){var e=t.response.data.msg;p.dispatch("ALERT_MESSAGE",{text:e,type:"error"})},401:function(t){p.dispatch("ALERT_MESSAGE",{text:"登录已过期,请重新登录",type:"warning"}),W.push("/login")},405:function(t){},500:function(t){}},_t={baseURL:window.config.API_BASE_URL},pt=dt.a.create(_t);pt.interceptors.request.use(function(t){return 0!=t.auth&&p.state.user.token&&(t.headers.Authorization="Bearer "+p.state.user.token),t},function(t){return ct.a.reject(t)}),pt.interceptors.response.use(function(t){return t},function(t){return ft(t),ct.a.reject(t)});var ht=pt,vt=ot()({install:function(t){t.prototype.$request=this}},ht),gt=(window.config,{get_user_info:function(){return vt.get("user/info")},get_menus:function(){return vt.get("app/menus")},get_actions:function(){return vt.get("app/actions")},login:function(t){return vt.post("login",t)},get_users:function(){return vt.get("users")},get_log_realtime:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return vt.get("log/output",{params:t})},get_query:function(){return vt.get("query")},get_dashboard:function(){return vt.get("stat/dashboard")},get_readme:function(){return vt.get("https://raw.githubusercontent.com/pjialin/py12306/master/README.md",{auth:!1,responseType:"text"})}}),bt=ot()(gt,{install:function(t){t.prototype.$api=this}}),Ct={render:function(){var t=this.$createElement,e=this._self._c||t;return e("div",{attrs:{id:"app"}},[e("router-view")],1)},staticRenderFns:[]};var wt=a("VU/8")({name:"App"},Ct,!1,function(t){a("xcaL")},null,null).exports;o.default.use(c.a),o.default.use(rt),o.default.use(bt),o.default.config.productionTip=!1,new o.default({el:"#app",router:W,store:p,components:{App:wt},template:"<App/>"})},VjHN:function(t,e){},YlHp:function(t,e){},"a7/l":function(t,e){},aAyn:function(t,e){},dXVw:function(t,e){},lIdD:function(t,e){},"n//Q":function(t,e){},pr7r:function(t,e){},tvR6:function(t,e){},xcaL:function(t,e){}},["NHnr"]);
\ No newline at end of file
!function(r){var n=window.webpackJsonp;window.webpackJsonp=function(e,u,c){for(var f,i,p,a=0,l=[];a<e.length;a++)i=e[a],o[i]&&l.push(o[i][0]),o[i]=0;for(f in u)Object.prototype.hasOwnProperty.call(u,f)&&(r[f]=u[f]);for(n&&n(e,u,c);l.length;)l.shift()();if(c)for(a=0;a<c.length;a++)p=t(t.s=c[a]);return p};var e={},o={2:0};function t(n){if(e[n])return e[n].exports;var o=e[n]={i:n,l:!1,exports:{}};return r[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=r,t.c=e,t.d=function(r,n,e){t.o(r,n)||Object.defineProperty(r,n,{configurable:!1,enumerable:!0,get:e})},t.n=function(r){var n=r&&r.__esModule?function(){return r.default}:function(){return r};return t.d(n,"a",n),n},t.o=function(r,n){return Object.prototype.hasOwnProperty.call(r,n)},t.p="../../",t.oe=function(r){throw console.error(r),r}}([]);
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
<!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><title>py12306 购票助手</title><link href=../../static/css/app.dfb5ffed622907edd7c5f81709f2b782.css rel=stylesheet></head><body><script>window.config = {
API_BASE_URL: 'http://localhost:8080/',
}</script><div id=app></div><script type=text/javascript src=../../static/js/manifest.82f431004cf9bb6ad2cb.js></script><script type=text/javascript src=../../static/js/vendor.532ecf213e49d36e5e9e.js></script><script type=text/javascript src=../../static/js/app.680b1bbd04444c6d9d3a.js></script></body></html>
\ No newline at end of file
......@@ -18,28 +18,38 @@ class Web:
self.session = Flask(__name__)
self.register_blueprint()
self.session.config['JWT_SECRET_KEY'] = 'secret' # 目前都是本地,暂不用放配置文件
self.session.config['JWT_REFRESH_TOKEN_EXPIRES'] = timedelta(seconds=60 * 60 * 24 * 7) # Token 超时时间 7 天
self.session.config['JWT_ACCESS_TOKEN_EXPIRES'] = timedelta(seconds=60 * 60 * 24 * 7) # Token 超时时间 7 天
self.jwt = JWTManager(self.session)
pass
def register_blueprint(self):
from py12306.web.handler.user import user
from py12306.web.handler.stat import stat
from py12306.web.handler.app import app
from py12306.web.handler.query import query
from py12306.web.handler.log import log
self.session.register_blueprint(user)
self.session.register_blueprint(stat)
self.session.register_blueprint(app)
self.session.register_blueprint(query)
self.session.register_blueprint(log)
@classmethod
def run(cls):
self = cls()
self.start()
pass
def start(self):
self.session.run(debug=Config().IS_DEBUG, port=Config().WEB_PORT, host='0.0.0.0')
if not Config().WEB_ENABLE or Config().is_slave(): return
if Config().IS_DEBUG:
self.run_session()
else:
create_thread_and_run(self, 'run_session', wait=False)
def run_session(self):
debug = False
if is_main_thread():
debug = Config().IS_DEBUG
self.session.run(debug=debug, port=Config().WEB_PORT, host='0.0.0.0')
if __name__ == '__main__':
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment