Authored by 鲁尚清

Merge branch 'master-500-dev' of http://192.168.1.136:82/monitor_v3/hg-monitor-w…

…eb into master-500-dev-lushangqing
Showing 38 changed files with 1843 additions and 1175 deletions
... ... @@ -246,18 +246,22 @@ layui.define(['table', 'form', 'admin', 'layer', 'common', 'sessions', 'xmSelect
//监听ckecked选中事件
table.on('checkbox(reslist_resListTable)', function (obj) {
var reslist = [];
if (obj.checked == true) {
if (obj.type == 'one' && resListSelectIds.indexOf(obj.data.resId) === -1) {//勾选单条
resListSelectIds.push(obj.data.resId);
reslist.push(obj.data);
}
if (obj.type == 'all') {//勾选全部
for (var i = 0; i < table_data.length; i++) {
reslist.push(table_data[i]);
if (resListSelectIds.indexOf(obj.data.resId) === -1) {
resListSelectIds.push(table_data[i].resId);
}
}
}
} else {
reslist.push(obj.data);
if (obj.type == 'one') {
for (var i = 0; i < resListSelectIds.length; i++) {
if (resListSelectIds[i] == obj.data.resId) {
... ... @@ -281,7 +285,7 @@ layui.define(['table', 'form', 'admin', 'layer', 'common', 'sessions', 'xmSelect
// 跨域发送信息,不能删除
obj.data["checked"] = obj.checked;
window.top.postMessage({res: obj.data}, "*");
window.top.postMessage({res: reslist}, "*");
})
... ...
... ... @@ -95,7 +95,8 @@ layui.define(['table', 'form', 'laydate', 'treeTable', 'admin', 'layer', 'laytpl
templet: '<div><span role-data-edit="{{d.id}}" data-name="{{d.name}}" ' +
'data-code="{{d.code}}" data-remark="{{d.remark}}" class="layui-table-link">{{d.name}}</span></div>'
}
, {field: 'userNames', title: '角色用户', align: 'left', width: '25%'}
, {field: 'code', title: '编码', align: 'left', width: '10%'}
, {field: 'userNames', title: '角色用户', align: 'left', width: '20%'}
, {field: 'remark', title: '角色描述', align: 'left',}
, {
field: 'updateTime',
... ...
... ... @@ -734,7 +734,6 @@ layui.extend({
tryFunc();
})
layui.pageTips.ajaxSetupInit();
//对外输出
exports('index', {
... ...
... ... @@ -83,8 +83,6 @@ layui.define(['laytpl', 'layer'], function (exports) {
options.data = options.data || {};
options.headers = options.headers || {};
layui.pageTips.viewReqHeader(options);
//
if (request.tokenName) {
var sendData = typeof options.data === 'string'
? JSON.parse(options.data)
... ...
... ... @@ -26,113 +26,113 @@ layui.define(['element', 'admin', 'view'], function (exports) {
hashChane: function () {
var that = this;
// window.onload = function () {
// // 绑定事件
// that.bindElemClickEvent();
// }
window.onload = function (){
// 绑定事件
that.bindElemClickEvent();
}
// debugger
var hash = window.top.location.hash;
sessionStorage.setItem("pagePath", hash);
sessionStorage.setItem("batchNo", that.getOperateUUID());
// sessionStorage.setItem("pagePath", hash);
// sessionStorage.setItem("batchNo", that.getOperateUUID());
if (hash == '#/') {
sessionStorage.setItem("pageName", "首页");
sessionStorage.setItem("menuName", "首页");
sessionStorage.setItem("menuPath", "");
sessionStorage.setItem("groupId",that.getOperateUUID());
// sessionStorage.setItem("pageName", "首页");
// sessionStorage.setItem("menuName", "首页");
// sessionStorage.setItem("menuPath", "");
// sessionStorage.setItem("groupId", that.getOperateUUID());
that.saveMenuLog("首页", "/")
return;
} else if (hash == '#/user/login/redirect=%2F') {
sessionStorage.setItem("pageName", "登录");
return;
}
//
//
// var url = [];
// window.top.location.hash.split('/').map(function (v) {
// if (v.indexOf('=') == -1 && v != '#' && v != '') {
// url.push(v);
// return v;
// }
// return '';
// })
//
// if (url.length > 0) {
// $.ajax({
// url: setter.views + url.join('/') + setter.engine,
// async: false,
// success(res) {
// var html = '<div>' + res + '</div>';
// var elemTitle = $(html).find('title')
// , title = elemTitle.text() || (html.match(/\<title\>([\s\S]*)\<\/title>/) || [])[1];
// sessionStorage.setItem("pageName", title);
// }
// });
// }
},
var url = [];
window.top.location.hash.split('/').map(function (v) {
if (v.indexOf('=') == -1 && v != '#' && v != '') {
url.push(v);
return v;
}
return '';
})
// /**
// * hash变更
// */
// viewReqHeader: function (options) {
// options.headers['batchNo'] = this.getPath("batchNo");
// options.headers['groupId'] = this.getPath("groupId");
// options.headers['intervalFunc'] = this.getPath("intervalFunc");
// options.headers['pagePath'] = this.getPath("pagePath");
// options.headers['pageName'] = this.getEncodeName('pageName'); //encodeURIComponent(sessionStorage.getItem("pageName"))
//
// options.headers['menuPath'] = this.getPath("menuPath")
// options.headers['menuName'] = this.getEncodeName('menuName'); //encodeURIComponent(sessionStorage.getItem("menuName"))
//
// options.headers['buttonPath'] = this.getPath("buttonPath")
// options.headers['buttonName'] = this.getEncodeName('buttonName'); //encodeURIComponent(sessionStorage.getItem("buttonName"))
// },
if (url.length > 0) {
$.ajax({
url: setter.views + url.join('/') + setter.engine,
async: false,
success(res) {
var html = '<div>' + res + '</div>';
var elemTitle = $(html).find('title')
, title = elemTitle.text() || (html.match(/\<title\>([\s\S]*)\<\/title>/) || [])[1];
sessionStorage.setItem("pageName", title);
}
});
}
// ajaxSetupInit: function () {
//
// // 清空按钮名称
// sessionStorage.setItem("buttonPath", "");
// sessionStorage.setItem("buttonName", "");
//
// $.ajaxSetup({
// headers: {
// batchNo: this.getPath("batchNo"),
// groupId: this.getPath("groupId"),
// intervalFunc: this.getPath("IntervalFunc"),
// pagePath: this.getPath("pagePath"),
// pageName: this.getEncodeName('pageName'),// encodeURIComponent(sessionStorage.getItem(sessionStorage.getItem("pageName"))),
//
// menuPath: this.getPath("menuPath"),
// menuName: this.getEncodeName('menuName'),//encodeURIComponent(sessionStorage.getItem("menuName")),
//
// buttonPath: this.getPath("buttonPath"),
// buttonName: this.getEncodeName('buttonName'),//encodeURIComponent(sessionStorage.getItem("buttonName"))
// }
// });
// },
},
/**
* hash变更
* 定时刷新任务
* @constructor
*/
viewReqHeader: function (options) {
options.headers['batchNo'] = this.getPath("batchNo");
options.headers['groupId'] = this.getPath("groupId");
options.headers['pagePath'] = this.getPath("pagePath");
options.headers['pageName'] = this.getEncodeName('pageName'); //encodeURIComponent(sessionStorage.getItem("pageName"))
options.headers['menuPath'] = this.getPath("menuPath")
options.headers['menuName'] = this.getEncodeName('menuName'); //encodeURIComponent(sessionStorage.getItem("menuName"))
options.headers['buttonPath'] = this.getPath("buttonPath")
options.headers['buttonName'] = this.getEncodeName('buttonName'); //encodeURIComponent(sessionStorage.getItem("buttonName"))
},
ajaxSetupInit: function () {
// sessionStorage.setItem("batchNo", "");
// sessionStorage.setItem("groupId", "");
//
// // 清空按钮名称
// sessionStorage.setItem("pagePath", "");
// sessionStorage.setItem("pageName", "");
// // 清空按钮名称
// sessionStorage.setItem("menuPath", "");
// sessionStorage.setItem("pageName", "");
// 清空按钮名称
sessionStorage.setItem("buttonPath", "");
sessionStorage.setItem("buttonName", "");
$.ajaxSetup({
headers: {
batchNo: this.getPath("batchNo"),
groupId: this.getPath("groupId"),
pagePath: this.getPath("pagePath"),
pageName: this.getEncodeName('pageName'),// encodeURIComponent(sessionStorage.getItem(sessionStorage.getItem("pageName"))),
menuPath: this.getPath("menuPath"),
menuName: this.getEncodeName('menuName'),//encodeURIComponent(sessionStorage.getItem("menuName")),
buttonPath: this.getPath("buttonPath"),
buttonName: this.getEncodeName('buttonName'),//encodeURIComponent(sessionStorage.getItem("buttonName"))
}
});
IntervalFunc: (isAuto) => {
sessionStorage.setItem("IntervalFunc", isAuto);
},
getPath:(key)=>{
getPath: (key) => {
var val = sessionStorage.getItem(key);
if(val){
if (val) {
return val;
}
return '';
},
getEncodeName:(key)=>{
getEncodeName: (key) => {
var val = sessionStorage.getItem(key);
if(val){
if (val) {
return encodeURIComponent(val);
}
return '';
... ... @@ -141,7 +141,7 @@ layui.define(['element', 'admin', 'view'], function (exports) {
/**
* 获取操作
*/
getOperateUUID:() => {
getOperateUUID: () => {
return window.generateUUID().replace(/-/g, "") + (new Date()).getTime();
},
... ... @@ -157,7 +157,7 @@ layui.define(['element', 'admin', 'view'], function (exports) {
// 绑定菜单点击事件
that.bindMenuClickEvent();
// 绑定元素点击事件
that.bindElemClickEvent();
// that.bindElemClickEvent();
// console.log("日志事件注册完成!")
}, 500)
... ... @@ -224,22 +224,7 @@ layui.define(['element', 'admin', 'view'], function (exports) {
}
})
},
// /**
// * ajax掉接口之前传参
// * @author lsq
// * @date 2022-08-18
// * */
// sendAjaxData(menuPath, elementName) {
// let name = encodeURIComponent(elementName);
//
// $.ajaxSetup({
// headers: {
// menuPath: obj.getCurrentHash(),
// elementName: name
// }
//
// });
// },
/**
* 左侧菜单,鼠标点击事件
*/
... ... @@ -299,13 +284,17 @@ layui.define(['element', 'admin', 'view'], function (exports) {
//菜单点击传入属性lay-href的值,普通元素传入当前页面路由
if (flg) {
// 清空按钮名称
sessionStorage.setItem("buttonPath", "");
sessionStorage.setItem("buttonName", "");
// sessionStorage.setItem("buttonPath", "");
// sessionStorage.setItem("buttonName", "");
//
// sessionStorage.setItem("groupId", that.getOperateUUID());
// //that.sendAjaxData(layHref, text)
// sessionStorage.setItem("menuName", text);
// sessionStorage.setItem("menuPath", layHref);
that.saveMenuLog(text, layHref)
sessionStorage.setItem("groupId",that.getOperateUUID());
//that.sendAjaxData(layHref, text)
sessionStorage.setItem("menuName", text);
sessionStorage.setItem("menuPath", layHref);
} else {
let locationPath = location.hash;
let pathArr = locationPath.split("#/");
... ... @@ -314,68 +303,58 @@ layui.define(['element', 'admin', 'view'], function (exports) {
path = pathArr[1]
}
// that.sendAjaxData(path, text)
sessionStorage.setItem("buttonName", text);
sessionStorage.setItem("buttonPath", layHref);
// sessionStorage.setItem("buttonName", text);
// sessionStorage.setItem("buttonPath", layHref);
}
},
/**
* 页面其他元素绑定事件
* @author lsq
* @date 2022-08-11
*/
clickEventHandle(thisObj, key) {
let that = this;
sessionStorage.setItem("groupId",that.getOperateUUID());
let layHref = thisObj.attr('lay-href') ? thisObj.attr('lay-href') : '';
sessionStorage.setItem("buttonName", thisObj.text());
sessionStorage.setItem("buttonPath", layHref);
//绑定事件时增加一个class防止多次绑定事件
// thisObj.addClass("on_fn");
// that.pushArrNoRepeat(thisObj);
// // 把点击的元素按顺序展示
// let handleStr = '';
// let menuStrArr = [];
// let menuStrArrSecond = [];
// that.data.handleLog.map(item => {
// if (item.menuType) {
// menuStrArr.push(item.text)
// } else {
// menuStrArrSecond.push(item.text)
// }
// })
// if (menuStrArr.length > 0) {
// handleStr = menuStrArr.join('->');
// }
// if (menuStrArrSecond.length > 0) {
// handleStr += '->' + menuStrArrSecond.join(',');
// }
saveMenuLog(name, href) {
if (href && href != '') {
// 菜单请求日志
admin.req({
url: domainName + `/api-web/setGroupName?name=${name}&url=${href}`
, method: 'GET'
, async: true
, success: function (res) {
}
})
}
},
// /**
// * 页面其他元素绑定事件
// * @author lsq
// * @date 2022-08-11
// */
// clickEventHandle(thisObj, key) {
// let that = this;
// sessionStorage.setItem("groupId", that.getOperateUUID());
// sessionStorage.setItem("IntervalFunc", '0');
//
// let layHref = thisObj.attr('lay-href') ? thisObj.attr('lay-href') : '';
// let title = thisObj.attr('title') == '点击鼠标右键查看功能点描述信息' ? '' : thisObj.attr('title');
//
// let btnName = thisObj.text() ? thisObj.text() : title;
// sessionStorage.setItem("buttonName", btnName);
// sessionStorage.setItem("buttonPath", layHref);
// },
/**
* 页面其他元素绑定事件
* @author lsq
* @date 2022-08-11
*/
bindElemClickEvent() {
let that = this;
var eventKeys = ['button', '[data-bizid]', '.layui-table-link', '[data-zymc]', '[data-busid]','.layui-tree-txt','.layui-cols-items'];
eventKeys.map(item => {
// if (!$(item).hasClass("on_fn")) {
// console.log(`${item}元素点击事件绑定完成!`)
// $(item).unbind('click.handle').on('click.handle', (function (e) {
// e.preventDefault();
// that.clickEventHandle($(this), item)
// }))
// }
setTimeout(function (){
// console.log(`${item}元素点击事件绑定完成!`)
$(item).unbind('click.handle').on('click.handle', (function (e) {
e.preventDefault();
that.clickEventHandle($(this), item)
}))
},500)
})
// let that = this;
// var eventKeys = ['button', '[data-bizid]', '.layui-table-link', '[data-zymc]', '[data-busid]', '.layui-tree-txt', '.layui-cols-items'];
// eventKeys.map(item => {
// setTimeout(function () {
// // console.log(`${item}元素点击事件绑定完成!`)
// $(item).unbind('click.handle').on('click.handle', (function (e) {
// e.preventDefault();
// that.clickEventHandle($(this), item)
// }))
// }, 500)
// })
},
/**
* 绑定鼠标右键事件
... ...
<title>操作日志</title>
<title>操作日志统计</title>
<iframe class="layadmin-iframe" src="/vue3/index.html#/vue3/operationLog" style="height: 99.5%!important;"/>
... ...
<title>我的操作日志</title>
<iframe class="layadmin-iframe" src="/vue3/index.html#/vue3/operationLog/userList" style="height: 99.5%!important;"/>
... ...
... ... @@ -5,6 +5,7 @@
<link href="public/shui.png" rel="icon"/>
<meta content="width=device-width, initial-scale=1.0" name="viewport">
<title>智能综合监控平台</title>
<script src="public/lib/polyfill/polyfill.min.js"></script>
<script src="public/lib/vue/vue.global.prod.js"></script>
<script src="public/lib/vue/vue-router.global.prod.js"></script>
<script src="public/lib/vue/vuex.global.prod.js"></script>
... ... @@ -16,7 +17,7 @@
<link href="public/lib/vant/index.css" rel="stylesheet">
<script src="public/lib/vant/vant.min.js"></script>
<script src="public/lib/axios/axios.min.js"></script>
<!-- <script src="public/lib/dayjs/dayjs.min.js"></script> -->
<script src="public/lib/dayjs/dayjs.min.js"></script>
<script src="public/lib/jquery/jquery.min.js"></script>
<script src="public/lib/echarts/echarts.min.js"></script>
... ...
... ... @@ -11,8 +11,6 @@
@import "../css/cmdbdatasync.css";
/*登录logo配置*/
@import "../css/logoConfig.css";
/*lsq 操作记录日志样式 2022-09-26*/
@import "../css/operationLog.css";
.d-flex {
display: flex;
... ... @@ -33,14 +31,14 @@
/*最外层样式*/
.container {
background-color: #CCCCCC;
padding: 3px 3px;
width: calc(100% - 10px);
padding: 0px 0px;
width: calc(100% - 6px);
}
.container .cm-card {
overflow-y: auto;
background: white;
border-radius: 3px
border-radius: 3px;
}
.container .cm-card .search {
... ... @@ -63,13 +61,16 @@
margin-bottom: 3px !important;
/*width: 250px !important;*/
}
/*lsq esData下的搜索条件栏样式调整 2022-06-27*/
.container .cm-card .search .condition.esData-conditon div {
margin-bottom: 0px !important;
}
.container .cm-card .search .condition.esData-conditon{
.container .cm-card .search .condition.esData-conditon {
margin-bottom: 3px;
}
.container .cm-card .search .btns {
width: 200px;
display: flex;
... ... @@ -82,6 +83,74 @@
padding: 0px 6px;
}
/* 盒子样式 */
.m-6 {
margin: 6px;
}
.m-l-6 {
margin-left: 6px;
}
.m-r-6 {
margin-right: 6px;
}
.m-t-6 {
margin-top: 6px;
}
.m-b-6 {
margin-top: 6px;
}
.p-6 {
padding: 6px;
}
.p-l-6 {
padding-left: 6px;
}
.p-r-6 {
padding-right: 6px;
}
.p-t-6 {
padding-top: 6px;
}
.p-b-6 {
padding-top: 6px;
}
.p-l-3 {
padding-left: 3px;
}
.p-r-3 {
padding-right: 3px;
}
.page-item{
padding: 0px 10px
}
.page-item-title-h3 {
text-align: left;
color: #2b9eef;
padding-left: 6px;
}
.page-item-content {
position: relative;
cursor: default;
border: 1px solid rgb(228, 228, 228);
-webkit-tap-highlight-color: transparent;
user-select: none;
margin: 6px;
padding: 6px;
}
/*
共通弹框配置样式
custom-class="config-dialog"
... ... @@ -161,30 +230,37 @@ custom-class="config-dialog"
.tree-table .el-table .el-table__cell.is-center div {
justify-content: center;
}
/*lsq 资产视图下搜索栏样式调整 2022-06-27*/
.resList-form.el-form--inline .el-form-item{
.resList-form.el-form--inline .el-form-item {
align-items: center;
margin-right:6px;
margin-right: 6px;
}
/*lsq ping详情页面中搜索栏的样式调整 2022-06-28*/
.container .cm-card .search .condition.ping div{
.container .cm-card .search .condition.ping div {
margin-bottom: 0px !important;
}
.container .cm-card .search .condition.ping{
.container .cm-card .search .condition.ping {
margin-bottom: 6px;
}
/*lsq elementUI的滚动条样式修改 2022-06-28*/
.el-scrollbar__bar.is-vertical {
width:15px;
top:0px;
width: 15px;
top: 0px;
}
.el-scrollbar__bar.is-horizontal {
height: 15px;
left:0px;
left: 0px;
}
.el-scrollbar__thumb,.el-scrollbar__thumb:hover {
.el-scrollbar__thumb, .el-scrollbar__thumb:hover {
border-radius: 0px;
background-color: #CCCCCC;
opacity: 1;
width:10px;.el-scrollbar__bar.is-horizontal>div
}
\ No newline at end of file
width: 10px;
. el-scrollbar__bar . is-horizontal > div
}
... ...
.operation-log-search{
display: flex;
align-items: center;
justify-content: center;
margin-top:6px;
}
.container-none{
width:100%;
height: 20px;
background:#fafafa;
}
.operation-log-container.container .cm-card .search-table{padding:15px;}
.echart-con{
padding:10px;
}
.echart-con .echart-title{
font-size: 16px;
color:#1e9fff;
text-align: left;
margin-bottom: 6px;
padding:10px;
}
.echart-left,.echart-right{
border:1px solid #eee;
}
.echart-chart{
height: 300px;
}
\ No newline at end of file
/* Logo 字体 */
@font-face {
font-family: "iconfont logo";
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
font-family: "iconfont logo";
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
}
.logo {
font-family: "iconfont logo";
font-size: 160px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
font-family: "iconfont logo";
font-size: 160px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/* tabs */
.nav-tabs {
position: relative;
position: relative;
}
.nav-tabs .nav-more {
position: absolute;
right: 0;
bottom: 0;
height: 42px;
line-height: 42px;
color: #666;
position: absolute;
right: 0;
bottom: 0;
height: 42px;
line-height: 42px;
color: #666;
}
#tabs {
border-bottom: 1px solid #eee;
border-bottom: 1px solid #eee;
}
#tabs li {
cursor: pointer;
width: 100px;
height: 40px;
line-height: 40px;
text-align: center;
font-size: 16px;
border-bottom: 2px solid transparent;
position: relative;
z-index: 1;
margin-bottom: -1px;
color: #666;
cursor: pointer;
width: 100px;
height: 40px;
line-height: 40px;
text-align: center;
font-size: 16px;
border-bottom: 2px solid transparent;
position: relative;
z-index: 1;
margin-bottom: -1px;
color: #666;
}
#tabs .active {
border-bottom-color: #f00;
color: #222;
border-bottom-color: #f00;
color: #222;
}
.tab-container .content {
display: none;
display: none;
}
/* 页面布局 */
.main {
padding: 30px 100px;
width: 960px;
margin: 0 auto;
padding: 30px 100px;
width: 960px;
margin: 0 auto;
}
.main .logo {
color: #333;
text-align: left;
margin-bottom: 30px;
line-height: 1;
height: 110px;
margin-top: -50px;
overflow: hidden;
*zoom: 1;
color: #333;
text-align: left;
margin-bottom: 30px;
line-height: 1;
height: 110px;
margin-top: -50px;
overflow: hidden;
*zoom: 1;
}
.main .logo a {
font-size: 160px;
color: #333;
font-size: 160px;
color: #333;
}
.helps {
margin-top: 40px;
margin-top: 40px;
}
.helps pre {
padding: 20px;
margin: 10px 0;
border: solid 1px #e7e1cd;
background-color: #fffdef;
overflow: auto;
padding: 20px;
margin: 10px 0;
border: solid 1px #e7e1cd;
background-color: #fffdef;
overflow: auto;
}
.icon_lists {
width: 100% !important;
overflow: hidden;
*zoom: 1;
width: 100% !important;
overflow: hidden;
*zoom: 1;
}
.icon_lists li {
width: 100px;
margin-bottom: 10px;
margin-right: 20px;
text-align: center;
list-style: none !important;
cursor: default;
width: 100px;
margin-bottom: 10px;
margin-right: 20px;
text-align: center;
list-style: none !important;
cursor: default;
}
.icon_lists li .code-name {
line-height: 1.2;
line-height: 1.2;
}
.icon_lists .icon {
display: block;
height: 100px;
line-height: 100px;
font-size: 42px;
margin: 10px auto;
color: #333;
-webkit-transition: font-size 0.25s linear, width 0.25s linear;
-moz-transition: font-size 0.25s linear, width 0.25s linear;
transition: font-size 0.25s linear, width 0.25s linear;
display: block;
height: 100px;
line-height: 100px;
font-size: 42px;
margin: 10px auto;
color: #333;
-webkit-transition: font-size 0.25s linear, width 0.25s linear;
-moz-transition: font-size 0.25s linear, width 0.25s linear;
transition: font-size 0.25s linear, width 0.25s linear;
}
.icon_lists .icon:hover {
font-size: 100px;
font-size: 100px;
}
.icon_lists .svg-icon {
/* 通过设置 font-size 来改变图标大小 */
width: 1em;
/* 图标和文字相邻时,垂直对齐 */
vertical-align: -0.15em;
/* 通过设置 color 来改变 SVG 的颜色/fill */
fill: currentColor;
/* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
normalize.css 中也包含这行 */
overflow: hidden;
/* 通过设置 font-size 来改变图标大小 */
width: 1em;
/* 图标和文字相邻时,垂直对齐 */
vertical-align: -0.15em;
/* 通过设置 color 来改变 SVG 的颜色/fill */
fill: currentColor;
/* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
normalize.css 中也包含这行 */
overflow: hidden;
}
.icon_lists li .name,
.icon_lists li .code-name {
color: #666;
color: #666;
}
/* markdown 样式 */
.markdown {
color: #666;
font-size: 14px;
line-height: 1.8;
color: #666;
font-size: 14px;
line-height: 1.8;
}
.highlight {
line-height: 1.5;
line-height: 1.5;
}
.markdown img {
vertical-align: middle;
max-width: 100%;
vertical-align: middle;
max-width: 100%;
}
.markdown h1 {
color: #404040;
font-weight: 500;
line-height: 40px;
margin-bottom: 24px;
color: #404040;
font-weight: 500;
line-height: 40px;
margin-bottom: 24px;
}
.markdown h2,
... ... @@ -173,139 +173,139 @@
.markdown h4,
.markdown h5,
.markdown h6 {
color: #404040;
margin: 1.6em 0 0.6em 0;
font-weight: 500;
clear: both;
color: #404040;
margin: 1.6em 0 0.6em 0;
font-weight: 500;
clear: both;
}
.markdown h1 {
font-size: 28px;
font-size: 28px;
}
.markdown h2 {
font-size: 22px;
font-size: 22px;
}
.markdown h3 {
font-size: 16px;
font-size: 16px;
}
.markdown h4 {
font-size: 14px;
font-size: 14px;
}
.markdown h5 {
font-size: 12px;
font-size: 12px;
}
.markdown h6 {
font-size: 12px;
font-size: 12px;
}
.markdown hr {
height: 1px;
border: 0;
background: #e9e9e9;
margin: 16px 0;
clear: both;
height: 1px;
border: 0;
background: #e9e9e9;
margin: 16px 0;
clear: both;
}
.markdown p {
margin: 1em 0;
margin: 1em 0;
}
.markdown > p,
.markdown > blockquote,
.markdown > .highlight,
.markdown > ol,
.markdown > ul {
width: 80%;
.markdown>p,
.markdown>blockquote,
.markdown>.highlight,
.markdown>ol,
.markdown>ul {
width: 80%;
}
.markdown ul > li {
list-style: circle;
.markdown ul>li {
list-style: circle;
}
.markdown > ul li,
.markdown blockquote ul > li {
margin-left: 20px;
padding-left: 4px;
.markdown>ul li,
.markdown blockquote ul>li {
margin-left: 20px;
padding-left: 4px;
}
.markdown > ul li p,
.markdown > ol li p {
margin: 0.6em 0;
.markdown>ul li p,
.markdown>ol li p {
margin: 0.6em 0;
}
.markdown ol > li {
list-style: decimal;
.markdown ol>li {
list-style: decimal;
}
.markdown > ol li,
.markdown blockquote ol > li {
margin-left: 20px;
padding-left: 4px;
.markdown>ol li,
.markdown blockquote ol>li {
margin-left: 20px;
padding-left: 4px;
}
.markdown code {
margin: 0 3px;
padding: 0 5px;
background: #eee;
border-radius: 3px;
margin: 0 3px;
padding: 0 5px;
background: #eee;
border-radius: 3px;
}
.markdown strong,
.markdown b {
font-weight: 600;
font-weight: 600;
}
.markdown > table {
border-collapse: collapse;
border-spacing: 0px;
empty-cells: show;
border: 1px solid #e9e9e9;
width: 95%;
margin-bottom: 24px;
.markdown>table {
border-collapse: collapse;
border-spacing: 0px;
empty-cells: show;
border: 1px solid #e9e9e9;
width: 95%;
margin-bottom: 24px;
}
.markdown > table th {
white-space: nowrap;
color: #333;
font-weight: 600;
.markdown>table th {
white-space: nowrap;
color: #333;
font-weight: 600;
}
.markdown > table th,
.markdown > table td {
border: 1px solid #e9e9e9;
padding: 8px 16px;
text-align: left;
.markdown>table th,
.markdown>table td {
border: 1px solid #e9e9e9;
padding: 8px 16px;
text-align: left;
}
.markdown > table th {
background: #F7F7F7;
.markdown>table th {
background: #F7F7F7;
}
.markdown blockquote {
font-size: 90%;
color: #999;
border-left: 4px solid #e9e9e9;
padding-left: 0.8em;
margin: 1em 0;
font-size: 90%;
color: #999;
border-left: 4px solid #e9e9e9;
padding-left: 0.8em;
margin: 1em 0;
}
.markdown blockquote p {
margin: 0;
margin: 0;
}
.markdown .anchor {
opacity: 0;
transition: opacity 0.3s ease;
margin-left: 8px;
opacity: 0;
transition: opacity 0.3s ease;
margin-left: 8px;
}
.markdown .waiting {
color: #ccc;
color: #ccc;
}
.markdown h1:hover .anchor,
... ... @@ -314,27 +314,27 @@
.markdown h4:hover .anchor,
.markdown h5:hover .anchor,
.markdown h6:hover .anchor {
opacity: 1;
display: inline-block;
opacity: 1;
display: inline-block;
}
.markdown > br,
.markdown > p > br {
clear: both;
.markdown>br,
.markdown>p>br {
clear: both;
}
.hljs {
display: block;
background: white;
padding: 0.5em;
color: #333333;
overflow-x: auto;
display: block;
background: white;
padding: 0.5em;
color: #333333;
overflow-x: auto;
}
.hljs-comment,
.hljs-meta {
color: #969896;
color: #969896;
}
.hljs-string,
... ... @@ -343,29 +343,29 @@
.hljs-strong,
.hljs-emphasis,
.hljs-quote {
color: #df5000;
color: #df5000;
}
.hljs-keyword,
.hljs-selector-tag,
.hljs-type {
color: #a71d5d;
color: #a71d5d;
}
.hljs-literal,
.hljs-symbol,
.hljs-bullet,
.hljs-attribute {
color: #0086b3;
color: #0086b3;
}
.hljs-section,
.hljs-name {
color: #63a35c;
color: #63a35c;
}
.hljs-tag {
color: #333333;
color: #333333;
}
.hljs-title,
... ... @@ -374,21 +374,21 @@
.hljs-selector-class,
.hljs-selector-attr,
.hljs-selector-pseudo {
color: #795da3;
color: #795da3;
}
.hljs-addition {
color: #55a532;
background-color: #eaffea;
color: #55a532;
background-color: #eaffea;
}
.hljs-deletion {
color: #bd2c00;
background-color: #ffecec;
color: #bd2c00;
background-color: #ffecec;
}
.hljs-link {
text-decoration: underline;
text-decoration: underline;
}
/* 代码高亮 */
... ... @@ -401,83 +401,83 @@ https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javasc
*/
code[class*="language-"],
pre[class*="language-"] {
color: black;
background: none;
text-shadow: 0 1px white;
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
text-align: left;
white-space: pre;
word-spacing: normal;
word-break: normal;
word-wrap: normal;
line-height: 1.5;
-moz-tab-size: 4;
-o-tab-size: 4;
tab-size: 4;
-webkit-hyphens: none;
-moz-hyphens: none;
-ms-hyphens: none;
hyphens: none;
color: black;
background: none;
text-shadow: 0 1px white;
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
text-align: left;
white-space: pre;
word-spacing: normal;
word-break: normal;
word-wrap: normal;
line-height: 1.5;
-moz-tab-size: 4;
-o-tab-size: 4;
tab-size: 4;
-webkit-hyphens: none;
-moz-hyphens: none;
-ms-hyphens: none;
hyphens: none;
}
pre[class*="language-"]::-moz-selection,
pre[class*="language-"] ::-moz-selection,
code[class*="language-"]::-moz-selection,
code[class*="language-"] ::-moz-selection {
text-shadow: none;
background: #b3d4fc;
text-shadow: none;
background: #b3d4fc;
}
pre[class*="language-"]::selection,
pre[class*="language-"] ::selection,
code[class*="language-"]::selection,
code[class*="language-"] ::selection {
text-shadow: none;
background: #b3d4fc;
text-shadow: none;
background: #b3d4fc;
}
@media print {
code[class*="language-"],
pre[class*="language-"] {
text-shadow: none;
}
code[class*="language-"],
pre[class*="language-"] {
text-shadow: none;
}
}
/* Code blocks */
pre[class*="language-"] {
padding: 1em;
margin: .5em 0;
overflow: auto;
padding: 1em;
margin: .5em 0;
overflow: auto;
}
:not(pre) > code[class*="language-"],
:not(pre)>code[class*="language-"],
pre[class*="language-"] {
background: #f5f2f0;
background: #f5f2f0;
}
/* Inline code */
:not(pre) > code[class*="language-"] {
padding: .1em;
border-radius: .3em;
white-space: normal;
:not(pre)>code[class*="language-"] {
padding: .1em;
border-radius: .3em;
white-space: normal;
}
.token.comment,
.token.prolog,
.token.doctype,
.token.cdata {
color: slategray;
color: slategray;
}
.token.punctuation {
color: #999;
color: #999;
}
.namespace {
opacity: .7;
opacity: .7;
}
.token.property,
... ... @@ -487,7 +487,7 @@ pre[class*="language-"] {
.token.constant,
.token.symbol,
.token.deleted {
color: #905;
color: #905;
}
.token.selector,
... ... @@ -496,7 +496,7 @@ pre[class*="language-"] {
.token.char,
.token.builtin,
.token.inserted {
color: #690;
color: #690;
}
.token.operator,
... ... @@ -504,36 +504,36 @@ pre[class*="language-"] {
.token.url,
.language-css .token.string,
.style .token.string {
color: #9a6e3a;
background: hsla(0, 0%, 100%, .5);
color: #9a6e3a;
background: hsla(0, 0%, 100%, .5);
}
.token.atrule,
.token.attr-value,
.token.keyword {
color: #07a;
color: #07a;
}
.token.function,
.token.class-name {
color: #DD4A68;
color: #DD4A68;
}
.token.regex,
.token.important,
.token.variable {
color: #e90;
color: #e90;
}
.token.important,
.token.bold {
font-weight: bold;
font-weight: bold;
}
.token.italic {
font-style: italic;
font-style: italic;
}
.token.entity {
cursor: help;
cursor: help;
}
... ...
@font-face {
font-family: "iconfont"; /* Project id 2843738 */
src: url('iconfont.woff2?t=1639498542236') format('woff2'),
url('iconfont.woff?t=1639498542236') format('woff'),
url('iconfont.ttf?t=1639498542236') format('truetype');
font-family: "iconfont"; /* Project id 2843738 */
src: url('iconfont.woff2?t=1659325108758') format('woff2'),
url('iconfont.woff?t=1659325108758') format('woff'),
url('iconfont.ttf?t=1659325108758') format('truetype');
}
.iconfont {
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-tishi:before {
content: "\e67c";
}
.icon-dian:before {
content: "\ec1e";
}
.icon-gengduo-shuxiang:before {
content: "\e8c4";
}
.icon-weixin:before {
content: "\e67b";
}
.icon-youxiang:before {
content: "\e908";
}
.icon-duanxinqunfa:before {
content: "\eb42";
}
.icon-yewuziyuantuopu:before {
content: "\ea6f";
}
.icon-yibiaopan:before {
content: "\eb67";
content: "\eb67";
}
.icon-nginx:before {
content: "\e63e";
content: "\e63e";
}
.icon-dianya:before {
content: "\e639";
content: "\e639";
}
.icon-shujujiekou:before {
content: "\e641";
content: "\e641";
}
.icon-xudianchizu:before {
content: "\e7df";
content: "\e7df";
}
.icon-tomcat2:before {
content: "\e63a";
content: "\e63a";
}
.icon-xiaoxingji:before {
content: "\e63b";
content: "\e63b";
}
.icon-dianyabiao:before {
content: "\e658";
content: "\e658";
}
.icon-suzhuji:before {
content: "\e63f";
content: "\e63f";
}
.icon-kongtiao1:before {
content: "\e90d";
content: "\e90d";
}
.icon-kaiguan:before {
content: "\e642";
content: "\e642";
}
.icon-wenduji:before {
content: "\e643";
content: "\e643";
}
.icon-kaiguan1:before {
content: "\eaf7";
content: "\eaf7";
}
.icon-xuehua:before {
content: "\e644";
content: "\e644";
}
.icon-aliyun:before {
content: "\e6aa";
content: "\e6aa";
}
.icon-kongtiao2:before {
content: "\e645";
content: "\e645";
}
.icon-kaiguan2:before {
content: "\ec76";
content: "\ec76";
}
.icon-dianchizu:before {
content: "\e647";
content: "\e647";
}
.icon-dianchizu1:before {
content: "\e646";
content: "\e646";
}
.icon-CADshezhi:before {
content: "\e649";
content: "\e649";
}
.icon-EPStubiao:before {
content: "\e64a";
content: "\e64a";
}
.icon-webLogic:before {
content: "\e73a";
content: "\e73a";
}
.icon-xiaoxingji1:before {
content: "\e65a";
content: "\e65a";
}
.icon-wenduji1:before {
content: "\e64b";
content: "\e64b";
}
.icon-guangyuwang:before {
content: "\e64c";
content: "\e64c";
}
.icon-wangguanshezhi:before {
content: "\e69f";
content: "\e69f";
}
.icon-sanjiaohuanji:before {
content: "\e64d";
content: "\e64d";
}
.icon-Redis1:before {
content: "\e64e";
content: "\e64e";
}
.icon-dianchi3:before {
content: "\e64f";
content: "\e64f";
}
.icon-xiaoxingji2:before {
content: "\e734";
content: "\e734";
}
.icon-xiaoxingji3:before {
content: "\e749";
content: "\e749";
}
.icon-dns:before {
content: "\e650";
content: "\e650";
}
.icon-yangan:before {
content: "\e651";
content: "\e651";
}
.icon-shujuku:before {
content: "\e652";
content: "\e652";
}
.icon-xuehua1:before {
content: "\e653";
content: "\e653";
}
.icon-kongtiao3:before {
content: "\e655";
content: "\e655";
}
.icon-jifang:before {
content: "\e6ca";
content: "\e6ca";
}
.icon-eps:before {
content: "\e8ae";
content: "\e8ae";
}
.icon-sharpicons_snowflake:before {
content: "\e7c4";
content: "\e7c4";
}
.icon-SANjiaohuanji:before {
content: "\e656";
content: "\e656";
}
.icon-dianchi4:before {
content: "\e659";
content: "\e659";
}
.icon-dianyabiao1:before {
content: "\e65f";
content: "\e65f";
}
.icon-dianchizu2:before {
content: "\e82b";
content: "\e82b";
}
.icon-hengban-huaweiyun-quanbu:before {
content: "\e6c9";
content: "\e6c9";
}
.icon-UPS:before {
content: "\e661";
content: "\e661";
}
.icon-yangan1:before {
content: "\e67e";
content: "\e67e";
}
.icon-dianliu:before {
content: "\e68a";
content: "\e68a";
}
.icon-dianchi-wu:before {
content: "\e662";
content: "\e662";
}
.icon-ecsyunfuwuqi:before {
content: "\e666";
content: "\e666";
}
.icon-ups:before {
content: "\e7b9";
content: "\e7b9";
}
.icon-mysqlshujukumgrban:before {
content: "\e663";
content: "\e663";
}
.icon-dianya1:before {
content: "\e665";
content: "\e665";
}
.icon-VMware:before {
content: "\e843";
content: "\e843";
}
.icon-yibiaopan1:before {
content: "\e664";
content: "\e664";
}
.icon-ecsyunfuwuqiECS:before {
content: "\e667";
content: "\e667";
}
.icon-ecsyunfuwuqiECS1:before {
content: "\e6e8";
content: "\e6e8";
}
.icon-ruqinjiance1:before {
content: "\e668";
content: "\e668";
}
.icon-gongxiangcunchu:before {
content: "\e754";
content: "\e754";
}
.icon-dianliu1:before {
content: "\e673";
content: "\e673";
}
.icon-icon-huaweiyunxuniji:before {
content: "\e927";
content: "\e927";
}
.icon-MySQLshujuku:before {
content: "\e72a";
content: "\e72a";
}
.icon-Internet-yunzhuangjiedian:before {
content: "\e6ac";
content: "\e6ac";
}
.icon-Internet-yunzhuangjiedian1:before {
content: "\e6b6";
content: "\e6b6";
}
.icon-yangan2:before {
content: "\e669";
content: "\e669";
}
.icon-KAFAKA:before {
content: "\e801";
content: "\e801";
}
.icon-zhongjiqi:before {
content: "\e6b9";
content: "\e6b9";
}
.icon-wangguan:before {
content: "\e67a";
content: "\e67a";
}
.icon-alarm-full:before {
content: "\e871";
content: "\e871";
}
.icon-alarm:before {
content: "\e872";
content: "\e872";
}
.icon-blood-full:before {
content: "\e918";
content: "\e918";
}
.icon-mianxingbaojingdengtubiao:before {
content: "\e6a3";
content: "\e6a3";
}
.icon-fuwuqi2:before {
content: "\e98e";
content: "\e98e";
}
.icon-fenqu:before {
content: "\e684";
content: "\e684";
}
.icon-wenduji2:before {
content: "\e66a";
content: "\e66a";
}
.icon-shujukucaozuo-chaxunmysqlshujuku:before {
content: "\e66b";
content: "\e66b";
}
.icon-jifang1:before {
content: "\e66c";
content: "\e66c";
}
.icon-zhuanyongsuzhuji:before {
content: "\e66d";
content: "\e66d";
}
.icon-danxingwangka:before {
content: "\e66e";
content: "\e66e";
}
.icon-wuliwangkaduankou:before {
content: "\e66f";
content: "\e66f";
}
.icon-wangluoruqinjiance:before {
content: "\e672";
content: "\e672";
}
.icon-qiansuanxudianchizu:before {
content: "\e674";
content: "\e674";
}
.icon-UPS1:before {
content: "\e676";
content: "\e676";
}
.icon-guangyuwangxianlu:before {
content: "\e678";
content: "\e678";
}
.icon-wuliwangka:before {
content: "\e67f";
content: "\e67f";
}
.icon-Nginx:before {
content: "\e683";
content: "\e683";
}
.icon-Weblogic:before {
content: "\e685";
content: "\e685";
}
.icon-TOMCAT:before {
content: "\e687";
content: "\e687";
}
.icon-wulifuwuqi1:before {
content: "\e688";
content: "\e688";
}
.icon-VMware1:before {
content: "\e68b";
content: "\e68b";
}
.icon-jiqun:before {
content: "\e68c";
content: "\e68c";
}
.icon-bianyuanjiaohuanji:before {
content: "\e770";
content: "\e770";
}
.icon-epsdaoru:before {
content: "\ee23";
content: "\ee23";
}
.icon-epsdaochu:before {
content: "\ee24";
content: "\ee24";
}
.icon-zhongjiqi1:before {
content: "\e8e0";
content: "\e8e0";
}
.icon-a-ziyuan117:before {
content: "\e670";
content: "\e670";
}
.icon-suzhuji1:before {
content: "\e671";
content: "\e671";
}
.icon-binghaitushi_shuizi:before {
content: "\e6a5";
content: "\e6a5";
}
.icon-gongxiangcunchu1:before {
content: "\e677";
content: "\e677";
}
.icon-loudiandianliu-xian:before {
content: "\e7de";
content: "\e7de";
}
.icon-alarm-full1:before {
content: "\e679";
content: "\e679";
}
.icon-xiaoxingji4:before {
content: "\e7c3";
content: "\e7c3";
}
.icon-dianliu2:before {
content: "\e7b0";
content: "\e7b0";
}
.icon-huaweiyun:before {
content: "\e7ca";
content: "\e7ca";
}
.icon-dianchi:before {
content: "\e624";
content: "\e624";
}
.icon-chongdian:before {
content: "\e627";
content: "\e627";
}
.icon-5:before {
content: "\e628";
content: "\e628";
}
.icon-tomcat:before {
content: "\e629";
content: "\e629";
}
.icon-ids:before {
content: "\e6db";
content: "\e6db";
}
.icon-fuzaijunheng:before {
content: "\e62b";
content: "\e62b";
}
.icon-xuniips:before {
content: "\ea5d";
content: "\ea5d";
}
.icon-xuniips1:before {
content: "\ea67";
content: "\ea67";
}
.icon-fanghuoqiang37:before {
content: "\e728";
content: "\e728";
}
.icon-vlb:before {
content: "\e729";
content: "\e729";
}
.icon-shouye:before {
content: "\e636";
content: "\e636";
}
.icon-shuizisunshixian:before {
content: "\e6d6";
content: "\e6d6";
}
.icon-ruqinjiance:before {
content: "\e65c";
content: "\e65c";
}
.icon-jiaohuanji:before {
content: "\e836";
content: "\e836";
}
.icon-jingwuicon_svg-:before {
content: "\e65b";
content: "\e65b";
}
.icon-tomcat1:before {
content: "\e62c";
content: "\e62c";
}
.icon-jiaohuanji1:before {
content: "\e62f";
content: "\e62f";
}
.icon-oracleshujuku:before {
content: "\e630";
content: "\e630";
}
.icon-fanghuoqiang:before {
content: "\e648";
content: "\e648";
}
.icon-fuwuqi:before {
content: "\e631";
content: "\e631";
}
.icon-fuwuqi1:before {
content: "\e632";
content: "\e632";
}
.icon-kongtiao:before {
content: "\e67d";
content: "\e67d";
}
.icon-yunshujuku:before {
content: "\e744";
content: "\e744";
}
.icon-dianchi1:before {
content: "\e633";
content: "\e633";
}
.icon-Redis:before {
content: "\e6a2";
content: "\e6a2";
}
.icon-icon-current:before {
content: "\e634";
content: "\e634";
}
.icon-oracleshujuku1:before {
content: "\e635";
content: "\e635";
}
.icon-DNS-xiugai:before {
content: "\e637";
content: "\e637";
}
.icon-wulifuwuqi:before {
content: "\e6a8";
content: "\e6a8";
}
.icon-dianchi2:before {
content: "\e638";
content: "\e638";
}
.icon-daochu:before {
content: "\eabf";
content: "\eabf";
}
.icon-daochu1:before {
content: "\e623";
content: "\e623";
}
.icon-database:before {
content: "\e940";
content: "\e940";
}
.icon-OPCtiaobanjiquanxianshenqing:before {
content: "\e620";
content: "\e620";
}
.icon-assets:before {
content: "\e615";
content: "\e615";
}
.icon-shoucang:before {
content: "\e61f";
content: "\e61f";
}
.icon-wangluotuopu:before {
content: "\e835";
content: "\e835";
}
.icon-shoucang1:before {
content: "\e622";
content: "\e622";
}
.icon-xunizhuomian:before {
content: "\e613";
content: "\e613";
}
.icon-baoleiji:before {
content: "\e63c";
content: "\e63c";
}
.icon-baoleijisas:before {
content: "\e61a";
content: "\e61a";
}
.icon-baoleijishouquanshenqingliucheng:before {
content: "\e657";
content: "\e657";
}
.icon-xunizhuomian1:before {
content: "\e63d";
content: "\e63d";
}
.icon-shuiba2:before {
content: "\e905";
content: "\e905";
}
.icon-xunizhuomian2:before {
content: "\e675";
content: "\e675";
}
.icon-gunshuiba:before {
content: "\e614";
content: "\e614";
}
.icon-line1:before {
content: "\ebde";
content: "\ebde";
}
.icon-line:before {
content: "\e7fd";
content: "\e7fd";
}
.icon-luyouqi:before {
content: "\ec62";
content: "\ec62";
}
.icon-sousuo:before {
content: "\e752";
content: "\e752";
}
.icon-icon--mubiaoku:before {
content: "\e610";
content: "\e610";
}
.icon-icon--download:before {
content: "\e612";
content: "\e612";
}
.icon-icon--shangchuan:before {
content: "\e616";
content: "\e616";
}
.icon-icon--tongji:before {
content: "\e61b";
content: "\e61b";
}
.icon-icon--quanxian:before {
content: "\e61c";
content: "\e61c";
}
.icon-icon--yingbing:before {
content: "\e61d";
content: "\e61d";
}
.icon-icon--yes:before {
content: "\e61e";
content: "\e61e";
}
.icon-icon--shanchu:before {
content: "\e621";
content: "\e621";
}
.icon-icon-rizhi:before {
content: "\e625";
content: "\e625";
}
.icon-icon-gaojing:before {
content: "\e626";
content: "\e626";
}
.icon-icon-liucheng:before {
content: "\e62e";
content: "\e62e";
}
.icon-yuangongchelianglika:before {
content: "\e65d";
content: "\e65d";
}
.icon-yuangongcheliangjinr:before {
content: "\e65e";
content: "\e65e";
}
.icon-lunxun:before {
content: "\e660";
content: "\e660";
}
.icon-haoyou:before {
content: "\e60f";
content: "\e60f";
}
.icon-yonghu:before {
content: "\e8c8";
content: "\e8c8";
}
.icon-jiaoseguanli:before {
content: "\ea62";
content: "\ea62";
}
.icon-liebiaomoshi:before {
content: "\e60d";
content: "\e60d";
}
.icon-liebiao:before {
content: "\e62d";
content: "\e62d";
}
.icon-bt_duigou_B:before {
content: "\e60c";
content: "\e60c";
}
.icon-duigouxuanzhong:before {
content: "\e617";
content: "\e617";
}
.icon-confirm-line:before {
content: "\e62a";
content: "\e62a";
}
.icon-duigou_kuai:before {
content: "\e60e";
content: "\e60e";
}
.icon-duigou3:before {
content: "\e640";
content: "\e640";
}
.icon-cha:before {
content: "\e686";
content: "\e686";
}
.icon-duigou4:before {
content: "\e6e7";
content: "\e6e7";
}
.icon-guifandaohanglancha:before {
content: "\e618";
content: "\e618";
}
.icon-ziyuan:before {
content: "\e654";
content: "\e654";
}
.icon-duigou:before {
content: "\e730";
content: "\e730";
}
.icon-duigou1:before {
content: "\e733";
content: "\e733";
}
.icon-duigou2:before {
content: "\e6b5";
content: "\e6b5";
}
.icon-bt_duigou_a:before {
content: "\e60b";
content: "\e60b";
}
.icon-wenjian:before {
content: "\e600";
content: "\e600";
}
.icon-bianjiwenjian:before {
content: "\e601";
content: "\e601";
}
.icon-dengdaiwenjian:before {
content: "\e602";
content: "\e602";
}
.icon-shanchuwenjian:before {
content: "\e603";
content: "\e603";
}
.icon-jianqiewenjian:before {
content: "\e604";
content: "\e604";
}
.icon-wenjianjia:before {
content: "\e605";
content: "\e605";
}
.icon-shanchuwenjianjia:before {
content: "\e606";
content: "\e606";
}
.icon-weidaqiadewenjianjia:before {
content: "\e607";
content: "\e607";
}
.icon-ziliaoku:before {
content: "\e608";
content: "\e608";
}
.icon-wenben:before {
content: "\e609";
content: "\e609";
}
.icon-daimawenjian:before {
content: "\e60a";
content: "\e60a";
}
.icon-excel:before {
content: "\e611";
content: "\e611";
}
.icon-24gf-fileEmpty:before {
content: "\eac3";
content: "\eac3";
}
.icon-24gf-fileText:before {
content: "\eac4";
content: "\eac4";
}
.icon-24gf-folderHeart:before {
content: "\eac5";
content: "\eac5";
}
.icon-24gf-folderStar:before {
content: "\eac6";
content: "\eac6";
}
.icon-24gf-folderOpen:before {
content: "\eac7";
content: "\eac7";
}
.icon-wenjian1:before {
content: "\e619";
content: "\e619";
}
.icon-image:before {
content: "\ea40";
content: "\ea40";
}
.icon-image-full:before {
content: "\ea41";
content: "\ea41";
}
.icon-json-full:before {
content: "\ea42";
content: "\ea42";
}
.icon-json:before {
content: "\ea43";
content: "\ea43";
}
.icon-pdf:before {
content: "\ea44";
content: "\ea44";
}
.icon-pdf-full:before {
content: "\ea45";
content: "\ea45";
}
.icon-txt-full:before {
content: "\ea46";
content: "\ea46";
}
.icon-txt:before {
content: "\ea47";
content: "\ea47";
}
.icon-excel1:before {
content: "\ea48";
content: "\ea48";
}
.icon-excel-full:before {
content: "\ea49";
content: "\ea49";
}
.icon-ppt:before {
content: "\ea4a";
content: "\ea4a";
}
.icon-ppt-full:before {
content: "\ea4b";
content: "\ea4b";
}
.icon-word-full:before {
content: "\ea4c";
content: "\ea4c";
}
.icon-word:before {
content: "\ea4d";
content: "\ea4d";
}
.icon-audio-full:before {
content: "\ea4e";
content: "\ea4e";
}
.icon-audio:before {
content: "\ea4f";
content: "\ea4f";
}
.icon-avi-full:before {
content: "\ea50";
content: "\ea50";
}
.icon-avi:before {
content: "\ea51";
content: "\ea51";
}
.icon-zip-full:before {
content: "\ea52";
content: "\ea52";
}
.icon-zip:before {
content: "\ea53";
content: "\ea53";
}
... ...
... ... @@ -6,6 +6,55 @@
"description": "",
"glyphs": [
{
"icon_id": "577891",
"name": "提示",
"font_class": "tishi",
"unicode": "e67c",
"unicode_decimal": 59004
},
{
"icon_id": "4933869",
"name": "点",
"font_class": "dian",
"unicode": "ec1e",
"unicode_decimal": 60446
},
{
"icon_id": "1727447",
"name": "216更多-竖向",
"font_class": "gengduo-shuxiang",
"unicode": "e8c4",
"unicode_decimal": 59588
},
{
"icon_id": "1206404",
"name": "微信",
"font_class": "weixin",
"unicode": "e67b",
"unicode_decimal": 59003
},
{
"icon_id": "4552970",
"name": "邮箱",
"font_class": "youxiang",
"unicode": "e908",
"unicode_decimal": 59656
},
{
"icon_id": "5387727",
"name": "短信群发",
"font_class": "duanxinqunfa",
"unicode": "eb42",
"unicode_decimal": 60226
},
{
"icon_id": "742139",
"name": "业务资源拓扑",
"font_class": "yewuziyuantuopu",
"unicode": "ea6f",
"unicode_decimal": 60015
},
{
"icon_id": "3868284",
"name": "仪表盘",
"font_class": "yibiaopan",
... ...
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.dayjs=e()}(this,function(){"use strict";const t=60,e=60*t,s=24*e,r=7*s,n=(t,e,s)=>!t||t.length>=e?t:`${Array(e+1-t.length).join(s)}${t}`;class i{constructor(t){this.utc=!1;const e=this.parseConfig(t);this.date=new Date(e),this.timeZone=this.date.getTimezoneOffset()/60,this.timeZoneString=n(String(-1*this.timeZone).replace(/^(.)?(\d)/,"$10$200"),5,"+"),this.mYear=this.date.getFullYear(),this.mMonth=this.date.getMonth(),this.mDay=this.date.getDate(),this.mWeek=this.date.getDay(),this.mHour=this.date.getHours(),this.mMinute=this.date.getMinutes(),this.mSecond=this.date.getSeconds()}parseConfig(t){if(!t)return new Date;if(t instanceof Date)return t;if(/^(\d){8}$/.test(t)){return this.utc=!0,`${t.substr(0,4)}-${t.substr(4,2)}-${t.substr(6,2)}`}return t}year(){return this.mYear}month(){return this.mMonth}unix(){const t=this.utc?60*this.timeZone*60*1e3:0;return Math.floor((this.date.getTime()+t)/1e3)}toString(){return this.date.toUTCString()}startOf(t){switch(t){case"year":return new i(new Date(this.year(),0,1));case"month":return new i(new Date(this.year(),this.month(),1));default:return this}}add(n,a){let h;switch(a){case"m":case"minutes":h=t;break;case"h":case"hours":h=e;break;case"d":case"days":h=s;break;case"w":case"weeks":h=r;break;default:h=1}const u=this.unix()+n*h;return new i(1e3*u)}subtract(t,e){return this.add(-1*t,e)}format(t="YYYY-MM-DDTHH:mm:ssZ"){const e=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];return t.replace(/Y{2,4}|M{1,2}|D{1,2}|d{1,4}|H{1,2}|m{1,2}|s{1,2}|Z{1,2}/g,t=>{switch(t){case"YY":return String(this.mYear).slice(-2);case"YYYY":return String(this.mYear);case"M":return String(this.mMonth+1);case"MM":return n(String(this.mMonth+1),2,"0");case"D":return String(this.mDay);case"DD":return n(String(this.mDay),2,"0");case"d":return String(this.mWeek);case"dddd":return e[this.mWeek];case"H":return String(this.mHour);case"HH":return n(String(this.mHour),2,"0");case"m":return String(this.mMinute);case"mm":return n(String(this.mMinute),2,"0");case"s":return String(this.mSecond);case"ss":return n(String(this.mSecond),2,"0");case"Z":return`${this.timeZoneString.slice(0,-2)}:00`;case"ZZ":return this.timeZoneString;default:return t}})}}return t=>new i(t)});
!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):t.dayjs=n()}(this,function(){"use strict";var t="millisecond",n="second",e="minute",r="hour",i="day",s="week",u="month",o="quarter",a="year",h=/^(\d{4})-?(\d{1,2})-?(\d{0,2})[^0-9]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?.?(\d{1,3})?$/,f=/\[([^\]]+)]|Y{2,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,c=function(t,n,e){var r=String(t);return!r||r.length>=n?t:""+Array(n+1-r.length).join(e)+t},d={s:c,z:function(t){var n=-t.utcOffset(),e=Math.abs(n),r=Math.floor(e/60),i=e%60;return(n<=0?"+":"-")+c(r,2,"0")+":"+c(i,2,"0")},m:function(t,n){var e=12*(n.year()-t.year())+(n.month()-t.month()),r=t.clone().add(e,u),i=n-r<0,s=t.clone().add(e+(i?-1:1),u);return Number(-(e+(n-r)/(i?r-s:s-r))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(h){return{M:u,y:a,w:s,d:i,D:"date",h:r,m:e,s:n,ms:t,Q:o}[h]||String(h||"").toLowerCase().replace(/s$/,"")},u:function(t){return void 0===t}},$={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_")},l="en",m={};m[l]=$;var y=function(t){return t instanceof v},M=function(t,n,e){var r;if(!t)return l;if("string"==typeof t)m[t]&&(r=t),n&&(m[t]=n,r=t);else{var i=t.name;m[i]=t,r=i}return e||(l=r),r},g=function(t,n,e){if(y(t))return t.clone();var r=n?"string"==typeof n?{format:n,pl:e}:n:{};return r.date=t,new v(r)},D=d;D.l=M,D.i=y,D.w=function(t,n){return g(t,{locale:n.$L,utc:n.$u,$offset:n.$offset})};var v=function(){function c(t){this.$L=this.$L||M(t.locale,null,!0),this.parse(t)}var d=c.prototype;return d.parse=function(t){this.$d=function(t){var n=t.date,e=t.utc;if(null===n)return new Date(NaN);if(D.u(n))return new Date;if(n instanceof Date)return new Date(n);if("string"==typeof n&&!/Z$/i.test(n)){var r=n.match(h);if(r)return e?new Date(Date.UTC(r[1],r[2]-1,r[3]||1,r[4]||0,r[5]||0,r[6]||0,r[7]||0)):new Date(r[1],r[2]-1,r[3]||1,r[4]||0,r[5]||0,r[6]||0,r[7]||0)}return new Date(n)}(t),this.init()},d.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},d.$utils=function(){return D},d.isValid=function(){return!("Invalid Date"===this.$d.toString())},d.isSame=function(t,n){var e=g(t);return this.startOf(n)<=e&&e<=this.endOf(n)},d.isAfter=function(t,n){return g(t)<this.startOf(n)},d.isBefore=function(t,n){return this.endOf(n)<g(t)},d.$g=function(t,n,e){return D.u(t)?this[n]:this.set(e,t)},d.year=function(t){return this.$g(t,"$y",a)},d.month=function(t){return this.$g(t,"$M",u)},d.day=function(t){return this.$g(t,"$W",i)},d.date=function(t){return this.$g(t,"$D","date")},d.hour=function(t){return this.$g(t,"$H",r)},d.minute=function(t){return this.$g(t,"$m",e)},d.second=function(t){return this.$g(t,"$s",n)},d.millisecond=function(n){return this.$g(n,"$ms",t)},d.unix=function(){return Math.floor(this.valueOf()/1e3)},d.valueOf=function(){return this.$d.getTime()},d.startOf=function(t,o){var h=this,f=!!D.u(o)||o,c=D.p(t),d=function(t,n){var e=D.w(h.$u?Date.UTC(h.$y,n,t):new Date(h.$y,n,t),h);return f?e:e.endOf(i)},$=function(t,n){return D.w(h.toDate()[t].apply(h.toDate(),(f?[0,0,0,0]:[23,59,59,999]).slice(n)),h)},l=this.$W,m=this.$M,y=this.$D,M="set"+(this.$u?"UTC":"");switch(c){case a:return f?d(1,0):d(31,11);case u:return f?d(1,m):d(0,m+1);case s:var g=this.$locale().weekStart||0,v=(l<g?l+7:l)-g;return d(f?y-v:y+(6-v),m);case i:case"date":return $(M+"Hours",0);case r:return $(M+"Minutes",1);case e:return $(M+"Seconds",2);case n:return $(M+"Milliseconds",3);default:return this.clone()}},d.endOf=function(t){return this.startOf(t,!1)},d.$set=function(s,o){var h,f=D.p(s),c="set"+(this.$u?"UTC":""),d=(h={},h[i]=c+"Date",h.date=c+"Date",h[u]=c+"Month",h[a]=c+"FullYear",h[r]=c+"Hours",h[e]=c+"Minutes",h[n]=c+"Seconds",h[t]=c+"Milliseconds",h)[f],$=f===i?this.$D+(o-this.$W):o;if(f===u||f===a){var l=this.clone().set("date",1);l.$d[d]($),l.init(),this.$d=l.set("date",Math.min(this.$D,l.daysInMonth())).toDate()}else d&&this.$d[d]($);return this.init(),this},d.set=function(t,n){return this.clone().$set(t,n)},d.get=function(t){return this[D.p(t)]()},d.add=function(t,o){var h,f=this;t=Number(t);var c=D.p(o),d=function(n){var e=g(f);return D.w(e.date(e.date()+Math.round(n*t)),f)};if(c===u)return this.set(u,this.$M+t);if(c===a)return this.set(a,this.$y+t);if(c===i)return d(1);if(c===s)return d(7);var $=(h={},h[e]=6e4,h[r]=36e5,h[n]=1e3,h)[c]||1,l=this.$d.getTime()+t*$;return D.w(l,this)},d.subtract=function(t,n){return this.add(-1*t,n)},d.format=function(t){var n=this;if(!this.isValid())return"Invalid Date";var e=t||"YYYY-MM-DDTHH:mm:ssZ",r=D.z(this),i=this.$locale(),s=this.$H,u=this.$m,o=this.$M,a=i.weekdays,h=i.months,c=function(t,r,i,s){return t&&(t[r]||t(n,e))||i[r].substr(0,s)},d=function(t){return D.s(s%12||12,t,"0")},$=i.meridiem||function(t,n,e){var r=t<12?"AM":"PM";return e?r.toLowerCase():r},l={YY:String(this.$y).slice(-2),YYYY:this.$y,M:o+1,MM:D.s(o+1,2,"0"),MMM:c(i.monthsShort,o,h,3),MMMM:h[o]||h(this,e),D:this.$D,DD:D.s(this.$D,2,"0"),d:String(this.$W),dd:c(i.weekdaysMin,this.$W,a,2),ddd:c(i.weekdaysShort,this.$W,a,3),dddd:a[this.$W],H:String(s),HH:D.s(s,2,"0"),h:d(1),hh:d(2),a:$(s,u,!0),A:$(s,u,!1),m:String(u),mm:D.s(u,2,"0"),s:String(this.$s),ss:D.s(this.$s,2,"0"),SSS:D.s(this.$ms,3,"0"),Z:r};return e.replace(f,function(t,n){return n||l[t]||r.replace(":","")})},d.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},d.diff=function(t,h,f){var c,d=D.p(h),$=g(t),l=6e4*($.utcOffset()-this.utcOffset()),m=this-$,y=D.m(this,$);return y=(c={},c[a]=y/12,c[u]=y,c[o]=y/3,c[s]=(m-l)/6048e5,c[i]=(m-l)/864e5,c[r]=m/36e5,c[e]=m/6e4,c[n]=m/1e3,c)[d]||m,f?y:D.a(y)},d.daysInMonth=function(){return this.endOf(u).$D},d.$locale=function(){return m[this.$L]},d.locale=function(t,n){if(!t)return this.$L;var e=this.clone(),r=M(t,n,!0);return r&&(e.$L=r),e},d.clone=function(){return D.w(this.$d,this)},d.toDate=function(){return new Date(this.valueOf())},d.toJSON=function(){return this.isValid()?this.toISOString():null},d.toISOString=function(){return this.$d.toISOString()},d.toString=function(){return this.$d.toUTCString()},c}();return g.prototype=v.prototype,g.extend=function(t,n){return t(n,v,g),g},g.locale=M,g.isDayjs=y,g.unix=function(t){return g(1e3*t)},g.en=m[l],g.Ls=m,g});
... ...
/* Disable minification (remove `.min` from URL path) for more info */
(function(undefined) {var _mutation=function(){function e(e){return"function"==typeof Node?e instanceof Node:e&&"object"==typeof e&&e.nodeName&&e.nodeType>=1&&e.nodeType<=12}return function(n){if(1===n.length)return e(n[0])?n[0]:document.createTextNode(n[0]+"");for(var t=document.createDocumentFragment(),o=0;o<n.length;o++)t.appendChild(e(n[o])?n[o]:document.createTextNode(n[o]+""));return t}}();DocumentFragment.prototype.append=function(){this.appendChild(_mutation(arguments))};DocumentFragment.prototype.prepend=function(){this.insertBefore(_mutation(arguments),this.firstChild)};Document.prototype.after=Element.prototype.after=function(){if(this.parentNode){for(var t=Array.prototype.slice.call(arguments),e=this.nextSibling,o=e?t.indexOf(e):-1;-1!==o&&(e=e.nextSibling);)o=t.indexOf(e);this.parentNode.insertBefore(_mutation(arguments),e)}},"Text"in this&&(Text.prototype.after=Element.prototype.after);Document.prototype.append=Element.prototype.append=function(){this.appendChild(_mutation(arguments))};Document.prototype.before=Element.prototype.before=function(){if(this.parentNode){for(var e=Array.prototype.slice.call(arguments),t=this.previousSibling,o=t?e.indexOf(t):-1;-1!==o&&(t=t.previousSibling);)o=e.indexOf(t);this.parentNode.insertBefore(_mutation(arguments),t?t.nextSibling:this.parentNode.firstChild)}},"Text"in this&&(Text.prototype.before=Element.prototype.before);Element.prototype.matches=Element.prototype.webkitMatchesSelector||Element.prototype.oMatchesSelector||Element.prototype.msMatchesSelector||Element.prototype.mozMatchesSelector||function(e){for(var t=this,o=(t.document||t.ownerDocument).querySelectorAll(e),r=0;o[r]&&o[r]!==t;)++r;return!!o[r]};Element.prototype.closest=function(e){for(var n=this;n;){if(n.matches(e))return n;n="SVGElement"in window&&n instanceof SVGElement?n.parentNode:n.parentElement}return null};Document.prototype.prepend=Element.prototype.prepend=function(){this.insertBefore(_mutation(arguments),this.firstChild)};Document.prototype.replaceWith=Element.prototype.replaceWith=function(){this.parentNode&&this.parentNode.replaceChild(_mutation(arguments),this)},"Text"in this&&(Text.prototype.replaceWith=Element.prototype.replaceWith);!function(e){"use strict";function t(t){return!!t&&("Symbol"in e&&"iterator"in e.Symbol&&"function"==typeof t[Symbol.iterator]||!!Array.isArray(t))}function n(e){return"from"in Array?Array.from(e):Array.prototype.slice.call(e)}!function(){function r(e){var t="",n=!0;return e.forEach(function(e){var r=encodeURIComponent(e.name),a=encodeURIComponent(e.value);n||(t+="&"),t+=r+"="+a,n=!1}),t.replace(/%20/g,"+")}function a(e,t){var n=e.split("&");t&&-1===n[0].indexOf("=")&&(n[0]="="+n[0]);var r=[];n.forEach(function(e){if(0!==e.length){var t=e.indexOf("=");if(-1!==t)var n=e.substring(0,t),a=e.substring(t+1);else n=e,a="";n=n.replace(/\+/g," "),a=a.replace(/\+/g," "),r.push({name:n,value:a})}});var a=[];return r.forEach(function(e){a.push({name:decodeURIComponent(e.name),value:decodeURIComponent(e.value)})}),a}function i(e){if(c)return new s(e);var t=document.createElement("a");return t.href=e,t}function o(e){var i=this;this._list=[],e===undefined||null===e||(e instanceof o?this._list=a(String(e)):"object"==typeof e&&t(e)?n(e).forEach(function(e){if(!t(e))throw TypeError();var r=n(e);if(2!==r.length)throw TypeError();i._list.push({name:String(r[0]),value:String(r[1])})}):"object"==typeof e&&e?Object.keys(e).forEach(function(t){i._list.push({name:String(t),value:String(e[t])})}):(e=String(e),"?"===e.substring(0,1)&&(e=e.substring(1)),this._list=a(e))),this._url_object=null,this._setList=function(e){u||(i._list=e)};var u=!1;this._update_steps=function(){u||(u=!0,i._url_object&&("about:"===i._url_object.protocol&&-1!==i._url_object.pathname.indexOf("?")&&(i._url_object.pathname=i._url_object.pathname.split("?")[0]),i._url_object.search=r(i._list),u=!1))}}function u(e,t){var n=0;this.next=function(){if(n>=e.length)return{done:!0,value:undefined};var r=e[n++];return{done:!1,value:"key"===t?r.name:"value"===t?r.value:[r.name,r.value]}}}function l(t,n){function r(){var e=l.href.replace(/#$|\?$|\?(?=#)/g,"");l.href!==e&&(l.href=e)}function u(){m._setList(l.search?a(l.search.substring(1)):[]),m._update_steps()}if(!(this instanceof e.URL))throw new TypeError("Failed to construct 'URL': Please use the 'new' operator.");n&&(t=function(){if(c)return new s(t,n).href;var e;try{var r;if("[object OperaMini]"===Object.prototype.toString.call(window.operamini)?(e=document.createElement("iframe"),e.style.display="none",document.documentElement.appendChild(e),r=e.contentWindow.document):document.implementation&&document.implementation.createHTMLDocument?r=document.implementation.createHTMLDocument(""):document.implementation&&document.implementation.createDocument?(r=document.implementation.createDocument("http://www.w3.org/1999/xhtml","html",null),r.documentElement.appendChild(r.createElement("head")),r.documentElement.appendChild(r.createElement("body"))):window.ActiveXObject&&(r=new window.ActiveXObject("htmlfile"),r.write("<head></head><body></body>"),r.close()),!r)throw Error("base not supported");var a=r.createElement("base");a.href=n,r.getElementsByTagName("head")[0].appendChild(a);var i=r.createElement("a");return i.href=t,i.href}finally{e&&e.parentNode.removeChild(e)}}());var l=i(t||""),f=function(){if(!("defineProperties"in Object))return!1;try{var e={};return Object.defineProperties(e,{prop:{get:function(){return!0}}}),e.prop}catch(t){return!1}}(),h=f?this:document.createElement("a"),m=new o(l.search?l.search.substring(1):null);return m._url_object=h,Object.defineProperties(h,{href:{get:function(){return l.href},set:function(e){l.href=e,r(),u()},enumerable:!0,configurable:!0},origin:{get:function(){return"origin"in l?l.origin:this.protocol+"//"+this.host},enumerable:!0,configurable:!0},protocol:{get:function(){return l.protocol},set:function(e){l.protocol=e},enumerable:!0,configurable:!0},username:{get:function(){return l.username},set:function(e){l.username=e},enumerable:!0,configurable:!0},password:{get:function(){return l.password},set:function(e){l.password=e},enumerable:!0,configurable:!0},host:{get:function(){var e={"http:":/:80$/,"https:":/:443$/,"ftp:":/:21$/}[l.protocol];return e?l.host.replace(e,""):l.host},set:function(e){l.host=e},enumerable:!0,configurable:!0},hostname:{get:function(){return l.hostname},set:function(e){l.hostname=e},enumerable:!0,configurable:!0},port:{get:function(){return l.port},set:function(e){l.port=e},enumerable:!0,configurable:!0},pathname:{get:function(){return"/"!==l.pathname.charAt(0)?"/"+l.pathname:l.pathname},set:function(e){l.pathname=e},enumerable:!0,configurable:!0},search:{get:function(){return l.search},set:function(e){l.search!==e&&(l.search=e,r(),u())},enumerable:!0,configurable:!0},searchParams:{get:function(){return m},enumerable:!0,configurable:!0},hash:{get:function(){return l.hash},set:function(e){l.hash=e,r()},enumerable:!0,configurable:!0},toString:{value:function(){return l.toString()},enumerable:!1,configurable:!0},valueOf:{value:function(){return l.valueOf()},enumerable:!1,configurable:!0}}),h}var c,s=e.URL;try{if(s){if("searchParams"in(c=new e.URL("http://example.com")))return;"href"in c||(c=undefined)}}catch(h){}if(Object.defineProperties(o.prototype,{append:{value:function(e,t){this._list.push({name:e,value:t}),this._update_steps()},writable:!0,enumerable:!0,configurable:!0},"delete":{value:function(e){for(var t=0;t<this._list.length;)this._list[t].name===e?this._list.splice(t,1):++t;this._update_steps()},writable:!0,enumerable:!0,configurable:!0},get:{value:function(e){for(var t=0;t<this._list.length;++t)if(this._list[t].name===e)return this._list[t].value;return null},writable:!0,enumerable:!0,configurable:!0},getAll:{value:function(e){for(var t=[],n=0;n<this._list.length;++n)this._list[n].name===e&&t.push(this._list[n].value);return t},writable:!0,enumerable:!0,configurable:!0},has:{value:function(e){for(var t=0;t<this._list.length;++t)if(this._list[t].name===e)return!0;return!1},writable:!0,enumerable:!0,configurable:!0},set:{value:function(e,t){for(var n=!1,r=0;r<this._list.length;)this._list[r].name===e?n?this._list.splice(r,1):(this._list[r].value=t,n=!0,++r):++r;n||this._list.push({name:e,value:t}),this._update_steps()},writable:!0,enumerable:!0,configurable:!0},entries:{value:function(){return new u(this._list,"key+value")},writable:!0,enumerable:!0,configurable:!0},keys:{value:function(){return new u(this._list,"key")},writable:!0,enumerable:!0,configurable:!0},values:{value:function(){return new u(this._list,"value")},writable:!0,enumerable:!0,configurable:!0},forEach:{value:function(e){var t=arguments.length>1?arguments[1]:undefined;this._list.forEach(function(n,r){e.call(t,n.value,n.name)})},writable:!0,enumerable:!0,configurable:!0},toString:{value:function(){return r(this._list)},writable:!0,enumerable:!1,configurable:!0}}),"Symbol"in e&&"iterator"in e.Symbol&&(Object.defineProperty(o.prototype,e.Symbol.iterator,{value:o.prototype.entries,writable:!0,enumerable:!0,configurable:!0}),Object.defineProperty(u.prototype,e.Symbol.iterator,{value:function(){return this},writable:!0,enumerable:!0,configurable:!0})),s)for(var f in s)s.hasOwnProperty(f)&&"function"==typeof s[f]&&(l[f]=s[f]);e.URL=l,e.URLSearchParams=o}(),function(){if("1"!==new e.URLSearchParams([["a",1]]).get("a")||"1"!==new e.URLSearchParams({a:1}).get("a")){var r=e.URLSearchParams;e.URLSearchParams=function(e){if(e&&"object"==typeof e&&t(e)){var a=new r;return n(e).forEach(function(e){if(!t(e))throw TypeError();var r=n(e);if(2!==r.length)throw TypeError();a.append(r[0],r[1])}),a}return e&&"object"==typeof e?(a=new r,Object.keys(e).forEach(function(t){a.set(t,e[t])}),a):new r(e)}}}()}(self);}).call('object' === typeof window && window || 'object' === typeof self && self || 'object' === typeof global && global || {});
\ No newline at end of file
... ...
import http from "../script/http.js";
/**
* 获取配置信息
* <p>
* 作者: Wang
* 时间:2022/7/26 11:18
*/
const getOptions = (opt) => {
if (!opt) {
opt = {};
}
return Object.assign({
showLoadding: true,// 展示加载库,默认展示
needToken: true,// 是否需要token,默认true
asSync: true // 是否同步请求,
}, opt);
}
/**
* 发送get请求
* @param url 请求地址
* @param params 请求参数
* @param options 配置参数
* {
* showLoadding : true ,// 展示加载库,默认展示
* needToken:true,// 是否需要token,默认true
* asSync:true // 是否同步请求,
* }
* @returns {Promise<unknown>}
*/
export const get = (url, params, options) => {
params = params || {};
var option = getOptions(options);
return new Promise((resolve, reject) => {
// 发送请求
http.get(url, params,function (res){
resolve(res);
},function (res){
reject(res);
},option.showLoadding,option.needToken,option.asSync);
})
}
/**
* 发送get请求
* @param url 请求地址
* @param params 请求参数
* @param options 配置参数
* {
* showLoadding : true ,// 展示加载库,默认展示
* needToken:true,// 是否需要token,默认true
* asSync:true // 是否同步请求,
* }
* @returns {Promise<unknown>}
*/
export const post = (url, params, options) => {
params = params || {};
var option = getOptions(options);
return new Promise((resolve, reject) => {
// 发送请求
http.post(url, params,function (res){
resolve(res);
},function (res){
reject(res);
},option.showLoadding,option.needToken,option.asSync);
})
}
... ...
import {get, post} from './BaseApi.js'
/**
* 获取巡检组以及组下的用户
* @returns {Promise<*>}
*/
const getGroupAndGroupUser = () => {
return get('/api-log/log/groupUser', {});
}
/**
* 组统计
* @param params /api-log/user/log?userName=&id=&startTime=&endTime=&timeType=
* @returns {Promise<*>}
*/
const stackedGraphGroup = (params) => {
return get('/api-log/log/group', params);
}
/**
* 用户统计
* @param params /api-log/log/user?userName=&id=1&startTime=&endTime=&timeType=
* @returns {Promise<*>}
*/
const stackedGraphUser = (params) => {
return get('/api-log/log/user', params);
}
/**
* 获取操作日志列表
* @param params /api-log/log/groupList?userName=&id=1&startTime=&endTime=&timeType=&access_token=0f7119f9-9b86-4c9e-a122-ba651c9eea7a
* @returns {Promise<*>}
*/
const getOperationLogList = (params) => {
return get('/api-log/log/groupList', params);
}
export default {
getGroupAndGroupUser,
stackedGraphGroup,
stackedGraphUser,
getOperationLogList
}
... ...
<el-breadcrumb>
<el-breadcrumb-item v-for="item in linkInfo">
<el-tooltip placement="top">
<template #content>{{item.flag ? '已存在操作记录' : '未查询到操作记录'}}</template>
<div :style="{color:(item.flag ? '#67C23A' : '#F56C6C')}">{{item.name}}</div>
</el-tooltip>
</el-breadcrumb-item>
</el-breadcrumb>
... ...
export default {
name: "operationLogLink",
template: '',
props: {
opLink: {
type: String,
default: '',
},
opLinkSource: {
type: String,
default: '',
},
},
setup(props) {
const linkInfo = Vue.ref([]);
const getLinkInfo = () => {
let l = props.opLink.split(' => ');
let ls = props.opLinkSource.split(' => ')
for (let i = 0; i < ls.length; i++) {
let itemName = ls[i];
let linkDetail = {
name: itemName,
flag: l.includes(itemName)
}
linkInfo.value.push(linkDetail);
}
}
Vue.onMounted(() => {
getLinkInfo();
});
return {
linkInfo
}
}
}
... ...
import store from '/vue3/src/store/index.js'
/**
* 获取接口数据
* @param storeApiName store中apide
* @param params
*/
export function useGetData(storeApiName, params) {
const data = Vue.ref({})
const error = Vue.ref('')
const flag = Vue.ref(false);
let api = store.dispatch(storeApiName, params);
if (!api) {
let msg = "无效的请求";
console.log(`${msg},API:${storeApiName} params:${params}`)
error.value = msg
return {data, error}
}
api.then((json) => {
data.value = json;
flag.value = true;
}).catch((err) => {
data.value.success = false;
error.value = err
flag.value = true;
});
return {data, error, flag}
}
... ...
“组合式函数”(Composables) 是一个利用 Vue 的组合式 API 来封装和复用有状态逻辑的函数。
命名#
组合式函数约定用驼峰命名法命名,并以“use”作为开头。
文档:
https://cn.vuejs.org/guide/reusability/composables.html#mouse-tracker-example
... ...
... ... @@ -54,48 +54,25 @@ Promise.all([
.component('cm-user-type-tree-input', Vue.defineAsyncComponent(() => myImport('components/common/inputusertree/index')))
//菜单下拉树
.component('cm-tree-select-menu', Vue.defineAsyncComponent(() => myImport('components/common/treeSelectMenu/index')));
// // 自定义指令
// app.directive('permissions', {
// // 当被绑定的元素插入到 DOM 中时……
// mounted(el, binding, vnode) {
// debugger
// let p = sessionStorage.getItem('permissions')
// let val = binding.value;
// if (p && val) {
// let arr = p.split(',');
//
// if (arr.indexOf(val) == -1) {
// // 删除元素
// el.parentNode && el.parentNode.removeChild(el)
// }
// }
// }
// })
//start lsq 设置ajax请求增加headers参数 2022-09-20
let setAjaxData=(val)=>{
let p = window.top.location.hash;
if (p) {
let arr = p.split('#/');
if(arr && arr.length>1){
let menuPath=arr[1];
//title的值
let nameText=$(window.top.document).find("[lay-id='/"+menuPath+"'] span").text();
if(val){
nameText=val;
// 自定义指令 授权按钮
app.directive('permissions', {
// 当被绑定的元素插入到 DOM 中时……
mounted(el, binding, vnode) {
let p = sessionStorage.getItem('permissions')
let val = binding.value;
if (p && val) {
let arr = p.split(',');
if (arr.indexOf(val) == -1) {
// 删除元素
el.parentNode && el.parentNode.removeChild(el)
}
let name=encodeURIComponent(nameText)
$.ajaxSetup({
headers:{
menuPath:menuPath,
elementName:name
}
});
}
}
}
setAjaxData();
//end lsq 2022-09-20
})
app.config.globalProperties.$global = res[3].default
app.config.globalProperties.$http = res[4].default
app.mount('#app'); // 挂载Vue的app实例
})
\ No newline at end of file
})
... ...
... ... @@ -183,6 +183,12 @@ const routes = [{
path: '/vue3/operationLog',
name: 'operationLog',
component: () => myImport('views/operationLog/index')
},
//操作日志 - 用户列表
{
path: '/vue3/operationLog/userList',
name: 'operationLogUserList',
component: () => myImport('views/operationLog/userList')
}
];
... ...
import operationLog from './modules/operationLog.js'
export default Vuex.createStore({
state: {},
getters: {},
mutations: {},
actions: {},
modules: {}
modules: {
operationLog
}
})
... ...
import operationLog from '../../api/operationLog.js';
export default {
state: {},
mutations: {},
getters: {},
actions: {
stackedGraphGroup(context, params) {
return operationLog.stackedGraphGroup(params);
},
stackedGraphUser(context, params) {
return operationLog.stackedGraphUser(params);
},
getGroupAndGroupUser(context, params) {
return operationLog.getGroupAndGroupUser(params);
},
getOperationLogList(context, params) {
return operationLog.getOperationLogList(params);
},
}
};
... ...
<div :style="{'height':height+'px','max-height':height+'px'}" class="container operation-log-container">
<div :style="{'height':height+'px','max-height':height+'px'}" class="container">
<div :style="{'min-height':height+'px','max-height':height+'px','height':'100%'}" class="cm-card">
<!-- 搜索区域 -->
<el-row>
<el-col :span="14" class="search-item">
<div class="search">
<div class="operation-log-search">
<el-button-group class="ml-4">
<el-button :size="$global.elementConfig.size.button" :type="search.status == 1 ? 'primary' : ''"
@click="getDataList(1)">用户名
</el-button>
<el-button :size="$global.elementConfig.size.button" :type="search.status == 2 ? 'primary' : ''"
@click="getDataList(2)">巡检组
</el-button>
</el-button-group>
</div>
</div>
<div class="echart-con">
<div class="echart-left">
<div class="echart-title">巡检点击完成统计</div>
<div class="echart-chart">
<LineChart :optionData="optionData" v-if="optionData"></LineChart>
</div>
</div>
<el-col :span="14" class="search">
<div>
<el-select v-model="search.groupId" clearable v-if="groupList && groupList.length > 0"
:size="$global.elementConfig.size.input" placeholder="请选择巡检组" @change="getGroupUser">
<el-option
v-for="item in groupList"
:key="item.groupId"
:label="item.groupName"
:value="item.groupId"/>
</el-select>
<el-select v-model="search.userId" clearable class="m-l-6" :size="$global.elementConfig.size.input"
placeholder="请选择用户">
<el-option
v-for="item in userList"
:key="item.username"
:label="item.nickName"
:value="item.username"/>
</el-select>
</div>
</el-col>
<el-col :span="10" class="search">
<el-button-group class="ml-4">
<el-button :size="$global.elementConfig.size.button"
:type="search.dateType == 'yesterday' ? 'primary' : ''"
@click="loadPage('yesterday')">昨天
</el-button>
<el-button :size="$global.elementConfig.size.button"
:type="search.dateType == 'today' ? 'primary' : ''"
@click="loadPage('today')">今天
</el-button>
<el-button :size="$global.elementConfig.size.button"
:type="search.dateType == 'lastWeek' ? 'primary' : ''"
@click="loadPage('lastWeek')">上周
</el-button>
<el-button :size="$global.elementConfig.size.button"
:type="search.dateType == 'thisWeek' ? 'primary' : ''"
@click="loadPage('thisWeek')">本周
</el-button>
<el-button :size="$global.elementConfig.size.button"
:type="search.dateType == 'thisMonth' ? 'primary' : ''"
@click="loadPage('thisMonth')">本月
</el-button>
<el-button style="border-radius: 0;" :size="$global.elementConfig.size.button"
:type="search.dateType == 'all' ? 'primary' : ''"
@click="loadPage('all')">全部
</el-button>
</el-button-group>
<el-date-picker
:size="$global.elementConfig.size.input"
style="width:150px;border-radius: 0 4px 4px 0;"
end-placeholder="结束日期"
format="YYYY-MM-DD"
range-separator="-"
start-placeholder="开始日期"
type="daterange"
v-model="search.dateTime"
value-format="YYYY-MM-DD"
:prefix-icon="'none'"
@focus="dateFocus"
@change="dateChange"/>
<el-button :size="$global.elementConfig.size.button" class="m-l-6" type="primary" @click="loadPage('')">
查询
</el-button>
</el-col>
<el-col :span="10">
<div class="search">
<div class="operation-log-search">
<el-button-group class="ml-4">
<el-button :size="$global.elementConfig.size.button" :type="search.status == 'yesterday' ? 'primary' : ''"
@click="getDataList('yesterday')">昨天
</el-button>
<el-button :size="$global.elementConfig.size.button" :type="search.status == 'today' ? 'primary' : ''"
@click="getDataList('today')">今天
</el-button>
<el-button :size="$global.elementConfig.size.button" :type="search.status == 'lastWeek' ? 'primary' : ''"
@click="getDataList('lastWeek')">上周
</el-button>
<el-button :size="$global.elementConfig.size.button" :type="search.status == 'thisWeek' ? 'primary' : ''"
@click="getDataList('thisWeek')">本周
</el-button>
<el-button :size="$global.elementConfig.size.button" :type="search.status == 'thisMonth' ? 'primary' : ''"
@click="getDataList('thisMonth')">本月
</el-button>
<el-button style="border-radius: 0;" :size="$global.elementConfig.size.button" :type="search.status == 'all' ? 'primary' : ''"
@click="getDataList('all')">全部
</el-button>
</el-button-group>
<el-date-picker
:size="$global.elementConfig.size.input"
style="width:150px;border-radius: 0 4px 4px 0;"
end-placeholder="结束日期"
format="YYYY-MM-DD"
range-separator="-"
start-placeholder="开始日期"
type="daterange"
v-model="search.dateTime"
value-format="YYYY-MM-DD"
:prefix-icon="'none'"
@focus="dateFocus"
@change="dateChange"
/>
</div>
</el-row>
<!--统计区区域-->
<el-row>
<el-col :span="12" class="p-r-3">
<h3 class="page-item-title-h3">巡检点击完成统计</h3>
<div class="page-item-content" style="height: 300px">
<LineChart :optionData="stackedGraphGroupData" v-if="stackedGraphGroupData"></LineChart>
</div>
<div class="echart-con">
<div class="echart-right">
<div class="echart-title">人员功能点击量</div>
<div class="echart-chart">
<LineChart :optionData="optionDataR" v-if="optionDataR"></LineChart>
</div>
</div>
</el-col>
<el-col :span="12" class="p-l-3">
<h3 class="page-item-title-h3">人员功能点击量</h3>
<div class="page-item-content" style="height: 300px">
<LineChart :optionData="stackedGraphUserData" v-if="stackedGraphUserData"></LineChart>
</div>
</el-col>
</el-row>
<div class="container-none"></div>
<div class="search-table">
<!--表格区域-->
<div class="p-6">
<cm-table-page :columns="tableData.columns" :dataList="tableData.dataList"
:height="height - 110"
:height="height - 480"
:pageSizes='[10,20,50,100, 200, 300, 400]'
:loading="false"
:pageSize="pageSize"
:showBorder="true"
... ... @@ -89,16 +101,19 @@
:total="tableData.count"
@loaddata="loaddata">
<template #default="{row,prop,column}">
<div v-if="prop == 'link'">
<operationLogLink :opLink="row.link" :opLinkSource="row.linkSource"></operationLogLink>
</div>
<div v-if="prop == 'dwellTime'">
{{row.dwellTime}}
<el-tooltip placement="top">
<template #content>统计规则<br/>当前操作路径的<span style="color: #67C23A">首次操作时间({{row.createTime}})</span><span style="color: #67C23A">最后一次的操作时间({{row.endTime}})</span>的间隔</template>
<i class="iconfont icon-tishi"style="position: absolute;right: 5px;"></i>
</el-tooltip>
</div>
</template>
</cm-table-page>
</div>
</div>
</div>
<!--新增编辑弹框-->
<cm-dialog :showDialogVisible="dialog.show" :showFooter="false" :title="dialog.title" @hidedialog="hideDialog">
<template v-slot>
</template>
</cm-dialog>
... ...
import operationLogService from "./operationLogService.js";
export default {
name: 'operationLog',
template: '',
components: {
'LineChart': Vue.defineAsyncComponent(
() => myImport('views/page/components/lineChart/index')
),
'operationLogLink': Vue.defineAsyncComponent(
() => myImport('components/page/operationLog/operationLogLink')
)
},
props: [],
setup(props, {attrs, slots, emit}) {
const {proxy} = Vue.getCurrentInstance();
let isView = Vue.ref(false);
let height = Vue.ref(window.innerHeight);
let optionData = Vue.ref('');
let optionDataR = Vue.ref('');
let series = Vue.ref([]);
let seriesR = Vue.ref([]);
let names = Vue.ref(['智能综合巡检系统', '数据中心虚拟化', '备份系统']);
let namesR = Vue.ref(['吴斌斌','袁晋鹏'])
let kpiName=Vue.ref('');
let kpiNameR = Vue.ref('');
let kpiUnit=Vue.ref('');
let kpiUnitR=Vue.ref('');
let colorsArr = Vue.ref([
{
start: '#468ced',
end: '#68a5fa'
},
{
start: '#79dda1',
end: '#9bddb5'
let height = Vue.ref(window.innerHeight - 10);
let groupList = Vue.ref([]);
let userList = Vue.ref([]);
let stackedGraphGroupData = Vue.ref({});
let stackedGraphUserData = Vue.ref({});
// 搜索
let search = Vue.ref({
groupId: '',
userId: '',
dateType: 'today',
dateTime: '',
page: 1,
limit: 20,
});
/**
* 初始化报表
*/
const loadPage = (dateType) => {
// 加载表格内容
if (dateType && dateType != '') {
// 设置最新的类型
search.value.dateType = dateType;
} else {
// 获取当前点击的配置
dateType = search.value.dateType;
}
])
const optionDataInit = () => {
optionData.value = {
tooltip: {
trigger: 'axis',
formatter: function (param) {
var tips = kpiName.value + " " + param[0].name + "<br/>";
$.each(param, function (i, v) {
tips += v.marker + " " + v.seriesName + ":" + v.value + kpiUnit.value + "</br>"
});
return tips;
}
},
legend: {
show: true
},
grid: {
top: '10%',
left: '3%',
right: '4%',
bottom: '5%',
containLabel: true
},
toolbox: {
feature: {
saveAsImage: {
show: false
}
}
},
xAxis: {
type: 'category',
data: names.value,
axisLine: {
lineStyle: {
color: '#c9c9c9'
}
},
axisLabel: {
color: '#232425',
showMaxLabel: true,
lineHeight:18,
formatter: function (params) {
var newParamsName = '';
let paramsNameNumber = params.length;
let provideNumber = 4;
let rowNumber = Math.ceil(paramsNameNumber / provideNumber);
if (paramsNameNumber > provideNumber) {
for (let i = 0; i < rowNumber; i++) {
let tempStr = '';
let start = i * provideNumber;
let end = start + provideNumber;
if (i == rowNumber - 1) {
tempStr = params.substring(start, paramsNameNumber);
} else {
tempStr = params.substring(start, end) + "\n";
}
newParamsName += tempStr;
}
} else {
newParamsName = params;
}
return newParamsName;
}
},
splitArea: {
show: true,
areaStyle: {
color: ['rgba(200,200,200,0.1)', 'transparent'
]
}
}
},
yAxis: {
type: 'value',
scale: true,
min:0,
boundaryGap: ['10%', '10%'],
axisLine: {
lineStyle: {
color: '#232425'
},
show: false
},
axisTick: {
show: false
},
splitLine: {
lineStyle: {
color: ['#ddd'],
type: 'dotted',
if (dateType != 'dateRange') {
search.value.dateTime = [];
} else {
if (search.value.dateTime && search.value.dateTime.length == 0) {
// 时间范围
proxy.$global.showMsg("请选择开始结束时间!", "warning");
return;
}
}
}
}
},
series: series.value
};
optionDataR.value= {
tooltip: {
trigger: 'axis',
formatter: function (param) {
var tips = kpiName.value + " " + param[0].name + "<br/>";
$.each(param, function (i, v) {
tips += v.marker + " " + v.seriesName + ":" + v.value + kpiUnit.value + "</br>"
});
return tips;
}
},
legend: {
show: true
},
grid: {
top: '10%',
left: '3%',
right: '4%',
bottom: '5%',
containLabel: true
},
toolbox: {
feature: {
saveAsImage: {
show: false
}
}
},
xAxis: {
type: 'category',
data: namesR.value,
axisLine: {
lineStyle: {
color: '#c9c9c9'
}
},
axisLabel: {
color: '#232425',
showMaxLabel: true,
lineHeight:18,
formatter: function (params) {
var newParamsName = '';
let paramsNameNumber = params.length;
let provideNumber = 4;
let rowNumber = Math.ceil(paramsNameNumber / provideNumber);
if (paramsNameNumber > provideNumber) {
for (let i = 0; i < rowNumber; i++) {
let tempStr = '';
let start = i * provideNumber;
let end = start + provideNumber;
if (i == rowNumber - 1) {
tempStr = params.substring(start, paramsNameNumber);
} else {
tempStr = params.substring(start, end) + "\n";
}
newParamsName += tempStr;
}
} else {
newParamsName = params;
}
return newParamsName;
}
},
splitArea: {
show: true,
areaStyle: {
color: ['rgba(200,200,200,0.1)', 'transparent'
]
}
}
},
yAxis: {
type: 'value',
scale: true,
boundaryGap: ['10%', '10%'],
axisLine: {
lineStyle: {
color: '#232425'
},
show: false
},
axisTick: {
show: false
},
splitLine: {
lineStyle: {
color: ['#ddd'],
type: 'dotted',
let startTime = '';
let endTime = ''
if (search.value.dateTime && search.value.dateTime.length > 0) {
startTime = search.value.dateTime[0];
endTime = search.value.dateTime[1];
}
let params = {
page: search.value.page,
limit: search.value.limit,
id: search.value.groupId,
userName: search.value.userId,
timeType: search.value.dateType,
startTime: startTime,
endTime: endTime
}
}
}
},
series: seriesR.value
};
// 组统计
operationLogService.stackedGraphGroupInit(params, stackedGraphGroupData);
// 用户统计
operationLogService.stackedGraphUserInit(params, stackedGraphUserData);
// 下拉列表选项
operationLogService.getOperationLogGroupAndUserList(groupList);
// 查询列表
operationLogService.pageList(params,tableData);
}
let rateData=Vue.ref([
{name:'应点击量',data:[1,34,12]},
{name:'实际点击量',data:[15,24,10]}
])
let rateDataR=Vue.ref([
{name:'',data:[1,6,8,9,10]},
])
const setSeries = () => {
series.value = [];
$.each(rateData.value, function (i, v) {
series.value.push({
name: v.name,
type: 'bar',
barWidth: 16,//设置柱状图大小
data: v.data,
stack:'total',
symbolSize: 12,
symbol: 'circle',
itemStyle: {
normal: {
// color: colorsArr.value[i].start //图标颜色
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ //关键在这里, 设置面积渐变
offset: 0,
color: colorsArr.value[i].start //这里是我设置的渐变的颜色从线条颜色变为透明
}, {
offset: 1,
color: colorsArr.value[i].end
}])
}
}
})
});
seriesR.value = [];
$.each(rateDataR.value, function (i, v) {
seriesR.value.push({
name: v.name,
type: 'bar',
barWidth: 16,//设置柱状图大小
data: v.data,
stack:'noStack',
symbolSize: 12,
symbol: 'circle',
itemStyle: {
normal: {
// color: colorsArr.value[i].start //图标颜色
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ //关键在这里, 设置面积渐变
offset: 0,
color: colorsArr.value[i].start //这里是我设置的渐变的颜色从线条颜色变为透明
}, {
offset: 1,
color: colorsArr.value[i].end
}])
},
borderRadius:[3,3,0,0]
}
})
/**
* 变更巡检组,获取用户列表
* @param val
*/
const getGroupUser = (val) => {
let group = groupList.value.filter(item => {
if (item.groupId === val) {
return item;
}
});
if(group && group.length > 0){
userList.value = group[0].groupUser;
}
}
/**
* 分页事件,加载数据
* @param page
* @param limit
*/
const loaddata = ({page, limit}) => {
search.value.page = page;
search.value.limit = limit;
optionDataInit();
loadPage('');
}
let search = Vue.ref({
status: 'today',
dateTime:'',
keyword: '',
page: 1,
limit: 10,
});
let dialog = Vue.ref({
title: "处理审批",
show: false,
amId: '',
amStatus: 0,
alarmId: '',
});
//表格字段
let tableData = Vue.ref({
... ... @@ -305,143 +116,122 @@ export default {
dataList: [],
columns: [
{
prop: 'alarmNo',
prop: 'groupName',
label: '组名称',
sortable: true,
align: 'center',
width: '180'
},
{
prop: 'nickName',
label: '用户名',
sortable: true,
align: 'center',
width: '150'
},
{
prop: 'resName',
prop: 'createTime',
label: '时间',
sortable: true,
align: 'center',
width: '250',
width: '170',
},
{
prop: 'resTypeName',
prop: 'ip',
label: 'IP地址',
sortable: true,
align: 'center',
width: '150'
}, {
prop: 'managenameName',
prop: 'link',
label: '访问位置',
sortable: true,
align: 'center',
}, {
prop: 'reason',
prop: 'dwellTime',
label: '停留总时长',
sortable: true,
align: 'center',
width: '120'
width: '150'
}
]
})
//点击时间选择时,其他按钮不高亮
let dateFocus=()=>{
search.value.status = 'dateRange';
let dateFocus = () => {
search.value.dateType = 'dateRange';
}
//时间更改事件
let dateChange=(val)=>{
console.log(val,search.value.dateTime)
getDataList('dateRange')
}
//获取aj配置信息
let statusVal = Vue.ref('today');
let getDataList = (status) => {
if (status == undefined) {
status = 'today'
}
if(status != 'dateRange'){
search.value.dateTime=[];
}
statusVal.value = status;
search.value.status = status;
let startTime='';
let endTime=''
if(search.value.dateTime && search.value.dateTime.length>0){
startTime=search.value.dateTime[0];
endTime=search.value.dateTime[1];
}
let params={
page: search.value.page,
limit: search.value.limit,
keyword: search.value.keyword,
status: search.value.status,
startTime:startTime,
endTime:endTime
}
proxy.$http.get(`/api-web/bAlarmManage/page`, params, function (res) {
if (res && res.data) {
tableData.value.dataList = res.data;
tableData.value.count = res.count;
} else {
tableData.value.dataList = [];
tableData.value.count = 0;
}
});
let dateChange = (val) => {
loadPage('dateRange')
}
let loaddata = ({page, limit}) => {
search.value.page = page;
search.value.limit = limit;
}
// let getDataList = (dateType) => {
// if (dateType) {
// // 设置最新的类型
// search.value.dateType = dateType;
// } else {
// // 获取当前点击的配置
// dateType = search.value.dateType;
// }
//
// if (dateType != 'dateRange') {
// search.value.dateTime = [];
// } else {
// if (search.value.dateTime && search.value.dateTime.length == 0) {
// // 时间范围
// proxy.$global.showMsg("请选择开始结束时间!", "warning");
// return;
// }
// }
//
// let startTime = '';
// let endTime = ''
// if (search.value.dateTime && search.value.dateTime.length > 0) {
// startTime = search.value.dateTime[0];
// endTime = search.value.dateTime[1];
// }
// let params = {
// page: search.value.page,
// limit: search.value.limit,
// id: search.value.groupId,
// userName: search.value.userId,
// timeType: search.value.dateType,
// startTime: startTime,
// endTime: endTime
// }
// // // 查询列表
// operationLogService.pageList(params,tableData);
//
// }
let hideDialog = (flg) => {
dialog.value.show = flg;
if (!flg) {
getDataList(dialog.value.amStatus)
}
}
// 处理弹框
let handle = (row, flag) => {
isView.value = flag;
hideDialog(true);
dialog.value.amId = row.id;
dialog.value.amStatus = row.status;
dialog.value.alarmId = row.alarmId;
}
//审核保存后关闭弹框
let saveback = (val) => {
hideDialog(val)
}
let loginName = Vue.ref(localStorage.getItem('lgn'));
// 挂载完
Vue.onMounted(() => {
getDataList();
setSeries();
// 默认加载搜索条件、统计图、表格
loadPage();
})
return {
loginName,
height,
optionData,
optionDataInit,
series,
names,
rateData,
optionDataR,
seriesR,
namesR,
rateDataR,
setSeries,
groupList,
userList,
// 搜索条件
search,
getGroupUser,
dateFocus,
dateChange,
dialog,
hideDialog,
search,
tableData,
stackedGraphGroupData,
stackedGraphUserData,
// 搜索数据
loadPage,
loaddata,
getDataList,
handle,
saveback,
statusVal,
isView
// 表格数据
tableData
}
}
... ...
import {useGetData} from '/vue3/src/composables/usePageCurd.js'
const getSeriesData = (resData) => {
let series = [];
let colorsArr = [
{
start: '#468ced',
end: '#68a5fa'
},
{
start: '#79dda1',
end: '#9bddb5'
}
];
$.each(resData, function (i, v) {
series.push({
name: v.name,
type: 'bar',
barWidth: 16,//设置柱状图大小
data: v.data,
stack: 'total',
symbolSize: 12,
symbol: 'circle',
itemStyle: {
normal: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ //关键在这里, 设置面积渐变
offset: 0,
color: colorsArr[i].start //这里是我设置的渐变的颜色从线条颜色变为透明
}, {
offset: 1,
color: colorsArr[i].end
}])
}
}
})
});
return series;
}
const getOptionData = (rateData, barNames) => {
let seriesData = getSeriesData(rateData);
return {
tooltip: {
trigger: 'axis',
formatter: function (param) {
var tips = param[0].name + "<br/>";
$.each(param, function (i, v) {
tips += v.marker + " " + v.seriesName + ":" + v.value + "</br>"
});
return tips;
}
},
legend: {
show: true
},
grid: {
top: '10%',
left: '3%',
right: '4%',
bottom: '5%',
containLabel: true
},
toolbox: {
feature: {
saveAsImage: {
show: false
}
}
},
xAxis: {
type: 'category',
data: barNames,
axisLine: {
lineStyle: {
color: '#c9c9c9'
}
},
axisLabel: {
color: '#232425',
showMaxLabel: true,
lineHeight: 18,
formatter: function (params) {
var newParamsName = '';
let paramsNameNumber = params.length;
let provideNumber = 4;
let rowNumber = Math.ceil(paramsNameNumber / provideNumber);
if (paramsNameNumber > provideNumber) {
for (let i = 0; i < rowNumber; i++) {
let tempStr = '';
let start = i * provideNumber;
let end = start + provideNumber;
if (i == rowNumber - 1) {
tempStr = params.substring(start, paramsNameNumber);
} else {
tempStr = params.substring(start, end) + "\n";
}
newParamsName += tempStr;
}
} else {
newParamsName = params;
}
return newParamsName;
}
},
splitArea: {
show: true,
areaStyle: {
color: ['rgba(200,200,200,0.1)', 'transparent'
]
}
}
},
yAxis: {
type: 'value',
scale: true,
min: 0,
boundaryGap: ['10%', '10%'],
axisLine: {
lineStyle: {
color: '#232425'
},
show: false
},
axisTick: {
show: false
},
splitLine: {
lineStyle: {
color: ['#ddd'],
type: 'dotted',
}
}
},
series: seriesData
};
}
const operationLogService = {
/**
* 获取操作日志分组用户列表
* @param type group 组 user 用户
* @param groupId 组id
* @param outData1 输出数据
* @returns [{
* groupName: '组1',
* groupId: '1',
* groupUser: [{username: 'admin', nickName: '管理员ad'},
* {username: 'root', nickName: '管理员ad1'},
* {username: 'admin1', nickName: '管理员ad1'}]
* }]
*/
getOperationLogGroupAndUserList: (outGroupData) => {
const {data, error} = useGetData('getGroupAndGroupUser', {});
Vue.watchEffect(() => {
if (data.value && data.value.data) {
outGroupData.value = data.value.data;
}
})
},
/**
* 堆叠图-按照巡检组统计
* 样例数据:
* let data = {
* nameList: ['智能综合巡检系统', '数据中心虚拟化', '备份系统'],
* dataList: [
* {name: '应点击量', data: [1, 34, 12]},
* {name: '实际点击量', data: [15, 24, 10]}
* ]
* }
*/
stackedGraphGroupInit: (params, outData) => {
const {data, error} = useGetData('stackedGraphGroup', params);
Vue.watchEffect(() => {
if (data.value.object) {
outData.value = getOptionData(data.value.object.dataList, data.value.object.nameList)
}
})
},
/**
* 堆叠图-按照人员统计
* 样例数据
* let data = {
* nameList: ['吴斌斌', '袁晋鹏'],
* dataList: [
* {name: '应点击量', data: [1, 34, 12]},
* {name: '实际点击量', data: [15, 24, 10]}
* ]
* }
*/
stackedGraphUserInit: (params, outData) => {
const {data, error} = useGetData('stackedGraphUser', params);
Vue.watchEffect(() => {
if (data.value.object) {
outData.value = getOptionData(data.value.object.dataList, data.value.object.nameList)
}
});
},
pageList: (params, outData) => {
const {data, error} = useGetData('getOperationLogList', params);
Vue.watchEffect(() => {
if (data.value) {
outData.value.count = data.value.count;
outData.value.dataList = data.value.data;
}
});
}
}
export default operationLogService
... ...
<div :style="{'height':height+'px','max-height':height+'px'}" class="container">
<div :style="{'min-height':height+'px','max-height':height+'px','height':'100%'}" class="cm-card">
<!-- 搜索区域 -->
<el-row>
<el-col :span="10" class="search">
<el-button-group class="ml-4">
<el-button :size="$global.elementConfig.size.button" :type="search.dateType == 'yesterday' ? 'primary' : ''"
@click="loadPage('yesterday')">昨天
</el-button>
<el-button :size="$global.elementConfig.size.button" :type="search.dateType == 'today' ? 'primary' : ''"
@click="loadPage('today')">今天
</el-button>
<el-button :size="$global.elementConfig.size.button" :type="search.dateType == 'lastWeek' ? 'primary' : ''"
@click="loadPage('lastWeek')">上周
</el-button>
<el-button :size="$global.elementConfig.size.button" :type="search.dateType == 'thisWeek' ? 'primary' : ''"
@click="loadPage('thisWeek')">本周
</el-button>
<el-button :size="$global.elementConfig.size.button" :type="search.dateType == 'thisMonth' ? 'primary' : ''"
@click="loadPage('thisMonth')">本月
</el-button>
<el-button style="border-radius: 0;" :size="$global.elementConfig.size.button" :type="search.dateType == 'all' ? 'primary' : ''"
@click="loadPage('all')">全部
</el-button>
</el-button-group>
<el-date-picker
:size="$global.elementConfig.size.input"
style="width:150px;border-radius: 0 4px 4px 0;"
end-placeholder="结束日期"
format="YYYY-MM-DD"
range-separator="-"
start-placeholder="开始日期"
type="daterange"
v-model="search.dateTime"
value-format="YYYY-MM-DD"
:prefix-icon="'none'"
@focus="dateFocus"
@change="dateChange"/>
<el-button :size="$global.elementConfig.size.button" class="m-l-6" type="primary" @click="loadPage('')">
查询
</el-button>
</el-col>
</el-row>
<!--表格区域-->
<div class="p-6">
<cm-table-page :columns="tableData.columns" :dataList="tableData.dataList"
:height="height - 95"
:pageSizes = '[10,20,50,100, 200, 300, 400]'
:loading="false"
:pageSize="pageSize"
:showBorder="true"
:showIndex="true"
:showPage="true"
:showSelection="false"
:showTools="false"
:total="tableData.count"
@loaddata="loaddata">
<template #default="{row,prop,column}">
<div v-if="prop == 'link'">
<operationLogLink :opLink="row.link" :opLinkSource="row.linkSource"></operationLogLink>
</div>
<div v-if="prop == 'dwellTime'">
{{row.dwellTime}}
<el-tooltip placement="top">
<template #content>统计规则<br/>当前操作路径的<span style="color: #67C23A">首次操作时间({{row.createTime}})</span><span style="color: #67C23A">最后一次的操作时间({{row.endTime}})</span>的间隔</template>
<i class="iconfont icon-tishi"style="position: absolute;right: 5px;"></i>
</el-tooltip>
</div>
</template>
</cm-table-page>
</div>
</div>
</div>
... ...
import operationLogService from "./operationLogService.js";
export default {
name: 'operationLog',
template: '',
components: {
'LineChart': Vue.defineAsyncComponent(
() => myImport('views/page/components/lineChart/index')
),
'operationLogLink': Vue.defineAsyncComponent(
() => myImport('components/page/operationLog/operationLogLink')
)
},
props: [],
setup(props, {attrs, slots, emit}) {
const {proxy} = Vue.getCurrentInstance();
let height = Vue.ref(window.innerHeight - 10);
let groupList = Vue.ref([]);
let userList = Vue.ref([]);
let stackedGraphGroupData = Vue.ref({});
let stackedGraphUserData = Vue.ref({});
// 搜索
let search = Vue.ref({
groupId: '',
userId: '',
dateType: 'today',
dateTime: '',
page: 1,
limit: 20,
});
/**
* 初始化报表
*/
const loadPage = (dateType) => {
// 加载表格内容
if (dateType && dateType != '') {
// 设置最新的类型
search.value.dateType = dateType;
} else {
// 获取当前点击的配置
dateType = search.value.dateType;
}
if (dateType != 'dateRange') {
search.value.dateTime = [];
} else {
if (search.value.dateTime && search.value.dateTime.length == 0) {
// 时间范围
proxy.$global.showMsg("请选择开始结束时间!", "warning");
return;
}
}
let startTime = '';
let endTime = ''
if (search.value.dateTime && search.value.dateTime.length > 0) {
startTime = search.value.dateTime[0];
endTime = search.value.dateTime[1];
}
let params = {
page: search.value.page,
limit: search.value.limit,
id: search.value.groupId,
userName: localStorage.getItem('lgn'),
timeType: search.value.dateType,
startTime: startTime,
endTime: endTime
}
// 下拉列表选项
operationLogService.getOperationLogGroupAndUserList(groupList);
// 查询列表
operationLogService.pageList(params,tableData);
}
/**
* 变更巡检组,获取用户列表
* @param val
*/
const getGroupUser = (val) => {
let group = groupList.value.filter(item => {
if (item.groupId === val) {
return item;
}
});
if(group && group.length > 0){
userList.value = group[0].groupUser;
}
}
/**
* 分页事件,加载数据
* @param page
* @param limit
*/
const loaddata = ({page, limit}) => {
search.value.page = page;
search.value.limit = limit;
loadPage('');
}
//表格字段
let tableData = Vue.ref({
count: 0,
dataList: [],
columns: [
{
prop: 'groupName',
label: '组名称',
sortable: true,
align: 'center',
width: '180'
},
{
prop: 'nickName',
label: '用户名',
sortable: true,
align: 'center',
width: '150'
},
{
prop: 'createTime',
label: '时间',
sortable: true,
align: 'center',
width: '170',
},
{
prop: 'ip',
label: 'IP地址',
sortable: true,
align: 'center',
width: '150'
}, {
prop: 'link',
label: '访问位置',
sortable: true,
align: 'center',
}, {
prop: 'dwellTime',
label: '停留总时长',
sortable: true,
align: 'center',
width: '150'
}
]
})
//点击时间选择时,其他按钮不高亮
let dateFocus = () => {
search.value.dateType = 'dateRange';
}
//时间更改事件
let dateChange = (val) => {
loadPage('dateRange')
}
// let getDataList = (dateType) => {
// if (dateType) {
// // 设置最新的类型
// search.value.dateType = dateType;
// } else {
// // 获取当前点击的配置
// dateType = search.value.dateType;
// }
//
// if (dateType != 'dateRange') {
// search.value.dateTime = [];
// } else {
// if (search.value.dateTime && search.value.dateTime.length == 0) {
// // 时间范围
// proxy.$global.showMsg("请选择开始结束时间!", "warning");
// return;
// }
// }
//
// let startTime = '';
// let endTime = ''
// if (search.value.dateTime && search.value.dateTime.length > 0) {
// startTime = search.value.dateTime[0];
// endTime = search.value.dateTime[1];
// }
// let params = {
// page: search.value.page,
// limit: search.value.limit,
// id: search.value.groupId,
// userName: search.value.userId,
// timeType: search.value.dateType,
// startTime: startTime,
// endTime: endTime
// }
// // // 查询列表
// operationLogService.pageList(params,tableData);
//
// }
// 挂载完
Vue.onMounted(() => {
// 默认加载搜索条件、统计图、表格
loadPage();
})
return {
height,
groupList,
userList,
// 搜索条件
search,
getGroupUser,
dateFocus,
dateChange,
stackedGraphGroupData,
stackedGraphUserData,
// 搜索数据
loadPage,
loaddata,
// 表格数据
tableData
}
}
}
... ...
... ... @@ -52,15 +52,15 @@
<el-row :gutter="20" style="padding: 3px 10px;">
<el-col :span="8">
<h3 style="text-align: left;color:#2b9eef;">资源类型快照量TOP5</h3>
<h3 class="page-item-title-h3">资源类型快照量TOP5</h3>
<div ref="bizChartsRefs" style="width: 100%;height: 320px;border: 1px solid #e4e4e4;"></div>
</el-col>
<el-col :span="8">
<h3 style="text-align: left;color:#2b9eef;">业务系统快照量TOP5</h3>
<h3 class="page-item-title-h3">业务系统快照量TOP5</h3>
<div ref="devChartsRefs" style="width: 100%;height: 320px;border: 1px solid #e4e4e4;"></div>
</el-col>
<el-col :span="8">
<h3 style="text-align: left;color:#2b9eef;">快照量</h3>
<h3 class="page-item-title-h3">快照量</h3>
<div ref="snapshotChartsRefs" style="width: 100%;height: 320px;border: 1px solid #e4e4e4;"></div>
</el-col>
</el-row>
... ...
... ... @@ -284,6 +284,12 @@ const routes = [{
path: '/vue3/operationLog',
name: 'operationLog',
component: () => myImport('views/operationLog/index')
},
//操作日志 - 用户列表
{
path: '/vue3/operationLog/userList',
name: 'operationLogUserList',
component: () => myImport('views/operationLog/userList')
}
];
... ...
export default Vuex.createStore({
state: {},
getters: {},
mutations: {},
actions: {},
modules: {}
})