486 lines
21 KiB
HTML
486 lines
21 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="${lang,escape}">
|
|
<head>
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, maximum-scale=1">
|
|
<meta name="description" content="${AppName!}">
|
|
<title>${AppName!}</title>
|
|
<meta charset="UTF-8">
|
|
<!-- import CSS -->
|
|
<link rel="stylesheet" href="${base!}/assets/platform/plugins/myframe/css/myframe.css">
|
|
<link rel="stylesheet" href="${base!}/assets/platform/plugins/element-ui/lib/theme-chalk/index.css">
|
|
<link rel="stylesheet" href="${base!}/assets/platform/fonts/themify-icons.css">
|
|
<link rel="stylesheet" href="${base!}/assets/platform/fonts/font-awesome.min.css">
|
|
<link rel="stylesheet" href="${base!}/assets/platform/css/common.css">
|
|
<link rel="stylesheet" href="${base!}/assets/platform/css/main.css">
|
|
<link rel="stylesheet" href="${base!}/assets/platform/css/elmain.css">
|
|
<link rel="stylesheet" href="${base!}/assets/platform/css/panel.css">
|
|
|
|
<link rel="stylesheet" href="${base!}/assets/platform/css/common.css?v=1.0.3">
|
|
<link rel="stylesheet" href="${base!}/assets/platform/plugins/wangeditor/wangEditor.css">
|
|
<link rel="stylesheet" type="text/css" href="${base!}/assets/platform/plugins/viewer/viewer.min.css">
|
|
<link rel="stylesheet" href="${base!}/assets/platform/plugins/wp-upload-vue/css/wpupload.css">
|
|
<link rel="stylesheet" href="${base!}/assets/platform/plugins/wp-upload-vue/font/iconfont.css">
|
|
<link rel="stylesheet" href="${base!}/assets/platform/plugins/video/css/video-js.min.css">
|
|
<link rel="stylesheet" href="${base!}/assets/platform/css/vivify.min.css">
|
|
<link href="${base!}/assets/platform/plugins/vue-cron/vcrontab.css" rel="stylesheet"/>
|
|
|
|
<!-- import Vue before Element -->
|
|
<script src="${base!}/assets/platform/plugins/vue/vue.min.js"></script>
|
|
|
|
<script src="/assets/platform/plugins/vue-cron/vcrontab.umd.min.js"></script>
|
|
|
|
<!-- wpupload -->
|
|
<script type="text/javascript" src="${base!}/assets/platform/plugins/wp-upload-vue/js/axios.min.js"></script>
|
|
<script type="text/javascript" src="${base!}/assets/platform/plugins/wp-upload-vue/font/iconfont.js"></script>
|
|
<script type="text/javascript" src="${base!}/assets/platform/plugins/wp-upload-vue/js/wpupload.js"></script>
|
|
|
|
<!-- import JavaScript -->
|
|
<script src="${base!}/assets/platform/plugins/element-ui/lib/index.js"></script>
|
|
<script src="${base!}/assets/platform/plugins/element-ui/lib/i18n/${lang,escape}.js"></script>
|
|
<script src="${base!}/assets/platform/plugins/jquery/jquery-1.11.1.min.js"></script>
|
|
<script src="${base!}/assets/platform/plugins/slimscroll/jquery.slimscroll.min.js"></script>
|
|
|
|
|
|
<!--后面就改这一段吧-->
|
|
<script src="${base!}/assets/platform/js/utils.js"></script>
|
|
<script src="${base!}/assets/platform/plugins/dd3s/dd3s.js"></script>
|
|
<script src="${base!}/assets/platform/js/jsz.js"></script>
|
|
<script src="${base!}/assets/platform/plugins/video/js/video.min.js"></script>
|
|
|
|
<!--g2-->
|
|
<script src="/assets/platform/plugins/g2/g2.min.js?v=4.1.9"></script>
|
|
<script src="/assets/platform/plugins/g2/data-set.js"></script>
|
|
<script src="/assets/platform/plugins/g2/g2plot.js?v=1.0.0"></script>
|
|
|
|
<!--echars-->
|
|
<!-- <script src="${base!}/assets/platform/plugins/echarts/echarts.min.js"></script>-->
|
|
<!-- <script src="${base!}/assets/platform/plugins/echarts/infographic.js"></script><!–主题–>-->
|
|
<!-- <script src="${base!}/assets/platform/plugins/echarts/westeros.js"></script><!–主题–>-->
|
|
<!-- <script src="${base!}/assets/platform/plugins/echarts/walden.js"></script><!–主题–>-->
|
|
<!-- <script src="${base!}/assets/platform/plugins/echarts/macarons.js"></script><!–主题–>-->
|
|
<!-- <script src="https://cdn.staticfile.org/echarts/5.2.2/echarts.js"></script>
|
|
<script src="https://cdn.staticfile.org/echarts/5.2.2/i18n/langZH.js"></script>-->
|
|
|
|
|
|
<script src="${base!}/assets/platform/module/mixins/initTableMixins.js?v=1.0.1"></script>
|
|
<script src="${base!}/assets/platform/js/includeModel.js?v=1.0.5"></script>
|
|
<script src="${base!}/assets/platform/js/component.js?v=1.0.2"></script>
|
|
<script src="${base!}/assets/platform/js/v.js?v=1.0.5"></script>
|
|
<script src="${base!}/assets/platform/plugins/wangeditor/wangEditor.js"></script>
|
|
<!-- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/wangeditor@4.6.15/dist/wangEditor.min.js"></script>-->
|
|
<!--<script type="text/javascript"
|
|
src="https://webapi.amap.com/maps?v=1.4.15&key=6ab3452804ba35050880b5e047436853&plugin=AMap.PolyEditor,AMap.PlaceSearch"></script>-->
|
|
<!--viewer-->
|
|
<script src="${base!}/assets/platform/plugins/viewer/viewer.min.js"></script>
|
|
<script src="${base!}/assets/platform/plugins/viewer/jquery-viewer.min.js"></script>
|
|
<script src="${base!}/assets/platform/plugins/vue-loader/httpVueLoader.js"></script>
|
|
<script src="${base!}/assets/platform/js/gh.js"></script>
|
|
<script src="${base!}/assets/platform/plugins/vue-qrcode/vue-qrcode.min.js"></script>
|
|
|
|
|
|
<!-- pjax是异步加载html片段的工具,模拟前端路由机制 -->
|
|
<script src="${base!}/assets/platform/plugins/pjax/jquery.pjax.js"></script>
|
|
<script src="${base!}/assets/platform/plugins/myframe/js/myframe.js"></script>
|
|
<!-- Array数组增加findIndex等方法,TreeTable用得到,兼容IE8 -->
|
|
<script src="${base!}/assets/platform/plugins/polyfill/polyfill.js"></script>
|
|
<!-- 时间日期处理工具类 -->
|
|
<script src="${base!}/assets/platform/plugins/moment/moment.min.js"></script>
|
|
<!-- 浏览器通知 -->
|
|
<script src="${base!}/assets/platform/plugins/push/push.min.js"></script>
|
|
<script src="${base!}/assets/platform/js/main.js?v=1.0.0"></script>
|
|
<script src="${base!}/assets/platform/js/offscreen.js"></script>
|
|
<!-- <script src="https://cdn.jsdelivr.net/npm/vue-echarts@4.0.2"></script>-->
|
|
<script src="${base!}/assets/platform/plugins/vue-charts/echartTheme.js"></script>
|
|
|
|
<link rel="stylesheet" href="${base!}/assets/platform/css/skins/palette.3.css" id="skin">
|
|
|
|
<script src="${base!}/assets/platform/js/directive/v-sticky.js"></script>
|
|
|
|
<script src="${base!}/assets/platform/js/jquery.qrcode.min.js"></script>
|
|
<script src="${base!}/assets/platform/js/jr-qrcode.js"></script>
|
|
|
|
<script src="${base!}/assets/platform/plugins/xlsx/xlsx.full.min.js"></script>
|
|
|
|
<!-- <link rel="stylesheet" href="https://cdn.staticfile.org/element-ui/2.15.6/theme-chalk/index.min.css">-->
|
|
<!-- <script src="https://cdn.staticfile.org/element-ui/2.15.6/index.min.js"></script>-->
|
|
|
|
<!--#
|
|
var isLeftMenu = false;
|
|
if(@shiro.getPrincipalProperty('menuTheme') == "top"){
|
|
isLeftMenu = false;
|
|
}else if(@shiro.getPrincipalProperty('menuTheme') == "left"){
|
|
isLeftMenu = true;
|
|
}
|
|
#-->
|
|
<script type="text/javascript">
|
|
var base = "${base!}";
|
|
var loginPjax = "${@shiro.getPrincipalProperty('loginPjax')}";
|
|
var isLeftMenu = "${isLeftMenu!}";
|
|
const AppMapCenterPointX = "${config.AppMapCenterPointX!}";
|
|
const AppMapCenterPointY = "${config.AppMapCenterPointY!}";
|
|
var isDisPlayCode = "${config.isDisPlayCode!}" === 'true'
|
|
ELEMENT.locale(ELEMENT.lang['${lang,escape}']);
|
|
// Vue.component('v-chart', VueECharts)
|
|
// VueECharts.registerTheme('mine', echartsTheme)
|
|
const FILE_DOMAIN = "${AppFileDomain!}"
|
|
const APP_DOMAIN = "${AppDomain!}"
|
|
Vue.component('vuedraggable', window.vuedraggable)
|
|
Vue.component('guava', httpVueLoader('/components/plugins/Guava.vue'))
|
|
Vue.component('sign', httpVueLoader('/components/sign/sign.vue?v=' + new Date().getTime()))
|
|
Vue.component('image-upload', httpVueLoader('/components/plugins/ImageUpload.vue'))
|
|
Vue.component('file-upload', httpVueLoader('/components/plugins/FileUpload.vue'))
|
|
Vue.component('border-table', httpVueLoader('/components/plugins/BorderTable.vue'))
|
|
Vue.component('text-editor', httpVueLoader('/components/plugins/TextEditor.vue'))
|
|
</script>
|
|
|
|
<script>
|
|
const viewImage = function (filepath) {
|
|
let image = new Image();
|
|
image.src = '${AppFileDomain!}' + filepath;
|
|
let viewer = new Viewer(image);
|
|
viewer.show();
|
|
};
|
|
window.viewImage = viewImage;
|
|
Vue.prototype.$viewImage = viewImage
|
|
</script>
|
|
<script>
|
|
Vue.use(httpVueLoader)
|
|
Vue.component(VueQrcode.name, VueQrcode)
|
|
</script>
|
|
<script>
|
|
//防止用户快速重复点击造成数据混乱 提供vue指令和js节流函数两种方式
|
|
//控制此元素在一定时间内是否可成为鼠标的点击目标对象
|
|
Vue.directive('throttle', {
|
|
inserted(el, binding) {
|
|
el.addEventListener('click', () => {
|
|
if (el.style.pointerEvents !== 'none') {
|
|
el.style.pointerEvents = 'none'
|
|
window.setTimeout(() => {
|
|
el.style.pointerEvents = ''
|
|
}, 1200)
|
|
}
|
|
})
|
|
}
|
|
})
|
|
|
|
|
|
function getQueryVariable(variable) {
|
|
let query = window.location.search.substring(1);
|
|
let vars = query.split("&");
|
|
for (let i = 0; i < vars.length; i++) {
|
|
let pair = vars[i].split("=");
|
|
if (pair[0] == variable) {
|
|
return pair[1];
|
|
}
|
|
}
|
|
return '';
|
|
}
|
|
|
|
//函数在一定时间内只会触发一次 FN.ABC
|
|
function throttle(func, wait) {
|
|
let previous = 0;
|
|
return function () {
|
|
let now = Date.now();
|
|
let context = this;
|
|
let args = arguments;
|
|
if (now - previous > wait) {
|
|
func.apply(context, args);
|
|
previous = now;
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<script>
|
|
const hasProposalAdminRole = "${@shiro.hasAnyRoles('sysadmin','jdh10')}" === 'true'
|
|
</script>
|
|
|
|
<style>
|
|
|
|
/* html {
|
|
background: url("/bg3.png") no-repeat center center;
|
|
background-size: 100% 100%;
|
|
}*/
|
|
|
|
#app {
|
|
background-color: rgb(240, 242, 245);
|
|
height: 100%;
|
|
overflow-y: auto;
|
|
}
|
|
|
|
.viewer-container {
|
|
z-index: 9999999999;
|
|
}
|
|
|
|
.header {
|
|
position: relative;
|
|
}
|
|
|
|
.app .header-fixed + .layout {
|
|
/*padding-top: 0;*/
|
|
}
|
|
|
|
.el-table-container {
|
|
padding-top: 0;
|
|
}
|
|
|
|
.layout {
|
|
max-height: calc(100vh - 50px);
|
|
}
|
|
|
|
.sidebar {
|
|
width: 250px;
|
|
}
|
|
|
|
.small-menu .brand {
|
|
width: 70px !important;
|
|
}
|
|
|
|
|
|
body {
|
|
opacity: 0.95;
|
|
}
|
|
|
|
input[type="file"] {
|
|
display: none
|
|
}
|
|
|
|
#app {
|
|
height: 100%;
|
|
overflow-y: auto;
|
|
}
|
|
|
|
.pointer {
|
|
cursor: pointer;
|
|
}
|
|
|
|
.space-around {
|
|
justify-content: space-around;
|
|
}
|
|
|
|
.space-between {
|
|
justify-content: space-between;
|
|
}
|
|
|
|
|
|
#app > .transition-row {
|
|
min-height: calc(100vh - 50px);
|
|
}
|
|
|
|
#app > .transition-row > .transition-item {
|
|
width: 100%;
|
|
min-height: 100%;
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0
|
|
}
|
|
|
|
</style>
|
|
|
|
</head>
|
|
<body>
|
|
<div class="gallery-loader" style="background-color:transparent;">
|
|
<div class="loader"></div>
|
|
</div>
|
|
<div id="mainApp"
|
|
class="app <!--#if(@shiro.getPrincipalProperty('loginSidebar')){#--> small-menu <!--#}#--> <!--#if(@shiro.getPrincipalProperty('loginScroll')){#--> fixed-scroll <!--#}#--> <!--#if(@shiro.getPrincipalProperty('loginBoxed')){#--> boxed <!--#}#-->">
|
|
<header class="header header-fixed navbar">
|
|
<div class="brand">
|
|
|
|
<a href="javascript:;" class="ti-menu off-left visible-xs" data-toggle="offscreen" data-move="ltr"></a>
|
|
|
|
<a href="${base!}/platform/home" data-pjax class="navbar-brand">
|
|
<img src="${base!}/assets/platform/img/logo.png" alt=""
|
|
style="width: 60%;height: 80%"
|
|
class="o_img <!--#if(!@shiro.getPrincipalProperty('loginSidebar')){#-->o_hide<!--#}#-->">
|
|
<span class="heading-font o_img <!--#if(@shiro.getPrincipalProperty('loginSidebar')){#-->o_hide<!--#}#-->">
|
|
<img src="${base!}/assets/platform/img/logoa.png">
|
|
</span>
|
|
</a>
|
|
|
|
</div>
|
|
|
|
<ul class="nav navbar-nav">
|
|
<li class="hidden-xs">
|
|
<!-- toggle small menu -->
|
|
<a href="javascript:;" class="toggle-sidebar">
|
|
<i class="ti-menu"></i>
|
|
</a>
|
|
<!-- /toggle small menu -->
|
|
</li>
|
|
</ul>
|
|
<ul class="nav navbar-nav navbar-right">
|
|
<li class="off-right">
|
|
<a href="javascript:;" data-toggle="dropdown">
|
|
<span class="hidden-xs ml10">${@shiro.getPrincipalProperty('username')}</span>
|
|
</a>
|
|
</li>
|
|
<li class="off-right">
|
|
<a href="${base!}/platform/login/logout">
|
|
<i class="ti-power-off"></i>
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
</header>
|
|
<section class="layout">
|
|
<!-- sidebar menu -->
|
|
<aside class="sidebar offscreen-left">
|
|
<!-- main navigation -->
|
|
<nav class="main-navigation" data-height="auto" data-size="6px" data-distance="0" data-rail-visible="true"
|
|
data-wheel-step="10">
|
|
<ul class="nav">
|
|
<li>
|
|
<!--#if(!isEmpty(@shiro.getPrincipalProperty('customMenus'))){#-->
|
|
<ul class="sub-menu">
|
|
<!--#for(o in @shiro.getPrincipalProperty('customMenus')){#-->
|
|
|
|
<li>
|
|
<a <!--#if(!isEmpty(o.href)){#-->href="${base}${o.href}"
|
|
<!--#if('data-pjax'==o.target){#-->data-pjax<!--#}}else{ #--> href="javascript:;"
|
|
<!--#}#--> >
|
|
<span><!--#if(lang=="zh_CN"){#-->${o.name}<!--#}else{#-->${o.aliasName}<!--#}#--></span>
|
|
</a>
|
|
</li>
|
|
|
|
<!--#}#-->
|
|
</ul>
|
|
<!--#}#-->
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
<ul id="leftMenu" class="nav leftMenu" style="display: ${isLeftMenu?'initial':'none'};">
|
|
<!--#
|
|
var secondMenus=@shiro.getPrincipalProperty('secondMenus');
|
|
var firstMenus = @shiro.getPrincipalProperty('firstMenus');
|
|
for(firstMenu in firstMenus){
|
|
if(!isEmpty(@secondMenus.get(firstMenu.path))){
|
|
#-->
|
|
|
|
<li>
|
|
<a <!--# if(!isEmpty(firstMenu.href)){ #-->href="
|
|
<!--#if(@string.startWith(firstMenu.href,'/')){#--> ${base}${firstMenu.href!}<!--#}else{#-->
|
|
${firstMenu.href!}<!--#}#--> " <!--#if(@string.startWith(firstMenu.target,'_')){#-->
|
|
target="${firstMenu.target!}"<!--#}else{#--> ${firstMenu.target!}<!--#}#--> <!--# }else{ #-->
|
|
href="javascript:;"<!--# } #--> >
|
|
<!--# if(!isEmpty(@secondMenus.get(firstMenu.path))){ #-->
|
|
<i class="toggle-accordion"></i>
|
|
<!--# } #-->
|
|
<!--# if(!isEmpty(firstMenu.icon)){ #-->
|
|
<i class="${firstMenu.icon!}"></i>
|
|
<!--# }else{ #-->
|
|
<i class="ti-map"></i>
|
|
<!--# } #-->
|
|
<span>${ lang == "zh_CN" ?firstMenu.name :firstMenu.aliasName}</span>
|
|
</a>
|
|
<!--# if(!isEmpty(@secondMenus.get(firstMenu.path))){ #-->
|
|
<ul class="sub-menu">
|
|
<!--# for(secondMenu in @secondMenus.get(firstMenu.path)){ #-->
|
|
<li>
|
|
<a <!--# if(!isEmpty(secondMenu.href)){ #-->href="
|
|
<!--#if(@string.startWith(secondMenu.href,'/')){#--> ${base}${secondMenu.href!}
|
|
<!--#}else{#--> ${secondMenu.href!}<!--#}#--> "
|
|
<!--#if(@string.startWith(secondMenu.target,'_')){#-->target="${secondMenu.target!}"
|
|
<!--#}else{#--> ${secondMenu.target!}<!--#}#--> <!--# }else{ #-->href="javascript:;"
|
|
<!--# } #--> >
|
|
<!--# if(!isEmpty(@secondMenus.get(secondMenu.path))){ #-->
|
|
<i class="toggle-accordion"></i>
|
|
<!--# } #-->
|
|
<!--# if(!isEmpty(secondMenu.icon)){ #-->
|
|
<i class="leftMenu__twoIcon ${secondMenu.icon!}"></i>
|
|
<!--# }else{ #-->
|
|
<i class="leftMenu__twoIcon ti-map"></i>
|
|
<!--# } #-->
|
|
<span>${ lang == "zh_CN" ?secondMenu.name :secondMenu.aliasName}</span>
|
|
</a>
|
|
<!--# if(!isEmpty(@secondMenus.get(secondMenu.path))){ #-->
|
|
<ul class="sub-menu">
|
|
<!--# for(thMenu in @secondMenus.get(secondMenu.path)){ #-->
|
|
<li>
|
|
|
|
<a <!--# if(!isEmpty(thMenu.href)){ #-->href="
|
|
<!--#if(@string.startWith(thMenu.href,'/')){#--> ${base}${thMenu.href!}
|
|
<!--#}else{#--> ${thMenu.href!}<!--#}#--> "
|
|
<!--#if(@string.startWith(thMenu.target,'_')){#-->target="${thMenu.target!}"
|
|
<!--#}else{#--> ${thMenu.target!}<!--#}#--> <!--# }else{ #-->href="javascript:;"
|
|
<!--# } #--> >
|
|
<span><i class="leftMenu__twoIcon fa fa-circle-o"></i>${ lang == "zh_CN" ?thMenu.name :thMenu.aliasName}</span>
|
|
</a>
|
|
</li>
|
|
<!--# } #-->
|
|
</ul>
|
|
<!--# } #-->
|
|
</li>
|
|
<!--# } #-->
|
|
</ul>
|
|
<!--# } #-->
|
|
</li>
|
|
<!--# } #-->
|
|
<!--# } #-->
|
|
</ul>
|
|
|
|
<!-- <ul id="leftnav" class="nav" style="display: ${!isLeftMenu?'initial':'none'};"></ul>-->
|
|
</nav>
|
|
</aside>
|
|
<!-- main content -->
|
|
<section class="main-content" id="container">
|
|
${layoutContent}
|
|
</section>
|
|
</section>
|
|
</div>
|
|
<div id="homeDetail" class="modal fade bs-modal-sm" tabindex="-1" role="dialog" aria-hidden="true">
|
|
<div class="modal-dialog">
|
|
<div class="modal-content">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="dialogOffline" class="modal fade bs-modal-sm" tabindex="-2" role="dialog" aria-hidden="true">
|
|
<div class="modal-dialog">
|
|
<div class="modal-content">
|
|
<div class="el-dialog__header">
|
|
<button type="button" data-dismiss="modal" aria-hidden="true" aria-label="Close"
|
|
class="el-dialog__headerbtn"><i
|
|
class="el-dialog__close el-icon el-icon-close"></i></button>
|
|
<h4 class="modal-title">系统通知</h4>
|
|
</div>
|
|
<div class="modal-body">
|
|
<div class="row">
|
|
<div class="col-xs-12">
|
|
您的帐号在其他地方登录,您已被迫下线,如果不是您本人操作,请及时修改密码。
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="el-dialog__footer">
|
|
<span class="dialog-footer">
|
|
<a type="button" class="el-button el-button--primary" href="${base}/platform/login/logout">
|
|
<span>确 定</span>
|
|
</a>
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<script type="text/javascript">
|
|
$(document).ready(function () {
|
|
//菜单位置切换
|
|
function showLeftMenu() {
|
|
$(".leftMenu a[href*='" + location.pathname + "']")
|
|
.parent("li").addClass("active")
|
|
.parent(".sub-menu").css({display: "block"})
|
|
.parents("li").addClass("open")
|
|
.parent(".sub-menu").css({display: "block"});
|
|
|
|
const circle = $(".leftMenu a[href*='" + location.pathname + "']").find(".fa-circle-o")
|
|
for (let i = 0; i < circle.length; i++) {
|
|
$(circle[i]).addClass("fa fa-dot-circle-o");
|
|
}
|
|
}
|
|
|
|
showLeftMenu();
|
|
});
|
|
</script>
|
|
</body>
|
|
</html>
|