Compare commits
60 Commits
yuankaifen
...
master
After Width: | Height: | Size: 2.2 MiB |
@ -0,0 +1,3 @@
|
||||
# 默认忽略的文件
|
||||
/shelf/
|
||||
/workspace.xml
|
@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="PYTHON_MODULE" version="4">
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<excludeFolder url="file://$MODULE_DIR$/.venv" />
|
||||
</content>
|
||||
<orderEntry type="jdk" jdkName="Python 3.12 (G:)" jdkType="Python SDK" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
<component name="PackageRequirementsSettings">
|
||||
<option name="requirementsPath" value="" />
|
||||
</component>
|
||||
<component name="PyDocumentationSettings">
|
||||
<option name="format" value="EPYTEXT" />
|
||||
<option name="myDocStringFormat" value="Epytext" />
|
||||
</component>
|
||||
</module>
|
@ -0,0 +1,6 @@
|
||||
<component name="InspectionProjectProfileManager">
|
||||
<settings>
|
||||
<option name="USE_PROJECT_PROFILE" value="false" />
|
||||
<version value="1.0" />
|
||||
</settings>
|
||||
</component>
|
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="Black">
|
||||
<option name="sdkName" value="Python 3.12 (controller)" />
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.12 (G:)" project-jdk-type="Python SDK" />
|
||||
</project>
|
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/controller.iml" filepath="$PROJECT_DIR$/.idea/controller.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
|
||||
</component>
|
||||
</project>
|
@ -0,0 +1,11 @@
|
||||
#!/usr/bin/env python
|
||||
# encoding: utf-8
|
||||
# @author: 原凯峰
|
||||
# @contact: 2894340009@qq.com
|
||||
# @software: pycharm
|
||||
# @file: confControl.py
|
||||
# @time: 2024/6/21 11:18
|
||||
# @desc:
|
||||
|
||||
|
||||
#TODO 通过ssh在线更改nginx的conf文件
|
@ -0,0 +1,83 @@
|
||||
#!/usr/bin/env python
|
||||
# encoding: utf-8
|
||||
# @author: 原凯峰
|
||||
# @contact: 2894340009@qq.com
|
||||
# @software: pycharm
|
||||
# @file: MachineLearningDivider.py
|
||||
# @time: 2024/6/26 8:21
|
||||
# @desc:利用随机森林法进行模型训练,能够通过平均响应时间、故障率等数据计算出服务器的健康状态
|
||||
|
||||
|
||||
from sklearn.model_selection import train_test_split
|
||||
from sklearn.ensemble import RandomForestClassifier
|
||||
from sklearn.metrics import classification_report, accuracy_score
|
||||
import pickle
|
||||
def trainmodel():
|
||||
# 假设我们有以下数据集
|
||||
X = [
|
||||
[0.3, 0.005], # 服务器特征:平均响应时间和故障率
|
||||
[2.5, 0.03],
|
||||
[0.7, 0.045],
|
||||
[1.2, 0.002],
|
||||
[3.5, 0.1],
|
||||
[1.3, 0.05],
|
||||
[0.01, 0.15], # 服务器特征:平均响应时间和故障率
|
||||
[5, 0.03],
|
||||
[0.7, 0.015],
|
||||
[1.4, 0.02],
|
||||
[0.15, 0.2],
|
||||
[1.3, 0.005],
|
||||
|
||||
]
|
||||
y = ['良好', '一般', '一般', '良好', '差', '一般', '一般', '差', '良好', '差', '差', '良好'] # 对应的健康状态标签
|
||||
|
||||
# 将健康状态标签转换为数值
|
||||
label_mapping = {'一般': 0, '良好': 1, '差': 2}
|
||||
y_encoded = [label_mapping[label] for label in y]
|
||||
|
||||
# 划分训练集和测试集
|
||||
X_train, X_test, y_train, y_test = train_test_split(X, y_encoded, test_size=0.4, random_state=42)
|
||||
|
||||
# 选择模型,这里使用随机森林分类器
|
||||
model = RandomForestClassifier(n_estimators=100, random_state=42)
|
||||
|
||||
# 训练模型
|
||||
model.fit(X_train, y_train)
|
||||
|
||||
# 预测测试集
|
||||
y_pred = model.predict(X_test)
|
||||
|
||||
# 评估模型
|
||||
print(classification_report(y_test, y_pred))
|
||||
print("Accuracy:", accuracy_score(y_test, y_pred))
|
||||
|
||||
# 保存模型
|
||||
with open('server_health_model.pkl', 'wb') as file:
|
||||
pickle.dump(model, file)
|
||||
|
||||
|
||||
# trainmodel()
|
||||
# 定义一个函数来加载模型并进行预测
|
||||
def load_model_and_predict(new_data):
|
||||
with open('../LogAnalyze/server_health_model.pkl', 'rb') as file:
|
||||
loaded_model = pickle.load(file)
|
||||
predictions = loaded_model.predict(new_data)
|
||||
return predictions
|
||||
|
||||
# 定义一个函数来将预测结果转换为健康等级
|
||||
def predict_health_status(new_data):
|
||||
label_mapping = {'一般': 0, '良好': 1, '差': 2}
|
||||
predictions = load_model_and_predict(new_data)
|
||||
# 创建逆向映射字典
|
||||
inverse_label_mapping = {value: key for key, value in label_mapping.items()}
|
||||
# 使用逆向映射字典转换预测结果
|
||||
health_status = [inverse_label_mapping[pred] for pred in predictions]
|
||||
return health_status
|
||||
|
||||
# 测试函数
|
||||
def testcase():
|
||||
new_data = [[0.4, 0.01]] # 新的服务器数据
|
||||
health_status = predict_health_status(new_data)
|
||||
print("预测的健康状态:", health_status)
|
||||
|
||||
# testcase()
|
@ -0,0 +1,22 @@
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
# 定义时间格式
|
||||
date_format = "%Y-%m-%d"
|
||||
|
||||
# 获取当前日期,并按照定义的格式转换
|
||||
current_date = datetime.now().strftime(date_format)
|
||||
# 去除前导零
|
||||
current_date = current_date.replace("-0", "-")
|
||||
# 打印当前日期
|
||||
print("当前日期:", current_date)
|
||||
|
||||
for day in range(1,16):
|
||||
|
||||
# 计算当前日期之前15天的日期
|
||||
delta = timedelta(days=-day)
|
||||
previous_date = (datetime.now() + delta).strftime(date_format)
|
||||
# 去除前导零
|
||||
previous_date = previous_date.replace("-0", "-")
|
||||
print(previous_date)
|
||||
# 打印之前15天的日期
|
||||
print("之前15天的日期:", previous_date)
|
@ -0,0 +1,58 @@
|
||||
# !/usr/bin/env python
|
||||
# encoding: utf-8
|
||||
# @author: 原凯峰
|
||||
# @contact: 2894340009@qq.com
|
||||
# @software: pycharm
|
||||
# @file: tryselect.py
|
||||
# @time: 2024/6/22 11:32
|
||||
# @desc:
|
||||
|
||||
|
||||
import mysql.connector
|
||||
from mysql.connector import Error
|
||||
import json
|
||||
|
||||
# 数据库配置信息
|
||||
host = ''
|
||||
database = 'nginxdb'
|
||||
user = 'rtsw'
|
||||
password = '123456'
|
||||
|
||||
# SQL查询语句
|
||||
sql_query = "SELECT * FROM tasks" # 替换成你的表名和查询条件
|
||||
|
||||
# 连接到数据库
|
||||
try:
|
||||
connection = mysql.connector.connect(host=host,
|
||||
database=database,
|
||||
user=user,
|
||||
password=password)
|
||||
if connection.is_connected():
|
||||
cursor = connection.cursor()
|
||||
|
||||
# 执行查询语句
|
||||
cursor.execute(sql_query)
|
||||
|
||||
# 获取所有查询结果
|
||||
rows = cursor.fetchall()
|
||||
|
||||
# 将查询结果转换为字典列表
|
||||
# 假设你的表有列名为'id', 'name', 'age'等
|
||||
columns = [i[0] for i in cursor.description] # 获取列名
|
||||
data_list = [dict(zip(columns, row)) for row in rows] # 将每行数据转换为字典
|
||||
|
||||
# 将字典列表转换为JSON格式
|
||||
json_data = json.dumps(data_list, ensure_ascii=False)
|
||||
|
||||
print(json_data) # 打印JSON格式的数据
|
||||
print(data_list[0]["subject"])
|
||||
|
||||
except Error as e:
|
||||
print("Error while connecting to MySQL", e)
|
||||
|
||||
finally:
|
||||
# 关闭数据库连接
|
||||
if connection.is_connected():
|
||||
cursor.close()
|
||||
connection.close()
|
||||
print("MySQL connection is closed")
|
@ -0,0 +1,21 @@
|
||||
CREATE TABLE `Servers` (
|
||||
`server_name` VARCHAR(32) PRIMARY KEY,
|
||||
`status VARCHAR(32) NOT NULL`,
|
||||
`upstream` VARCHAR(32),
|
||||
`detect_date` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
`responseTime` varchar(255) NOT NULL COMMENT '响应时间',
|
||||
`protocol` varchar(32) NOT NULL COMMENT '通信协议名称',
|
||||
) DEFAULT CHARACTER SET = utf8mb4 COMMENT = '服务器列表';
|
||||
|
||||
|
||||
CREATE TABLE `ServerHealthLog` (
|
||||
`health_id` INT AUTO_INCREMENT PRIMARY KEY,
|
||||
`server_name` VARCHAR(32),
|
||||
`upstream` VARCHAR(32),
|
||||
`detect_date` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
`status` VARCHAR(32) NOT NULL,
|
||||
`responseTime` varchar(255) NOT NULL COMMENT '响应时间',
|
||||
`protocol` varchar(32) NOT NULL COMMENT '通信协议名称',
|
||||
FOREIGN KEY (`server_name`) REFERENCES Servers(`server_name`),
|
||||
INDEX `check_time_index` (`check_time`)
|
||||
) DEFAULT CHARACTER SET = utf8mb4 COMMENT = '服务器历史信息记录表';
|
@ -0,0 +1,11 @@
|
||||
CREATE TABLE IF NOT EXISTS `user` (
|
||||
`username` varchar(255) NOT NULL,
|
||||
`real_name` varchar(255) NOT NULL COMMENT '真名',
|
||||
`ID` varchar(255) NOT NULL COMMENT '身份证号',
|
||||
`password` varchar(255) NOT NULL COMMENT '密码',
|
||||
`tel` varchar(255) NOT NULL COMMENT '电话号码',
|
||||
PRIMARY KEY (`id`),
|
||||
) DEFAULT CHARACTER SET = utf8mb4 COMMENT = '用户信息列表';
|
||||
|
||||
|
||||
|
@ -0,0 +1,187 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>注册页面</title>
|
||||
<!-- 引入格式文件-->
|
||||
<!-- <link rel="stylesheet" href="html&css.css"> -->
|
||||
</head>
|
||||
<body>
|
||||
<style>
|
||||
*{
|
||||
margin: 0px;/*所有的外边距为0*/
|
||||
padding: 0px;/*所有的内边距为0*/
|
||||
box-sizing: border-box;/*规定两个并排的带边框的框*/
|
||||
}
|
||||
table{
|
||||
text-align: center;
|
||||
}
|
||||
body{
|
||||
background: url("./assets/images/button.jpg")no-repeat center;
|
||||
padding-top: 25px;
|
||||
}
|
||||
.rg_layout{
|
||||
width: 900px;
|
||||
height: 500px;
|
||||
border: 8px solid #EEEEEE;/*solid 定义实线*/
|
||||
background-color: white;
|
||||
margin: auto;
|
||||
}
|
||||
.rg_left{
|
||||
float: none;
|
||||
text-align: center;
|
||||
margin: 15px;
|
||||
}
|
||||
.rg_left>p:first-child{
|
||||
color: #FFD026;
|
||||
font-size: 20px;
|
||||
}
|
||||
.rg_left>p:last-child{
|
||||
color: #A6A6A6;
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
.rg_center{
|
||||
float: left;
|
||||
}
|
||||
|
||||
.rg_right{
|
||||
float: none;
|
||||
margin: 250px;
|
||||
padding-left: 10px;
|
||||
white-space:nowrap;
|
||||
}
|
||||
.rg_right p{
|
||||
font-size: 15px;
|
||||
}
|
||||
.rg_right p a{
|
||||
color: coral;
|
||||
}
|
||||
.td_left{
|
||||
padding-left: 250px;
|
||||
width: 100px;
|
||||
text-align: center;
|
||||
height: 45px;
|
||||
white-space:nowrap;
|
||||
}
|
||||
.td_right{
|
||||
padding-left: 40px;
|
||||
text-align: center;
|
||||
white-space:nowrap;
|
||||
}
|
||||
.bt_center{
|
||||
padding-left: 310px;
|
||||
}
|
||||
#username,#real_name,#ID,#password,#tel,#birthday,#checkcode{
|
||||
width: 251px;
|
||||
height: 32px;
|
||||
border: 1px solid #A6A6A6;
|
||||
/*设置边框圆角*/
|
||||
border-radius: 5px;
|
||||
padding-left: 10px;
|
||||
}
|
||||
#checkcode{
|
||||
width: 110px;
|
||||
}
|
||||
#img_check{
|
||||
height: 32px;
|
||||
vertical-align: middle;/*设置图片的位置垂直居中*/
|
||||
}
|
||||
#btn_sub{
|
||||
width: 100px;
|
||||
height: 40px;
|
||||
background-color: #FFD026;
|
||||
border: 1px solid #FFD026;
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
</style>
|
||||
<div class="rg_layout">
|
||||
<div class="rg_left">
|
||||
<p>新用户注册</p>
|
||||
<p>USER REGISTER</p>
|
||||
</div>
|
||||
<div class="rg_center">
|
||||
<div class="rg_form">
|
||||
<form class="ant-form" action="#" method="post">
|
||||
<table>
|
||||
<tr><!--label 标签的作用是当点击文字也会跳到文本输出框-->
|
||||
<!--for属性与ID属性对应规定 label 绑定到哪个表单元素。-->
|
||||
<td class="td_left"><label for="username">用户名</label> </td>
|
||||
<td class="td_right"><input type="text" name="username" id="username"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td_left"><label for="real_name">姓名</label> </td>
|
||||
<td class="td_right"><input type="text" name="real_name" id="real_name"> </td>
|
||||
</tr>
|
||||
<tr><!--label 标签的作用是当点击文字也会跳到文本输出框-->
|
||||
<td class="td_left"><label for="ID">身份证号</label> </td>
|
||||
<td class="td_right"><input type="text" name="ID" id="ID"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td_left"><label for="password">密码</label> </td>
|
||||
<td class="td_right"><input type="password" name="password" id="password"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td_left"><label for="tel">再次输入密码</label> </td>
|
||||
<td class="td_right"><input type="password" name="tel" id="tel"> </td>
|
||||
</tr>
|
||||
|
||||
|
||||
|
||||
<tr>
|
||||
<td colspan="2" align="center" class="bt_center">
|
||||
<input type="submit" value="注册" id="btn_sub">
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="rg_right">
|
||||
<p><a href="LoginUI.html">返回登录界面</a></p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
// 获取表单元素
|
||||
var form = document.querySelector('.ant-form');
|
||||
|
||||
// 为表单添加提交事件监听器
|
||||
form.addEventListener('submit', function(e) {
|
||||
e.preventDefault(); // 阻止表单的默认提交行为
|
||||
|
||||
// 收集表单数据
|
||||
var formData = {
|
||||
//question_kind: document.getElementsByName('question_kind').value,
|
||||
ID:document.getElementById('ID').value,
|
||||
password: document.getElementById('password').value,
|
||||
real_name:document.getElementById('real_name').value,
|
||||
source:"frontend",
|
||||
tel:document.getElementById('tel').value,
|
||||
type:"register_message",
|
||||
username: document.getElementById('username').value,
|
||||
};
|
||||
console.log(formData);
|
||||
fetch('http://47.96.136.178:8080', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
body: JSON.stringify(formData) // 将表单数据转换为JSON字符串
|
||||
})
|
||||
.then(response => response.json()) // 转换响应为JSON
|
||||
.then(data => {
|
||||
console.log('Success:', data);
|
||||
alert('反馈成功提交!');
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error('Error:', error);
|
||||
alert('提交失败,请稍后重试!');
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</html>
|
@ -0,0 +1,53 @@
|
||||
# encoding: utf-8
|
||||
# @author: 原凯峰
|
||||
# @contact: 2894340009@qq.com
|
||||
# @software: pycharm
|
||||
# @file: Server.py
|
||||
# @time: 2024/6/19 9:22
|
||||
# @desc:
|
||||
import json
|
||||
from http.server import BaseHTTPRequestHandler, HTTPServer
|
||||
from MessageHandler.PreDataProcessor import *
|
||||
import time
|
||||
|
||||
class CORSHTTPRequestHandler(BaseHTTPRequestHandler):
|
||||
def do_OPTIONS(self):
|
||||
self.send_response(204)
|
||||
self.send_header('Content-type', 'text/plain')
|
||||
self.send_header('Access-Control-Allow-Origin', '*')
|
||||
self.send_header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS')
|
||||
self.send_header('Access-Control-Allow-Headers', 'Content-Type')
|
||||
self.end_headers()
|
||||
|
||||
def do_POST(self):
|
||||
content_length = int(self.headers['Content-Length'])
|
||||
post_data = self.rfile.read(content_length)
|
||||
|
||||
self.send_response(200)
|
||||
self.send_header('Content-type', 'text/plain')
|
||||
self.send_header('Access-Control-Allow-Origin', '*')
|
||||
self.end_headers()
|
||||
|
||||
print("Request line:", self.requestline)
|
||||
print("Headers:", self.headers)
|
||||
print("Body:", post_data.decode('utf-8'))
|
||||
|
||||
# 处理程序
|
||||
MessageProcessor = preDataProcessor(post_data)
|
||||
# response = {"POST": "request received"}
|
||||
# self.wfile.write(str(response).encode('utf-8'))
|
||||
# time.sleep(1)
|
||||
backMessage =MessageProcessor.returnMessage
|
||||
response = {"POST": backMessage}
|
||||
|
||||
self.wfile.write(str(json.dumps(response)).encode('utf-8'))
|
||||
# self.wfile.write("{\"POST\": \"request received\"}".encode('utf-8'))
|
||||
|
||||
def do_GET(self):
|
||||
self.send_response(200)
|
||||
self.send_header('Content-type', 'text/plain')
|
||||
self.send_header('Access-Control-Allow-Origin', '*')
|
||||
self.end_headers()
|
||||
|
||||
self.wfile.write(b"Hello, world!")
|
||||
|
@ -0,0 +1,132 @@
|
||||
<style>
|
||||
.loader {
|
||||
background: #ffffff;
|
||||
background: radial-gradient(#ffffff, #ffffff);
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
overflow: hidden;
|
||||
position: fixed;
|
||||
right: 0;
|
||||
top: 0;
|
||||
z-index: 99999;
|
||||
}
|
||||
|
||||
.loader-inner {
|
||||
bottom: 0;
|
||||
height: 60px;
|
||||
left: 0;
|
||||
margin: auto;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
width: 100px;
|
||||
}
|
||||
|
||||
.loader-line-wrap {
|
||||
animation:
|
||||
spin 2000ms cubic-bezier(.175, .885, .32, 1.275) infinite
|
||||
;
|
||||
box-sizing: border-box;
|
||||
height: 50px;
|
||||
left: 0;
|
||||
overflow: hidden;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
transform-origin: 50% 100%;
|
||||
width: 100px;
|
||||
}
|
||||
.loader-line {
|
||||
border: 4px solid transparent;
|
||||
border-radius: 100%;
|
||||
box-sizing: border-box;
|
||||
height: 100px;
|
||||
left: 0;
|
||||
margin: 0 auto;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
width: 100px;
|
||||
}
|
||||
.loader-line-wrap:nth-child(1) { animation-delay: -50ms; }
|
||||
.loader-line-wrap:nth-child(2) { animation-delay: -100ms; }
|
||||
.loader-line-wrap:nth-child(3) { animation-delay: -150ms; }
|
||||
.loader-line-wrap:nth-child(4) { animation-delay: -200ms; }
|
||||
.loader-line-wrap:nth-child(5) { animation-delay: -250ms; }
|
||||
|
||||
.loader-line-wrap:nth-child(1) .loader-line {
|
||||
border-color: hsl(0, 80%, 60%);
|
||||
height: 90px;
|
||||
width: 90px;
|
||||
top: 7px;
|
||||
}
|
||||
.loader-line-wrap:nth-child(2) .loader-line {
|
||||
border-color: hsl(60, 80%, 60%);
|
||||
height: 76px;
|
||||
width: 76px;
|
||||
top: 14px;
|
||||
}
|
||||
.loader-line-wrap:nth-child(3) .loader-line {
|
||||
border-color: hsl(120, 80%, 60%);
|
||||
height: 62px;
|
||||
width: 62px;
|
||||
top: 21px;
|
||||
}
|
||||
.loader-line-wrap:nth-child(4) .loader-line {
|
||||
border-color: hsl(180, 80%, 60%);
|
||||
height: 48px;
|
||||
width: 48px;
|
||||
top: 28px;
|
||||
}
|
||||
.loader-line-wrap:nth-child(5) .loader-line {
|
||||
border-color: hsl(240, 80%, 60%);
|
||||
height: 34px;
|
||||
width: 34px;
|
||||
top: 35px;
|
||||
}
|
||||
|
||||
@keyframes spin {
|
||||
0%, 15% {
|
||||
transform: rotate(0);
|
||||
}
|
||||
100% {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<div class="loader">
|
||||
<div class="loader-inner">
|
||||
<div class="loader-line-wrap">
|
||||
<div class="loader-line"></div>
|
||||
</div>
|
||||
<div class="loader-line-wrap">
|
||||
<div class="loader-line"></div>
|
||||
</div>
|
||||
<div class="loader-line-wrap">
|
||||
<div class="loader-line"></div>
|
||||
</div>
|
||||
<div class="loader-line-wrap">
|
||||
<div class="loader-line"></div>
|
||||
</div>
|
||||
<div class="loader-line-wrap">
|
||||
<div class="loader-line"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<style>
|
||||
.login {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 75%;
|
||||
margin: -150px 0 0 -150px;
|
||||
width:300px;
|
||||
height:300px;
|
||||
}
|
||||
</style>
|
||||
<html>
|
||||
<body>
|
||||
<h1>welcome</h1>
|
||||
</body>
|
||||
<script>
|
||||
setTimeout(()=>location.href="LoginUI.html",5000);
|
||||
</script>
|
||||
</html>
|
@ -0,0 +1,183 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>注册页面</title>
|
||||
<!-- 引入格式文件-->
|
||||
<!-- <link rel="stylesheet" href="html&css.css"> -->
|
||||
</head>
|
||||
<body>
|
||||
<style>
|
||||
*{
|
||||
margin: 0px;/*所有的外边距为0*/
|
||||
padding: 0px;/*所有的内边距为0*/
|
||||
box-sizing: border-box;/*规定两个并排的带边框的框*/
|
||||
}
|
||||
table{
|
||||
text-align: center;
|
||||
}
|
||||
body{
|
||||
background: url("./assets/images/button.jpg")no-repeat center;
|
||||
padding-top: 25px;
|
||||
}
|
||||
.rg_layout{
|
||||
width: 900px;
|
||||
height: 500px;
|
||||
border: 8px solid #EEEEEE;/*solid 定义实线*/
|
||||
background-color: white;
|
||||
margin: auto;
|
||||
}
|
||||
.rg_left{
|
||||
float: none;
|
||||
text-align: center;
|
||||
margin: 15px;
|
||||
}
|
||||
.rg_left>p:first-child{
|
||||
color: #FFD026;
|
||||
font-size: 20px;
|
||||
}
|
||||
.rg_left>p:last-child{
|
||||
color: #A6A6A6;
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
.rg_center{
|
||||
float: left;
|
||||
}
|
||||
|
||||
.rg_right{
|
||||
float: none;
|
||||
margin: 250px;
|
||||
padding-left: 10px;
|
||||
white-space:nowrap;
|
||||
}
|
||||
.rg_right p{
|
||||
font-size: 15px;
|
||||
}
|
||||
.rg_right p a{
|
||||
color: coral;
|
||||
}
|
||||
.td_left{
|
||||
padding-left: 250px;
|
||||
width: 100px;
|
||||
text-align: center;
|
||||
height: 45px;
|
||||
white-space:nowrap;
|
||||
}
|
||||
.td_right{
|
||||
padding-left: 40px;
|
||||
text-align: center;
|
||||
white-space:nowrap;
|
||||
}
|
||||
.bt_center{
|
||||
padding-left: 310px;
|
||||
}
|
||||
#username,#real_name,#ID,#password,#tel,#birthday,#checkcode{
|
||||
width: 251px;
|
||||
height: 32px;
|
||||
border: 1px solid #A6A6A6;
|
||||
/*设置边框圆角*/
|
||||
border-radius: 5px;
|
||||
padding-left: 10px;
|
||||
}
|
||||
#checkcode{
|
||||
width: 110px;
|
||||
}
|
||||
#img_check{
|
||||
height: 32px;
|
||||
vertical-align: middle;/*设置图片的位置垂直居中*/
|
||||
}
|
||||
#btn_sub{
|
||||
width: 100px;
|
||||
height: 40px;
|
||||
background-color: #FFD026;
|
||||
border: 1px solid #FFD026;
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
</style>
|
||||
<div class="rg_layout">
|
||||
<div class="rg_left">
|
||||
<p>新用户注册</p>
|
||||
<p>USER REGISTER</p>
|
||||
</div>
|
||||
<div class="rg_center">
|
||||
<div class="rg_form">
|
||||
<form class="ant-form" action="#" method="post">
|
||||
<table>
|
||||
<tr><!--label 标签的作用是当点击文字也会跳到文本输出框-->
|
||||
<!--for属性与ID属性对应规定 label 绑定到哪个表单元素。-->
|
||||
<td class="td_left"><label for="username">用户名</label> </td>
|
||||
<td class="td_right"><input type="text" name="username" id="username"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td_left"><label for="real_name">姓名</label> </td>
|
||||
<td class="td_right"><input type="text" name="real_name" id="real_name"> </td>
|
||||
</tr>
|
||||
<tr><!--label 标签的作用是当点击文字也会跳到文本输出框-->
|
||||
<td class="td_left"><label for="ID">身份证号</label> </td>
|
||||
<td class="td_right"><input type="text" name="ID" id="ID"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td_left"><label for="password">密码</label> </td>
|
||||
<td class="td_right"><input type="password" name="password" id="password"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td_left"><label for="tel">再次输入密码</label> </td>
|
||||
<td class="td_right"><input type="password" name="tel" id="tel"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2" align="center" class="bt_center">
|
||||
<input type="submit" value="注册" id="btn_sub">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="rg_right">
|
||||
<p><a href="LoginUI.html">返回登录界面</a></p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
// 获取表单元素
|
||||
var form = document.querySelector('.ant-form');
|
||||
|
||||
// 为表单添加提交事件监听器
|
||||
form.addEventListener('submit', function(e) {
|
||||
e.preventDefault(); // 阻止表单的默认提交行为
|
||||
|
||||
// 收集表单数据
|
||||
var formData = {
|
||||
//question_kind: document.getElementsByName('question_kind').value,
|
||||
ID:document.getElementById('ID').value,
|
||||
password: document.getElementById('password').value,
|
||||
real_name:document.getElementById('real_name').value,
|
||||
source:"frontend",
|
||||
tel:document.getElementById('tel').value,
|
||||
type:"register_message",
|
||||
username: document.getElementById('username').value,
|
||||
};
|
||||
console.log(formData);
|
||||
fetch('', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
body: JSON.stringify(formData) // 将表单数据转换为JSON字符串
|
||||
})
|
||||
.then(response => response.json()) // 转换响应为JSON
|
||||
.then(data => {
|
||||
console.log('Success:', data);
|
||||
alert('反馈成功提交!');
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error('Error:', error);
|
||||
alert('提交失败,请稍后重试!');
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</html>
|
@ -0,0 +1,41 @@
|
||||
<div class="sidebar">
|
||||
<div class="menu-item">北京</div>
|
||||
<div class="menu-item">长沙</div>
|
||||
<div class="menu-item">上海</div>
|
||||
<!-- 更多菜单项... -->
|
||||
</div>
|
||||
<button id="toggleIndent">切换缩进</button>
|
||||
<style>
|
||||
/* 初始的侧边栏样式 */
|
||||
.sidebar {
|
||||
width: 200px; /* 侧边栏宽度 */
|
||||
background-color: #f4f4f4; /* 侧边栏背景颜色 */
|
||||
padding: 10px; /* 侧边栏内边距 */
|
||||
}
|
||||
|
||||
/* 菜单项样式 */
|
||||
.menu-item {
|
||||
padding: 8px 20px; /* 菜单项内边距 */
|
||||
margin-bottom: 5px; /* 菜单项之间的间隔 */
|
||||
background-color: #ddd; /* 菜单项背景颜色 */
|
||||
cursor: pointer; /* 鼠标悬停时显示为指针 */
|
||||
transition: background-color 0.3s; /* 背景颜色变化的过渡效果 */
|
||||
}
|
||||
|
||||
/* 缩进效果的样式 */
|
||||
.indented {
|
||||
margin-left: 20px; /* 缩进的距离 */
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
var toggleIndentButton = document.getElementById('toggleIndent');
|
||||
var menuItems = document.querySelectorAll('.menu-item');
|
||||
|
||||
toggleIndentButton.addEventListener('click', function () {
|
||||
menuItems.forEach(function (item) {
|
||||
item.classList.toggle('indented');
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
@ -0,0 +1,289 @@
|
||||
/*-----------------------------------*\
|
||||
#style.css
|
||||
\*-----------------------------------*/
|
||||
|
||||
/**
|
||||
* copyright 2022 codewithsadee
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*-----------------------------------*\
|
||||
#CUSTOM PROPERTY
|
||||
\*-----------------------------------*/
|
||||
|
||||
:root {
|
||||
|
||||
/**
|
||||
* colors
|
||||
*/
|
||||
|
||||
--medium-slate-blue: hsl(240, 73%, 65%);
|
||||
--space-cadet_10: hsl(226, 54%, 26%, 0.1);
|
||||
--space-cadet: hsl(226, 54%, 26%);
|
||||
--ghost-white: hsl(227, 69%, 97%);
|
||||
--cool-gray: hsl(226, 19%, 63%);
|
||||
--cultured: hsl(0, 0%, 95%);
|
||||
--white: hsl(0, 0%, 100%);
|
||||
|
||||
/**
|
||||
* typography
|
||||
*/
|
||||
|
||||
--ff-dm-sans: 'Roboto', sans-serif;
|
||||
--ff-helvetica: 'Helvetica', sans-serif;
|
||||
|
||||
--fs-1: 3rem;
|
||||
--fs-2: 2.4rem;
|
||||
--fs-3: 1.5rem;
|
||||
--fs-4: 1.2rem;
|
||||
|
||||
--fw-500: 500;
|
||||
--fw-600: 600;
|
||||
--fw-700: 700;
|
||||
|
||||
/**
|
||||
* shadow
|
||||
*/
|
||||
|
||||
--shadow: 1px 1px 3px hsla(0, 0%, 0%, 0.15);
|
||||
|
||||
/**
|
||||
* radius
|
||||
*/
|
||||
|
||||
--radius-5: 5px;
|
||||
--radius-15: 15px;
|
||||
|
||||
/**
|
||||
* transition
|
||||
*/
|
||||
|
||||
--transition-1: 0.25s ease;
|
||||
--transition-2: 1s ease;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*-----------------------------------*\
|
||||
#RESET
|
||||
\*-----------------------------------*/
|
||||
|
||||
*,
|
||||
*::before,
|
||||
*::after {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
span,
|
||||
data { display: block; }
|
||||
|
||||
img { height: auto; }
|
||||
|
||||
table,
|
||||
tbody,
|
||||
tr,
|
||||
th,
|
||||
td {
|
||||
all: unset;
|
||||
}
|
||||
|
||||
html {
|
||||
font-family: var(--ff-dm-sans);
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
body {
|
||||
background-color: var(--ghost-white);
|
||||
color: var(--cool-gray);
|
||||
font-size: 1.6rem;
|
||||
padding-inline: 15px;
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*-----------------------------------*\
|
||||
#REUSED STYLE
|
||||
\*-----------------------------------*/
|
||||
|
||||
.flex-center {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.balance-card,
|
||||
.chart-card {
|
||||
width: 300px;
|
||||
height: 150px;
|
||||
position: relative;
|
||||
padding: 5px;
|
||||
border-radius: var(--radius-10);
|
||||
}
|
||||
|
||||
.text { font-size: var(--fs-3); }
|
||||
|
||||
.h2 { font-size: var(--fs-2); }
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*-----------------------------------*\
|
||||
#BALANCE CARD
|
||||
\*-----------------------------------*/
|
||||
|
||||
.chart-container {
|
||||
width: 100%;
|
||||
max-width: 540px;
|
||||
margin-inline: 100px;
|
||||
left: 50px;
|
||||
}
|
||||
|
||||
.balance-card {
|
||||
background-color: var(--medium-slate-blue);
|
||||
color: var(--white);
|
||||
justify-content: space-between;
|
||||
margin-block-end: 15px;
|
||||
}
|
||||
|
||||
.balance-card .text {
|
||||
font-weight: unset;
|
||||
margin-block-end: 5px;
|
||||
}
|
||||
|
||||
.balance-card .h2 { font-weight: var(--fw-700); }
|
||||
|
||||
.balance-card .logo { width: 60px; }
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*-----------------------------------*\
|
||||
#CHART CARD
|
||||
\*-----------------------------------*/
|
||||
|
||||
.chart-card {
|
||||
position: relative;
|
||||
margin-right: 30px;
|
||||
background-color: var(--white);
|
||||
}
|
||||
|
||||
.chart-card .h2 {
|
||||
color: var(--space-cadet);
|
||||
font-weight: var(--fw-500);
|
||||
margin-block-end: 50px;
|
||||
}
|
||||
|
||||
.chart-card .card-table {
|
||||
display: block;
|
||||
padding-block-end: 24px;
|
||||
border-block-end: 1px solid var(--space-cadet_10);
|
||||
margin-block-end: 24px;
|
||||
}
|
||||
|
||||
.chart-card .table-body {
|
||||
justify-content: space-evenly;
|
||||
align-items: stretch;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.chart-card .table-row {
|
||||
flex-direction: column-reverse;
|
||||
justify-content: flex-start;
|
||||
gap: 10px;
|
||||
min-height: calc(150px + 31px);
|
||||
}
|
||||
|
||||
.chart-card .table-heading {
|
||||
color: var(--space-cadet);
|
||||
font-family: var(--ff-helvetica);
|
||||
font-size: var(--fs-4);
|
||||
}
|
||||
|
||||
.chart-card .table-data {
|
||||
min-width: 20px;
|
||||
height: 100%;
|
||||
background-color: var(--cultured);
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.chart-card .chart-bar {
|
||||
background-color: var(--medium-slate-blue);
|
||||
height: 50%;
|
||||
width: 100%;
|
||||
transform-origin: bottom;
|
||||
transition: transform var(--transition-2);
|
||||
}
|
||||
|
||||
.chart-card .chart-bar:hover { opacity: 0.75; }
|
||||
|
||||
.tooltip {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
background-color: var(--white);
|
||||
color: var(--space-cadet);
|
||||
font-family: var(--ff-helvetica);
|
||||
font-weight: var(--fw-600);
|
||||
padding: 8px;
|
||||
border: 1px solid var(--cultured);
|
||||
border-radius: var(--radius-5);
|
||||
box-shadow: var(--shadow);
|
||||
pointer-events: none;
|
||||
opacity: 0;
|
||||
transition: var(--transition-1);
|
||||
}
|
||||
|
||||
.tooltip.active { opacity: 1; }
|
||||
|
||||
.chart-card .wrapper {
|
||||
justify-content: space-between;
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
.chart-card .meta-value {
|
||||
color: var(--space-cadet);
|
||||
font-weight: var(--fw-500);
|
||||
margin-block-start: 5px;
|
||||
}
|
||||
|
||||
.chart-card .meta-value:not(.small) { font-size: var(--fs-1); }
|
||||
|
||||
.chart-card .card-meta:last-child {
|
||||
align-self: flex-end;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.piechart{
|
||||
margin-top: -180px;
|
||||
left: 600px;
|
||||
width: 150px;
|
||||
height: 150px;
|
||||
position: fixed;
|
||||
padding: 5px;
|
||||
border-radius: var(--radius-10);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*-----------------------------------*\
|
||||
#MEDIA QUERIES
|
||||
\*-----------------------------------*/
|
||||
|
||||
/**
|
||||
* responsive for large than 768px screen
|
||||
*/
|
||||
|
After Width: | Height: | Size: 710 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 313 KiB |
After Width: | Height: | Size: 148 KiB |
After Width: | Height: | Size: 173 KiB |
After Width: | Height: | Size: 164 KiB |
After Width: | Height: | Size: 155 KiB |
After Width: | Height: | Size: 1.3 MiB |
After Width: | Height: | Size: 2.0 MiB |
After Width: | Height: | Size: 237 KiB |
After Width: | Height: | Size: 533 KiB |
After Width: | Height: | Size: 740 KiB |
After Width: | Height: | Size: 74 KiB |
After Width: | Height: | Size: 6.2 KiB |
After Width: | Height: | Size: 6.1 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 409 KiB |
After Width: | Height: | Size: 102 KiB |
After Width: | Height: | Size: 204 KiB |
After Width: | Height: | Size: 81 KiB |
After Width: | Height: | Size: 516 B |
After Width: | Height: | Size: 12 KiB |
@ -0,0 +1,20 @@
|
||||
[
|
||||
{
|
||||
"server": "shanghai",
|
||||
"stat": "busy",
|
||||
"amount": 70,
|
||||
"recentTime":70
|
||||
},
|
||||
{
|
||||
"server": "changsha",
|
||||
"stat": "busy",
|
||||
"amount": 50,
|
||||
"recentTime": 1300
|
||||
},
|
||||
{
|
||||
"server": "beijing",
|
||||
"stat": "busy",
|
||||
"amount": 56,
|
||||
"recentTime": 70
|
||||
}
|
||||
]
|
@ -0,0 +1,149 @@
|
||||
'use strict';
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* import json data
|
||||
*/
|
||||
|
||||
import data from './data.json' assert { type: 'json' };
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* -> select all DOM elements
|
||||
*/
|
||||
|
||||
const tooltip = document.querySelector("[data-tooltip]");
|
||||
const chartBars = document.querySelectorAll("[data-chart-bar]");
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* add event on element
|
||||
*/
|
||||
|
||||
const addEventOnElem = function (elem, type, callback) {
|
||||
if (elem.length > 1) {
|
||||
for (let i = 0; i < elem.length; i++) {
|
||||
elem[i].addEventListener(type, callback);
|
||||
}
|
||||
} else {
|
||||
elem.addEventListener(type, callback);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* -> get the max day amount from data
|
||||
*/
|
||||
|
||||
let maxDayAmount = 0;
|
||||
|
||||
for (let i = 0; i < data.length; i++) {
|
||||
if (data[i].amount > maxDayAmount) {
|
||||
maxDayAmount = data[i].amount;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* -> get chart bars height as array
|
||||
* -> set the height of all bars in chart
|
||||
*/
|
||||
|
||||
const setChartBarsHeight = function (height) {
|
||||
for (let i = 0; i < height.length; i++) {
|
||||
chartBars[i].style.transform = `scaleY(${height[i] / 100})`;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* -> get the day amount from data
|
||||
* -> find the percentage of every number
|
||||
* -> push all number in chartBarsHeight
|
||||
*/
|
||||
|
||||
const charBarsHeight = [];
|
||||
|
||||
for (let i = 0; i < data.length; i++) {
|
||||
const dayAmount = data[i].amount;
|
||||
const percentOfNum = dayAmount / maxDayAmount * 100;
|
||||
charBarsHeight.push(percentOfNum);
|
||||
}
|
||||
|
||||
setChartBarsHeight(charBarsHeight);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* -> get top, left, and chart bar width
|
||||
* -> get tooltip height
|
||||
* -> set the gap between chart bar and tooltip
|
||||
* -> set the tooltip position
|
||||
*/
|
||||
|
||||
const setTooltipPos = function (top, left, chartBarWidth) {
|
||||
const tooltipHeight = tooltip.offsetHeight;
|
||||
const gap = 8;
|
||||
|
||||
tooltip.style.top = `${top - tooltipHeight - gap}px`;
|
||||
tooltip.style.left = `${left + chartBarWidth / 2}px`;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* when chart bar is hover
|
||||
* -> add active class in tooltip
|
||||
* -> get chart bar top position from window
|
||||
* -> get chart bar left position from window
|
||||
* -> get chart bar width
|
||||
* -> call setTooltipPos and pass the chart bar top,
|
||||
* left position and width
|
||||
*/
|
||||
|
||||
const chartBarOnHover = function () {
|
||||
tooltip.classList.add("active");
|
||||
|
||||
const barTopPos = this.getBoundingClientRect().top;
|
||||
const barLeftPos = this.getBoundingClientRect().left;
|
||||
const barWidth = this.offsetWidth;
|
||||
|
||||
setTooltipPos(barTopPos, barLeftPos, barWidth);
|
||||
}
|
||||
|
||||
addEventOnElem(chartBars, "mouseover", chartBarOnHover);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* -> hide tooltip when leave cursor from chart bar
|
||||
*/
|
||||
|
||||
const hideTooltip = function () {
|
||||
tooltip.classList.remove("active");
|
||||
}
|
||||
|
||||
addEventOnElem(chartBars, "mouseleave", hideTooltip);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* -> add tooltip value when hover on any bar chart
|
||||
*/
|
||||
|
||||
const addTooltipValue = function () {
|
||||
for (let i = 0; i < data.length; i++) {
|
||||
if (data[i].server === this.dataset.chartBar) {
|
||||
tooltip.innerHTML = data[i].amount.toString();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
addEventOnElem(chartBars, "mouseover", addTooltipValue);
|
@ -0,0 +1,363 @@
|
||||
@charset "UTF-8";
|
||||
/* CSS Document */
|
||||
.bg{
|
||||
margin:0 auto;
|
||||
width:100%;
|
||||
min-height:100vh;
|
||||
background:url(../images/bg2.jpg) no-repeat;
|
||||
background-size: cover;
|
||||
padding-top:0rem;
|
||||
padding:0rem 0.2rem;
|
||||
|
||||
}
|
||||
/*.conIn{
|
||||
display:flex;
|
||||
display: -webkit-flex;}*/
|
||||
.title{
|
||||
width:100%;
|
||||
font-size:0.12rem;
|
||||
line-height:0.3rem;
|
||||
color:rgba(14,253,255,1);
|
||||
text-align:center;
|
||||
font-weight:bold;
|
||||
}
|
||||
|
||||
.border_bg_leftTop{
|
||||
position:absolute;
|
||||
left:-0.008rem;
|
||||
top:-0.04rem;
|
||||
width:0.37rem;
|
||||
height:0.05rem;
|
||||
display:block;
|
||||
background: url(../images/title_left_bg.png) no-repeat;
|
||||
background-size:cover;}
|
||||
.border_bg_rightTop{
|
||||
position:absolute;
|
||||
right:-0.01rem;
|
||||
top:-0.01rem;
|
||||
width:0.1rem;
|
||||
height:0.1rem;
|
||||
display:block;
|
||||
background:url(../images/border_bg.jpg) no-repeat;
|
||||
background-size:cover;}
|
||||
.border_bg_leftBottom{
|
||||
position:absolute;
|
||||
left:-0.008rem;
|
||||
bottom:-0.008rem;
|
||||
width:0.1rem;
|
||||
height:0.1rem;
|
||||
display:block;
|
||||
background:url(../images/border_bg.jpg) no-repeat;
|
||||
background-size:cover;}
|
||||
.border_bg_rightBottom{
|
||||
position:absolute;
|
||||
right:-0.01rem;
|
||||
bottom:-0.01rem;
|
||||
width:0.08rem;
|
||||
height:0.08rem;
|
||||
display:block;
|
||||
background:url(../images/title_right_bg.png) no-repeat;
|
||||
background-size:cover;}
|
||||
|
||||
.leftMain{
|
||||
width:75%;
|
||||
float:left;
|
||||
padding-right:0.1rem;
|
||||
padding-top:0.1rem;
|
||||
}
|
||||
|
||||
.rightMain{
|
||||
width:25%;
|
||||
float:left;
|
||||
padding-top:0.1rem;}
|
||||
|
||||
.leftMain_top{
|
||||
width:100%;
|
||||
padding-bottom:0.1rem;}
|
||||
.leftMain_top ul{
|
||||
display:flex;
|
||||
display: -webkit-flex;
|
||||
}
|
||||
.leftMain_top ul li{
|
||||
float:left;
|
||||
width:25%;
|
||||
padding-right:0.1rem;}
|
||||
.leftMain_top ul li:last-child{
|
||||
padding:0;}
|
||||
.leftMain_top ul li .liIn{
|
||||
border:0.008rem solid rgba(14,253,255,0.5);
|
||||
width:100%;
|
||||
min-height:60px;
|
||||
position:relative;
|
||||
padding:0.08rem 0.05rem;
|
||||
}
|
||||
.leftMain_top ul li .liIn h3{
|
||||
font-size:0.08rem;
|
||||
color:#fff;
|
||||
margin-bottom:0.05rem;
|
||||
}
|
||||
|
||||
.leftMain_top ul li .liIn .shu{
|
||||
font-size:0.12rem;
|
||||
color:rgba(14,253,255,1);
|
||||
font-family:dig;
|
||||
margin-bottom:0.02rem;}
|
||||
.leftMain_top ul li .liIn .shu i{
|
||||
font-size:0.04rem;
|
||||
margin-left:0.06rem;
|
||||
font-style:normal;}
|
||||
.leftMain_top ul li .liIn .zi{
|
||||
font-size:0.04rem;
|
||||
color:#fff;
|
||||
position:relative;
|
||||
z-index:10;}
|
||||
.leftMain_top ul li .liIn .zi .span1{
|
||||
margin-right:0.1rem;}
|
||||
|
||||
|
||||
.leftMain_middle{
|
||||
width:100%;
|
||||
padding-bottom:0.1rem;
|
||||
display:flex;
|
||||
display: -webkit-flex;}
|
||||
|
||||
.leftMain_middle .leftMain_middle_left{
|
||||
width:60%;
|
||||
padding-right:0.1rem;}
|
||||
.leftMain_middle .leftMain_middle_left .leftMain_middle_leftIn{
|
||||
border:0.008rem solid rgba(14,253,255,0.5);
|
||||
width:100%;
|
||||
min-height:60px;
|
||||
position:relative;
|
||||
padding:0.08rem 0.05rem;
|
||||
}
|
||||
.leftMain_middle .leftMain_middle_left .leftMain_middle_leftIn h3{
|
||||
font-size:0.08rem;
|
||||
color:#fff;
|
||||
margin-bottom:0.05rem;
|
||||
}
|
||||
.leftMain_middle .leftMain_middle_left .leftMain_middle_leftIn .biaoge{
|
||||
min-height:200px;}
|
||||
|
||||
.leftMain_middle .leftMain_middle_right{
|
||||
width:40%;
|
||||
}
|
||||
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn{
|
||||
border:0.008rem solid rgba(14,253,255,0.5);
|
||||
width:100%;
|
||||
min-height:60px;
|
||||
position:relative;
|
||||
padding:0.08rem 0.05rem;
|
||||
}
|
||||
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn h3{
|
||||
font-size:0.08rem;
|
||||
color:#fff;
|
||||
margin-bottom:0.05rem;
|
||||
}
|
||||
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge{
|
||||
min-height:200px;}
|
||||
/*左边中间部分排行榜*/
|
||||
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai{
|
||||
width:100%;
|
||||
overflow:hidden;
|
||||
}
|
||||
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn{
|
||||
display:flex;
|
||||
display: -webkit-flex;
|
||||
align-items:center;
|
||||
color:#fff;
|
||||
font-size:0.06rem;
|
||||
height:0.18rem;
|
||||
}
|
||||
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn .liIn_left{
|
||||
width:25%;
|
||||
position:relative;
|
||||
padding-left:0.14rem;
|
||||
}
|
||||
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn .liIn_left .bot{
|
||||
width:0.08rem;
|
||||
height:0.08rem;
|
||||
background:#f78cf3;
|
||||
border-radius:1000px;
|
||||
display:block;
|
||||
position:absolute;
|
||||
left:0.02rem;
|
||||
top:0;
|
||||
bottom:0;
|
||||
margin:auto 0;
|
||||
}
|
||||
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn2 .liIn_left .bot{
|
||||
background:#e7feb8;}
|
||||
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn3 .liIn_left .bot{
|
||||
background:#fdea8a;}
|
||||
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn4 .liIn_left .bot{
|
||||
background:#8ff9f8;}
|
||||
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn5 .liIn_left .bot{
|
||||
background:#d890fa;}
|
||||
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn6 .liIn_left .bot{
|
||||
background:#05d1fc;}
|
||||
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn .liIn_left zi{
|
||||
}
|
||||
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn .liIn_line{
|
||||
width:58%;
|
||||
height:0.08rem;
|
||||
background:rgba(255,255,255,0.5);
|
||||
border-radius:2000px;}
|
||||
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn .liIn_line .line_lineIn{
|
||||
width:100%;
|
||||
height:0.08rem;
|
||||
background:#f78cf3;
|
||||
border-radius:100px;
|
||||
-webkit-animation: widthMove1 2s ease-in-out ;}
|
||||
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn2 .liIn_line .line_lineIn{
|
||||
background:#e7feb8;
|
||||
-webkit-animation: widthMove2 2s ease-in-out ;}
|
||||
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn3 .liIn_line .line_lineIn{
|
||||
background:#fdea8a;
|
||||
-webkit-animation: widthMove3 2s ease-in-out ;
|
||||
}
|
||||
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn4 .liIn_line .line_lineIn{
|
||||
background:#8ff9f8;
|
||||
-webkit-animation: widthMove4 2s ease-in-out ;}
|
||||
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn5 .liIn_line .line_lineIn{
|
||||
background:#d890fa;
|
||||
-webkit-animation: widthMove5 2s ease-in-out ;}
|
||||
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn6 .liIn_line .line_lineIn{
|
||||
background:#05d1fc;
|
||||
-webkit-animation: widthMove6 2s ease-in-out ;}
|
||||
@-webkit-keyframes widthMove1 {
|
||||
0% {width:0%; }
|
||||
100% { width:98.5%; }
|
||||
}
|
||||
@-webkit-keyframes widthMove2 {
|
||||
0% {width:0%; }
|
||||
100% { width:88.5%; }
|
||||
}
|
||||
@-webkit-keyframes widthMove3 {
|
||||
0% {width:0%; }
|
||||
100% { width:68.5%; }
|
||||
}
|
||||
@-webkit-keyframes widthMove4 {
|
||||
0% {width:0%; }
|
||||
100% { width:40.5%; }
|
||||
}
|
||||
@-webkit-keyframes widthMove5 {
|
||||
0% {width:0%; }
|
||||
100% { width:22.5%; }
|
||||
}
|
||||
@-webkit-keyframes widthMove6 {
|
||||
0% {width:0%; }
|
||||
100% { width:10.5%; }
|
||||
}
|
||||
|
||||
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_pai ul li .liIn .num{
|
||||
width:17%;
|
||||
font-family:dig;
|
||||
padding-left:0.02rem;}
|
||||
/*左边底部*/
|
||||
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_bi ul{
|
||||
display:flex;
|
||||
display: -webkit-flex;
|
||||
flex-wrap:wrap;
|
||||
width:100%;
|
||||
}
|
||||
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_bi ul li{
|
||||
width:33.3%;
|
||||
text-align:center;
|
||||
margin-bottom:0.05rem;}
|
||||
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_bi ul li .shu{
|
||||
font-size:0.14rem;
|
||||
color:rgba(14,253,255,1);
|
||||
font-family:dig;
|
||||
padding:0.12rem 0 0.02rem;
|
||||
font-weight:normal;}
|
||||
.leftMain_middle .leftMain_middle_right .leftMain_middle_rightIn .biaoge_bi ul li .zi{
|
||||
font-size:0.06rem;
|
||||
color:#fff;}
|
||||
/*右边部分*/
|
||||
.rightMain .rightMain_top{
|
||||
width:100%;
|
||||
padding-bottom:0.1rem;
|
||||
}
|
||||
.rightMain .rightMain_topIn{
|
||||
border:0.008rem solid rgba(14,253,255,0.5);
|
||||
width:100%;
|
||||
min-height:60px;
|
||||
position:relative;
|
||||
padding:0.08rem 0.05rem;
|
||||
}
|
||||
.rightMain .rightMain_topIn h3{
|
||||
font-size:0.08rem;
|
||||
color:#fff;
|
||||
margin-bottom:0.05rem;
|
||||
}
|
||||
.rightMain .rightMain_topIn .biaoge{
|
||||
min-height:200px;}
|
||||
|
||||
.rightMain .rightMain_bottom{
|
||||
width:100%;
|
||||
}
|
||||
.rightMain .rightMain_bottomIn{
|
||||
border:0.008rem solid rgba(14,253,255,0.5);
|
||||
width:100%;
|
||||
min-height:60px;
|
||||
position:relative;
|
||||
padding:0.08rem 0.05rem;
|
||||
}
|
||||
.rightMain .rightMain_bottomIn h3{
|
||||
font-size:0.08rem;
|
||||
color:#fff;
|
||||
margin-bottom:0.05rem;
|
||||
}
|
||||
/*右下角表格*/
|
||||
.rightMain .rightMain_bottomIn .biaoge{
|
||||
min-height:200px;}
|
||||
.rightMain .rightMain_bottomIn .biaoge_list{
|
||||
overflow:hidden;
|
||||
position: relative;}
|
||||
.rightMain .rightMain_bottomIn .biaoge_list .biaoge_listIn .ul_list{
|
||||
overflow:hidden;
|
||||
position: relative;}
|
||||
.rightMain .rightMain_bottomIn .biaoge_list .biaoge_listIn .ul_listIn{
|
||||
-webkit-animation: 14s gundong linear infinite normal;
|
||||
animation: 14s gundong linear infinite normal;
|
||||
position: relative;}
|
||||
@keyframes gundong {
|
||||
0% {
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: translate3d(0, -30vh, 0);
|
||||
transform: translate3d(0, -30vh, 0);
|
||||
}
|
||||
}
|
||||
|
||||
.rightMain .rightMain_bottomIn .biaoge_list ul{
|
||||
display:flex;
|
||||
display: -webkit-flex;
|
||||
width:100%;
|
||||
}
|
||||
.rightMain .rightMain_bottomIn .biaoge_list .ul_title{
|
||||
background: linear-gradient(left, rgba(255,255,255,0.1), rgba(255,255,255,0.5), rgba(255,255,255,0.1));
|
||||
background: -ms-linear-gradient(left, rgba(255,255,255,0.1), rgba(255,255,255,0.5), rgba(255,255,255,0.1));
|
||||
background: -webkit-linear-gradient(left, rgba(255,255,255,0.1), rgba(255,255,255,0.5), rgba(255,255,255,0.1));
|
||||
background: -moz-linear-gradient(left, rgba(255,255,255,0.1), rgba(255,255,255,0.5), rgba(255,255,255,0.1));
|
||||
}
|
||||
.rightMain .rightMain_bottomIn .biaoge_list .ul_con{
|
||||
border-bottom:0.008rem solid rgba(14,253,255,0.5);}
|
||||
.rightMain .rightMain_bottomIn .biaoge_list ul li{
|
||||
width:20%;
|
||||
text-align:center;
|
||||
color:#fff;
|
||||
font-size:0.06rem;
|
||||
height:0.2rem;
|
||||
line-height:0.2rem;}
|
||||
.rightMain .rightMain_bottomIn .biaoge_list ul li:frist-child{
|
||||
text-align:left;}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -0,0 +1,138 @@
|
||||
@charset "utf-8";
|
||||
|
||||
/* 公共区域版心宽度一样,左右居中 */
|
||||
|
||||
|
||||
/* .header-wrap {
|
||||
width: 1100px;
|
||||
height: 62px;
|
||||
margin: 0 auto;
|
||||
} */
|
||||
|
||||
.header_con {
|
||||
width: 1002px;
|
||||
height: 100px;
|
||||
/* background: pink; */
|
||||
/* 左右居中 */
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.header_con h1 {
|
||||
width: 604px;
|
||||
height: 10px;
|
||||
/* background: orange; */
|
||||
float: left;
|
||||
padding: 34px 0 0 20px;
|
||||
}
|
||||
|
||||
.header_con form {
|
||||
width: 227px;
|
||||
height: 61px;
|
||||
/* background: orangered; */
|
||||
float: left;
|
||||
padding-top: 39px;
|
||||
padding-right: 21px;
|
||||
}
|
||||
|
||||
.header_con .search {
|
||||
width: 195px;
|
||||
height: 26px;
|
||||
background: #f1f1f1;
|
||||
border: 1px solid #e5e5e5;
|
||||
/* 清除右侧边框 */
|
||||
border-right: none;
|
||||
float: left;
|
||||
color: #888888;
|
||||
}
|
||||
|
||||
.header_con .btn {
|
||||
width: 30px;
|
||||
height: 26px;
|
||||
border: none;
|
||||
background: #f1f1f1 url("../images/search_03.jpg") no-repeat center;
|
||||
}
|
||||
|
||||
.header_con form div {
|
||||
width: 30px;
|
||||
height: 26px;
|
||||
border: 1px solid #e5e5e5;
|
||||
border-left: none;
|
||||
float: left;
|
||||
/* 给btn套盒子的时候也要加浮动 */
|
||||
}
|
||||
|
||||
#nav {
|
||||
height: 58px;
|
||||
background: black;
|
||||
}
|
||||
|
||||
#nav .nav_con {
|
||||
width: 1002px;
|
||||
height: 58px;
|
||||
background: black;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
|
||||
/* 导航横向排列 */
|
||||
|
||||
#nav .nav_con li {
|
||||
width: 498px;
|
||||
height: 58px;
|
||||
float: left;
|
||||
background: black;
|
||||
/* 左右居中 */
|
||||
text-align: center;
|
||||
/* 上下居中 */
|
||||
line-height: 58px;
|
||||
border-left: 1px solid #4a4a4a;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.nav_con li a {
|
||||
color: white;
|
||||
}
|
||||
|
||||
.margin-left {
|
||||
margin-left: 25px;
|
||||
border-left: none!important;
|
||||
}
|
||||
|
||||
|
||||
/* 公共样式的footer */
|
||||
|
||||
.footer_con {
|
||||
height: 82px;
|
||||
/* background: #cccccc; */
|
||||
}
|
||||
|
||||
.footer_con .footer_l {
|
||||
height: 58px;
|
||||
float: left;
|
||||
/* background: red; */
|
||||
padding-top: 24px;
|
||||
}
|
||||
|
||||
.footer_con .footer_l a {
|
||||
font-size: 12px;
|
||||
float: left;
|
||||
color: #868686;
|
||||
border-right: 1px solid #868686;
|
||||
/* padding:字体和边框的距离哈 */
|
||||
padding: 0 7px;
|
||||
padding-left: 15px;
|
||||
}
|
||||
|
||||
.footer_con .footer_l .footer-right {
|
||||
border-right: none!important;
|
||||
}
|
||||
|
||||
.footer_con .footer_r {
|
||||
height: 57px;
|
||||
color: #8a8a8a;
|
||||
font-size: 12px;
|
||||
padding-top: 25px;
|
||||
/* background: pink; */
|
||||
padding-right: 21px;
|
||||
float: right;
|
||||
}
|
@ -0,0 +1,93 @@
|
||||
.loader {
|
||||
background: #000;
|
||||
background: radial-gradient(#222, #000);
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
overflow: hidden;
|
||||
position: fixed;
|
||||
right: 0;
|
||||
top: 0;
|
||||
z-index: 99999;
|
||||
}
|
||||
|
||||
.loader-inner {
|
||||
bottom: 0;
|
||||
height: 60px;
|
||||
left: 0;
|
||||
margin: auto;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
width: 100px;
|
||||
}
|
||||
|
||||
.loader-line-wrap {
|
||||
animation:
|
||||
spin 2000ms cubic-bezier(.175, .885, .32, 1.275) infinite
|
||||
;
|
||||
box-sizing: border-box;
|
||||
height: 50px;
|
||||
left: 0;
|
||||
overflow: hidden;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
transform-origin: 50% 100%;
|
||||
width: 100px;
|
||||
}
|
||||
.loader-line {
|
||||
border: 4px solid transparent;
|
||||
border-radius: 100%;
|
||||
box-sizing: border-box;
|
||||
height: 100px;
|
||||
left: 0;
|
||||
margin: 0 auto;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
width: 100px;
|
||||
}
|
||||
.loader-line-wrap:nth-child(1) { animation-delay: -50ms; }
|
||||
.loader-line-wrap:nth-child(2) { animation-delay: -100ms; }
|
||||
.loader-line-wrap:nth-child(3) { animation-delay: -150ms; }
|
||||
.loader-line-wrap:nth-child(4) { animation-delay: -200ms; }
|
||||
.loader-line-wrap:nth-child(5) { animation-delay: -250ms; }
|
||||
|
||||
.loader-line-wrap:nth-child(1) .loader-line {
|
||||
border-color: hsl(0, 80%, 60%);
|
||||
height: 90px;
|
||||
width: 90px;
|
||||
top: 7px;
|
||||
}
|
||||
.loader-line-wrap:nth-child(2) .loader-line {
|
||||
border-color: hsl(60, 80%, 60%);
|
||||
height: 76px;
|
||||
width: 76px;
|
||||
top: 14px;
|
||||
}
|
||||
.loader-line-wrap:nth-child(3) .loader-line {
|
||||
border-color: hsl(120, 80%, 60%);
|
||||
height: 62px;
|
||||
width: 62px;
|
||||
top: 21px;
|
||||
}
|
||||
.loader-line-wrap:nth-child(4) .loader-line {
|
||||
border-color: hsl(180, 80%, 60%);
|
||||
height: 48px;
|
||||
width: 48px;
|
||||
top: 28px;
|
||||
}
|
||||
.loader-line-wrap:nth-child(5) .loader-line {
|
||||
border-color: hsl(240, 80%, 60%);
|
||||
height: 34px;
|
||||
width: 34px;
|
||||
top: 35px;
|
||||
}
|
||||
|
||||
@keyframes spin {
|
||||
0%, 15% {
|
||||
transform: rotate(0);
|
||||
}
|
||||
100% {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
@ -0,0 +1,76 @@
|
||||
@charset "utf-8";
|
||||
|
||||
/* 重置样式表 */
|
||||
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
|
||||
/* 统一页面文本 */
|
||||
|
||||
body {
|
||||
font-size: 16px;
|
||||
font-family: "微软雅黑";
|
||||
}
|
||||
|
||||
|
||||
/* 清除列表符号 */
|
||||
|
||||
ul,
|
||||
ol,
|
||||
li {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
|
||||
/* 清除下划线 */
|
||||
|
||||
u,
|
||||
a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
|
||||
/* 清除倾斜 */
|
||||
|
||||
i,
|
||||
em {
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
|
||||
/* 清除加粗 */
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
|
||||
/* 清除文本默认大小和加粗 */
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
font-size: 16px;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
|
||||
/* 边框清零 */
|
||||
|
||||
img {
|
||||
border: none;
|
||||
}
|
||||
|
||||
|
||||
/* 清除聚焦时候的边框 */
|
||||
|
||||
input {
|
||||
outline: none;
|
||||
}
|
@ -0,0 +1,64 @@
|
||||
body{
|
||||
background: url("ab.jpg") no-repeat center;
|
||||
background-size: cover;
|
||||
height: 100vh;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.login{
|
||||
color: #988fc7;
|
||||
float: right;
|
||||
width: 100px;
|
||||
height: 40px;
|
||||
border-radius: 50%;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
transition: 0.4s;
|
||||
}
|
||||
|
||||
.search-box{
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%,-50%);
|
||||
background:#2f3640;
|
||||
height: 38px;
|
||||
border-radius: 60px;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.search-box:hover > .search-txt{
|
||||
width: 240px;
|
||||
padding: 0 6px;
|
||||
}
|
||||
|
||||
.search-box:hover > .search-btn{
|
||||
background: white;
|
||||
}
|
||||
|
||||
.search-btn{
|
||||
color: #988fc7;
|
||||
float: right;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
border-radius: 50%;
|
||||
background: #2f3640;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
transition: 0.4s;
|
||||
}
|
||||
|
||||
.search-txt{
|
||||
border:none;
|
||||
background: none;
|
||||
outline: none;
|
||||
float: left;
|
||||
padding: 0;
|
||||
color: white;
|
||||
font-size: 16px;
|
||||
transition: 0.4s;
|
||||
line-height: 40px;
|
||||
width: 0px;
|
||||
}
|
||||
|
After Width: | Height: | Size: 25 KiB |
After Width: | Height: | Size: 6.3 KiB |
After Width: | Height: | Size: 84 KiB |
After Width: | Height: | Size: 1.2 MiB |
After Width: | Height: | Size: 255 KiB |
After Width: | Height: | Size: 1006 B |
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 2.8 KiB |
@ -0,0 +1,275 @@
|
||||
/*
|
||||
*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
export * from './src/echarts';
|
||||
export * from './src/export';
|
||||
|
||||
import './src/component/dataset';
|
||||
|
||||
|
||||
|
||||
// ----------------------------------------------
|
||||
// All of the modules that are allowed to be
|
||||
// imported are listed below.
|
||||
//
|
||||
// Users MUST NOT import other modules that are
|
||||
// not included in this list.
|
||||
// ----------------------------------------------
|
||||
|
||||
|
||||
|
||||
// ----------------
|
||||
// Charts (series)
|
||||
// ----------------
|
||||
|
||||
|
||||
|
||||
// All of the series types, for example:
|
||||
// chart.setOption({
|
||||
// series: [{
|
||||
// type: 'line' // or 'bar', 'pie', ...
|
||||
// }]
|
||||
// });
|
||||
|
||||
import './src/chart/bar';
|
||||
import './src/chart/boxplot';
|
||||
import './src/chart/candlestick';
|
||||
import './src/chart/custom';
|
||||
import './src/chart/effectScatter';
|
||||
import './src/chart/funnel';
|
||||
import './src/chart/gauge';
|
||||
import './src/chart/graph';
|
||||
import './src/chart/heatmap';
|
||||
import './src/chart/line';
|
||||
import './src/chart/lines';
|
||||
import './src/chart/map';
|
||||
import './src/chart/parallel';
|
||||
import './src/chart/pictorialBar';
|
||||
import './src/chart/pie';
|
||||
import './src/chart/radar';
|
||||
import './src/chart/sankey';
|
||||
import './src/chart/scatter';
|
||||
import './src/chart/sunburst';
|
||||
import './src/chart/themeRiver';
|
||||
import './src/chart/tree';
|
||||
import './src/chart/treemap';
|
||||
|
||||
|
||||
|
||||
// -------------------
|
||||
// Coordinate systems
|
||||
// -------------------
|
||||
|
||||
|
||||
|
||||
// All of the axis modules have been included in the
|
||||
// coordinate system module below, do not need to
|
||||
// make extra import.
|
||||
|
||||
// `cartesian` coordinate system. For some historical
|
||||
// reasons, it is named as grid, for example:
|
||||
// chart.setOption({
|
||||
// grid: {...},
|
||||
// xAxis: {...},
|
||||
// yAxis: {...},
|
||||
// series: [{...}]
|
||||
// });
|
||||
import './src/component/grid';
|
||||
|
||||
// `polar` coordinate system, for example:
|
||||
// chart.setOption({
|
||||
// polar: {...},
|
||||
// radiusAxis: {...},
|
||||
// angleAxis: {...},
|
||||
// series: [{
|
||||
// coordinateSystem: 'polar'
|
||||
// }]
|
||||
// });
|
||||
import './src/component/polar';
|
||||
|
||||
// `geo` coordinate system, for example:
|
||||
// chart.setOption({
|
||||
// geo: {...},
|
||||
// series: [{
|
||||
// coordinateSystem: 'geo'
|
||||
// }]
|
||||
// });
|
||||
import './src/component/geo';
|
||||
|
||||
// `singleAxis` coordinate system (notice, it is a coordinate system
|
||||
// with only one axis, work for chart like theme river), for example:
|
||||
// chart.setOption({
|
||||
// singleAxis: {...}
|
||||
// series: [{type: 'themeRiver', ...}]
|
||||
// });
|
||||
import './src/component/singleAxis';
|
||||
|
||||
// `parallel` coordinate system, only work for parallel series, for example:
|
||||
// chart.setOption({
|
||||
// parallel: {...},
|
||||
// parallelAxis: [{...}, ...],
|
||||
// series: [{
|
||||
// type: 'parallel'
|
||||
// }]
|
||||
// });
|
||||
import './src/component/parallel';
|
||||
|
||||
// `calendar` coordinate system. for example,
|
||||
// chart.setOptionp({
|
||||
// calendar: {...},
|
||||
// series: [{
|
||||
// coordinateSystem: 'calendar'
|
||||
// }]
|
||||
// );
|
||||
import './src/component/calendar';
|
||||
|
||||
|
||||
|
||||
// ------------------
|
||||
// Other components
|
||||
// ------------------
|
||||
|
||||
|
||||
|
||||
// `graphic` component, for example:
|
||||
// chart.setOption({
|
||||
// graphic: {...}
|
||||
// });
|
||||
import './src/component/graphic';
|
||||
|
||||
// `toolbox` component, for example:
|
||||
// chart.setOption({
|
||||
// toolbox: {...}
|
||||
// });
|
||||
import './src/component/toolbox';
|
||||
|
||||
// `tooltip` component, for example:
|
||||
// chart.setOption({
|
||||
// tooltip: {...}
|
||||
// });
|
||||
import './src/component/tooltip';
|
||||
|
||||
// `axisPointer` component, for example:
|
||||
// chart.setOption({
|
||||
// tooltip: {axisPointer: {...}, ...}
|
||||
// });
|
||||
// Or
|
||||
// chart.setOption({
|
||||
// axisPointer: {...}
|
||||
// });
|
||||
import './src/component/axisPointer';
|
||||
|
||||
// `brush` component, for example:
|
||||
// chart.setOption({
|
||||
// brush: {...}
|
||||
// });
|
||||
// Or
|
||||
// chart.setOption({
|
||||
// tooltip: {feature: {brush: {...}}
|
||||
// })
|
||||
import './src/component/brush';
|
||||
|
||||
// `title` component, for example:
|
||||
// chart.setOption({
|
||||
// title: {...}
|
||||
// });
|
||||
import './src/component/title';
|
||||
|
||||
// `timeline` component, for example:
|
||||
// chart.setOption({
|
||||
// timeline: {...}
|
||||
// });
|
||||
import './src/component/timeline';
|
||||
|
||||
// `markPoint` component, for example:
|
||||
// chart.setOption({
|
||||
// series: [{markPoint: {...}}]
|
||||
// });
|
||||
import './src/component/markPoint';
|
||||
|
||||
// `markLine` component, for example:
|
||||
// chart.setOption({
|
||||
// series: [{markLine: {...}}]
|
||||
// });
|
||||
import './src/component/markLine';
|
||||
|
||||
// `markArea` component, for example:
|
||||
// chart.setOption({
|
||||
// series: [{markArea: {...}}]
|
||||
// });
|
||||
import './src/component/markArea';
|
||||
|
||||
// `legend` component scrollable, for example:
|
||||
// chart.setOption({
|
||||
// legend: {type: 'scroll'}
|
||||
// });
|
||||
import './src/component/legendScroll';
|
||||
|
||||
// `legend` component not scrollable. for example:
|
||||
// chart.setOption({
|
||||
// legend: {...}
|
||||
// });
|
||||
import './src/component/legend';
|
||||
|
||||
// `dataZoom` component including both `dataZoomInside` and `dataZoomSlider`.
|
||||
import './src/component/dataZoom';
|
||||
|
||||
// `dataZoom` component providing drag, pinch, wheel behaviors
|
||||
// inside coodinate system, for example:
|
||||
// chart.setOption({
|
||||
// dataZoom: {type: 'inside'}
|
||||
// });
|
||||
import './src/component/dataZoomInside';
|
||||
|
||||
// `dataZoom` component providing a slider bar, for example:
|
||||
// chart.setOption({
|
||||
// dataZoom: {type: 'slider'}
|
||||
// });
|
||||
import './src/component/dataZoomSlider';
|
||||
|
||||
// `dataZoom` component including both `visualMapContinuous` and `visualMapPiecewise`.
|
||||
import './src/component/visualMap';
|
||||
|
||||
// `visualMap` component providing continuous bar, for example:
|
||||
// chart.setOption({
|
||||
// visualMap: {type: 'continuous'}
|
||||
// });
|
||||
import './src/component/visualMapContinuous';
|
||||
|
||||
// `visualMap` component providing pieces bar, for example:
|
||||
// chart.setOption({
|
||||
// visualMap: {type: 'piecewise'}
|
||||
// });
|
||||
import './src/component/visualMapPiecewise';
|
||||
|
||||
|
||||
|
||||
// -----------------
|
||||
// Render engines
|
||||
// -----------------
|
||||
|
||||
|
||||
|
||||
// Provide IE 6,7,8 compatibility.
|
||||
import 'zrender/src/vml/vml';
|
||||
|
||||
// Render via SVG rather than canvas.
|
||||
import 'zrender/src/svg/svg';
|
||||
|