parent
0b854ceb7d
commit
2d8660c591
@ -0,0 +1,31 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>com.mashibing</groupId>
|
||||
<artifactId>beacon-cloud</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>beacon-webmaster</artifactId>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>8</maven.compiler.source>
|
||||
<maven.compiler.target>8</maven.compiler.target>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.shiro</groupId>
|
||||
<artifactId>shiro-spring-boot-web-starter</artifactId>
|
||||
<version>1.4.0</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
@ -0,0 +1,16 @@
|
||||
package com.mashibing.webmaster;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
|
||||
/**
|
||||
* @author dch
|
||||
* @create 2024-03-28 21:44
|
||||
*/
|
||||
@SpringBootApplication
|
||||
public class WebMasterStarterApp {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(WebMasterStarterApp.class,args);
|
||||
}
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
shiro:
|
||||
# 默认登录页面
|
||||
loginUrl: /login.html
|
||||
# 没有权限的页面
|
||||
unauthorizedUrl: unauthorized.html
|
@ -0,0 +1,71 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>充值管理</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
|
||||
<link rel="stylesheet" href="../public/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="../public/css/font-awesome.min.css">
|
||||
<link rel="stylesheet" href="../public/plugins/bootstrap-table/bootstrap-table.min.css">
|
||||
<link rel="stylesheet" href="../public/plugins/ztree/css/metroStyle/metroStyle.css">
|
||||
<link rel="stylesheet" href="../public/css/main.css">
|
||||
<link rel="stylesheet" href="../public/css/index.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="dtapp" v-cloak>
|
||||
|
||||
<div v-show="showList">
|
||||
<div id="toolbar">
|
||||
<button class="btn btn-success " type="button" @click="add">
|
||||
<i class="fa fa-plus"></i> <span class="bold">新增</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<table id="table"></table>
|
||||
</div>
|
||||
|
||||
<div v-show="!showList" class="panel panel-default">
|
||||
<div class="panel-heading">{{title}}</div>
|
||||
<form class="form-horizontal">
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">所属客户</div>
|
||||
<div class="col-sm-10">
|
||||
<select v-model="acount.clientid" name="sites" id="sites">
|
||||
<option v-for="item in sites" :value="item.id">{{ item.corpname }}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">到账金额</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="acount.paidvalue" placeholder="到账金额(单位元)"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label"></div>
|
||||
<input type="button" class="btn btn-primary" @click="saveOrUpdate" value="确定"/>
|
||||
<input type="button" class="btn btn-warning" @click="reload" value="返回"/>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script src="../public/libs/jquery.min.js"></script>
|
||||
<script src="../public/plugins/layer/layer.js"></script>
|
||||
<script src="../public/libs/bootstrap.min.js"></script>
|
||||
<script src="../public/libs/vue.js"></script>
|
||||
<script src="../public/libs/myindex.js"></script>
|
||||
<script src="../public/plugins/bootstrap-table/bootstrap-table.min.js"></script>
|
||||
<script src="../public/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
|
||||
<script src="../public/plugins/ztree/jquery.ztree.all.min.js"></script>
|
||||
<script src="../public/plugins/ueditor/ueditor.config.js"></script>
|
||||
<script src="../public/plugins/ueditor/ueditor.all.js"></script>
|
||||
<script src="../public/plugins/ueditor/ueditor.parse.min.js"></script>
|
||||
<script src="../public/plugins/ueditor/lang/zh-cn/zh-cn.js"></script>
|
||||
<script src="../public/js/common.js"></script>
|
||||
<script src="../public/js/acount/acount.js"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,132 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>活动管理</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
|
||||
<link rel="stylesheet" href="../public/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="../public/css/font-awesome.min.css">
|
||||
<link rel="stylesheet" href="../public/plugins/bootstrap-table/bootstrap-table.min.css">
|
||||
<link rel="stylesheet" href="../public/plugins/ztree/css/metroStyle/metroStyle.css">
|
||||
<link rel="stylesheet" href="../public/css/main.css">
|
||||
<link rel="stylesheet" href="../public/css/index.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="dtapp" v-cloak>
|
||||
|
||||
<div v-show="showList">
|
||||
<div id="toolbar">
|
||||
<button class="btn btn-success " type="button" @click="add">
|
||||
<i class="fa fa-plus"></i> <span class="bold">新增</span>
|
||||
</button>
|
||||
<button class="btn btn-success " type="button" @click="update">
|
||||
<i class="fa fa-pencil-square-o"></i> <span class="bold">修改</span>
|
||||
</button>
|
||||
<button class="btn btn-danger " type="button" @click="del">
|
||||
<i class="fa fa-remove"></i> <span class="bold">删除</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<table id="table"></table>
|
||||
</div>
|
||||
|
||||
<div v-show="!showList" class="panel panel-default">
|
||||
<div class="panel-heading">{{title}}</div>
|
||||
<form class="form-horizontal">
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">标 题</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="activity.title" placeholder="汽车行业发展"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">描 述</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="activity.description" placeholder="资讯来源"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">图片</div>
|
||||
<div class="col-sm-10">
|
||||
<el-upload
|
||||
action="http://localhost:8080/ytupload"
|
||||
accept="image/jpeg,image/gif,image/png"
|
||||
:on-success="handleSuccess"
|
||||
name="mypic">
|
||||
<div slot="tip" class="el-upload__tip">请上传图片格式文件
|
||||
<el-button size="small" type="primary" style="text-align:right">自动上传</el-button>
|
||||
</div>
|
||||
</el-upload>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">活动创建者</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="activity.author"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">开始时间</div>
|
||||
<div class="col-sm-10">
|
||||
<el-date-picker
|
||||
v-model="activity.beginTime"
|
||||
type="datetime"
|
||||
format="yyyy-MM-dd HH:mm"
|
||||
value-format="yyyy-MM-dd HH:mm"
|
||||
:editable="false"
|
||||
placeholder="选择日期时间">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">结束时间</div>
|
||||
<div class="col-sm-10">
|
||||
<el-date-picker
|
||||
v-model="activity.endTime"
|
||||
type="datetime"
|
||||
format="yyyy-MM-dd HH:mm"
|
||||
value-format="yyyy-MM-dd HH:mm"
|
||||
:editable="false"
|
||||
placeholder="选择日期时间">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">活动链接</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="activity.link"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">SEO关键字</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="activity.seoKeywords"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label"></div>
|
||||
<input type="button" class="btn btn-primary" @click="saveOrUpdate" value="确定"/>
|
||||
<input type="button" class="btn btn-warning" @click="reload" value="返回"/>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script src="../public/libs/jquery.min.js"></script>
|
||||
<script src="../public/plugins/layer/layer.js"></script>
|
||||
<script src="../public/libs/bootstrap.min.js"></script>
|
||||
<script src="../public/libs/vue.js"></script>
|
||||
<script src="../public/libs/myindex.js"></script>
|
||||
<script src="../public/plugins/bootstrap-table/bootstrap-table.min.js"></script>
|
||||
<script src="../public/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
|
||||
<script src="../public/plugins/ztree/jquery.ztree.all.min.js"></script>
|
||||
<script src="../public/plugins/ueditor/ueditor.config.js"></script>
|
||||
<script src="../public/plugins/ueditor/ueditor.all.js"></script>
|
||||
<script src="../public/plugins/ueditor/ueditor.parse.min.js"></script>
|
||||
<script src="../public/plugins/ueditor/lang/zh-cn/zh-cn.js"></script>
|
||||
<script src="../public/js/common.js"></script>
|
||||
<script src="../public/js/activity/activity.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,106 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>灰度发布管理</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
|
||||
<link rel="stylesheet" href="../public/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="../public/css/font-awesome.min.css">
|
||||
<link rel="stylesheet" href="../public/plugins/bootstrap-table/bootstrap-table.min.css">
|
||||
<link rel="stylesheet" href="../public/plugins/ztree/css/metroStyle/metroStyle.css">
|
||||
<link rel="stylesheet" href="../public/css/main.css">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<div id="dtapp" v-cloak>
|
||||
|
||||
<div v-show="showList">
|
||||
<div id="toolbar">
|
||||
<button v-if="hasPermission('sys:menu:save')" class="btn btn-success " type="button" @click="add">
|
||||
<i class="fa fa-plus"></i> <span class="bold">新增</span>
|
||||
</button>
|
||||
<button v-if="hasPermission('sys:menu:update')" class="btn btn-success " type="button" @click="update">
|
||||
<i class="fa fa-pencil-square-o"></i> <span class="bold">修改</span>
|
||||
</button>
|
||||
<button v-if="hasPermission('sys:menu:delete')" class="btn btn-danger " type="button" @click="del">
|
||||
<i class="fa fa-remove"></i> <span class="bold">删除</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<table id="table"></table>
|
||||
</div>
|
||||
|
||||
<div v-show="!showList" class="panel panel-default">
|
||||
<div class="panel-heading">{{title}}</div>
|
||||
<form class="form-horizontal">
|
||||
<input type="hidden" v-model="grayrelease.id"/>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">服务名称</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="grayrelease.serviceId" placeholder="服务名称"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">请求地址</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="grayrelease.path" placeholder="请求地址"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">频次</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="grayrelease.percent" placeholder="频次"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">版本标识</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="grayrelease.forward" placeholder="版本标识"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">启用状态</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="radio" value="1" v-model="grayrelease.state">启用
|
||||
<input type="radio" value="0" v-model="grayrelease.state">停用
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- <div class="form-group">-->
|
||||
<!-- <div class="col-sm-2 control-label">启用状态</div>-->
|
||||
<!-- <label class="radio-inline">-->
|
||||
<!-- <input type="radio" value="0" name="notifyState" class="form-control radiosize" v-model="notify.notifyState" />停用-->
|
||||
<!-- </label>-->
|
||||
<!-- <label class="radio-inline">-->
|
||||
<!-- <input type="radio" value="1" name="notifyState" class="form-control radiosize" v-model="notify.notifyState" />启用-->
|
||||
<!-- </label>-->
|
||||
|
||||
<!-- </div>-->
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label"></div>
|
||||
<input type="button" class="btn btn-primary" @click="saveOrUpdate" value="确定"/>
|
||||
<input type="button" class="btn btn-warning" @click="reload" value="返回"/>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- 选择菜单 -->
|
||||
<div id="menuLayer" style="display: none;padding:10px;">
|
||||
<ul id="menuTree" class="ztree"></ul>
|
||||
</div>
|
||||
|
||||
<script src="../public/libs/jquery.min.js"></script>
|
||||
<script src="../public/plugins/layer/layer.js"></script>
|
||||
<script src="../public/libs/bootstrap.min.js"></script>
|
||||
<script src="../public/libs/vue.min.js"></script>
|
||||
<script src="../public/plugins/bootstrap-table/bootstrap-table.min.js"></script>
|
||||
<script src="../public/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
|
||||
<script src="../public/plugins/ztree/jquery.ztree.all.min.js"></script>
|
||||
<script src="../public/js/common.js"></script>
|
||||
<script src="../public/js/api/garyrelease.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,106 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>api网关映射管理</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
|
||||
<link rel="stylesheet" href="../public/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="../public/css/font-awesome.min.css">
|
||||
<link rel="stylesheet" href="../public/plugins/bootstrap-table/bootstrap-table.min.css">
|
||||
<link rel="stylesheet" href="../public/plugins/ztree/css/metroStyle/metroStyle.css">
|
||||
<link rel="stylesheet" href="../public/css/main.css">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<div id="dtapp" v-cloak>
|
||||
|
||||
<div v-show="showList">
|
||||
<div id="toolbar">
|
||||
<button v-if="hasPermission('sys:menu:save')" class="btn btn-success " type="button" @click="add">
|
||||
<i class="fa fa-plus"></i> <span class="bold">新增</span>
|
||||
</button>
|
||||
<button v-if="hasPermission('sys:menu:update')" class="btn btn-success " type="button" @click="update">
|
||||
<i class="fa fa-pencil-square-o"></i> <span class="bold">修改</span>
|
||||
</button>
|
||||
<button v-if="hasPermission('sys:menu:delete')" class="btn btn-danger " type="button" @click="del">
|
||||
<i class="fa fa-remove"></i> <span class="bold">删除</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<table id="table"></table>
|
||||
</div>
|
||||
|
||||
<div v-show="!showList" class="panel panel-default">
|
||||
<div class="panel-heading">{{title}}</div>
|
||||
<form class="form-horizontal">
|
||||
<input type="hidden" v-model="apimapping.id"/>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">api名称</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="apimapping.gatewayApiName" placeholder="api名称"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">映射网关</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="apimapping.serviceId" placeholder="映射网关"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">映射地址</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="apimapping.insideApiUrl" placeholder="映射地址"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">介绍</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="apimapping.description" placeholder="介绍"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">启用状态</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="radio" value="1" v-model="apimapping.state">启用
|
||||
<input type="radio" value="0" v-model="apimapping.state">停用
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- <div class="form-group">-->
|
||||
<!-- <div class="col-sm-2 control-label">启用状态</div>-->
|
||||
<!-- <label class="radio-inline">-->
|
||||
<!-- <input type="radio" value="0" name="notifyState" class="form-control radiosize" v-model="notify.notifyState" />停用-->
|
||||
<!-- </label>-->
|
||||
<!-- <label class="radio-inline">-->
|
||||
<!-- <input type="radio" value="1" name="notifyState" class="form-control radiosize" v-model="notify.notifyState" />启用-->
|
||||
<!-- </label>-->
|
||||
|
||||
<!-- </div>-->
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label"></div>
|
||||
<input type="button" class="btn btn-primary" @click="saveOrUpdate" value="确定"/>
|
||||
<input type="button" class="btn btn-warning" @click="reload" value="返回"/>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- 选择菜单 -->
|
||||
<div id="menuLayer" style="display: none;padding:10px;">
|
||||
<ul id="menuTree" class="ztree"></ul>
|
||||
</div>
|
||||
|
||||
<script src="../public/libs/jquery.min.js"></script>
|
||||
<script src="../public/plugins/layer/layer.js"></script>
|
||||
<script src="../public/libs/bootstrap.min.js"></script>
|
||||
<script src="../public/libs/vue.min.js"></script>
|
||||
<script src="../public/plugins/bootstrap-table/bootstrap-table.min.js"></script>
|
||||
<script src="../public/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
|
||||
<script src="../public/plugins/ztree/jquery.ztree.all.min.js"></script>
|
||||
<script src="../public/js/common.js"></script>
|
||||
<script src="../public/js/api/api.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,114 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>接口公共参数管理</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
|
||||
<link rel="stylesheet" href="../public/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="../public/css/font-awesome.min.css">
|
||||
<link rel="stylesheet" href="../public/plugins/bootstrap-table/bootstrap-table.min.css">
|
||||
<link rel="stylesheet" href="../public/plugins/ztree/css/metroStyle/metroStyle.css">
|
||||
<link rel="stylesheet" href="../public/css/main.css">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<div id="dtapp" v-cloak>
|
||||
|
||||
<div v-show="showList">
|
||||
<div id="toolbar">
|
||||
<button v-if="hasPermission('sys:menu:save')" class="btn btn-success " type="button" @click="add">
|
||||
<i class="fa fa-plus"></i> <span class="bold">新增</span>
|
||||
</button>
|
||||
<button v-if="hasPermission('sys:menu:update')" class="btn btn-success " type="button" @click="update">
|
||||
<i class="fa fa-pencil-square-o"></i> <span class="bold">修改</span>
|
||||
</button>
|
||||
<button v-if="hasPermission('sys:menu:delete')" class="btn btn-danger " type="button" @click="del">
|
||||
<i class="fa fa-remove"></i> <span class="bold">删除</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<table id="table"></table>
|
||||
</div>
|
||||
|
||||
<div v-show="!showList" class="panel panel-default">
|
||||
<div class="panel-heading">{{title}}</div>
|
||||
<form class="form-horizontal">
|
||||
<input type="hidden" v-model="param.id"/>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">参数名</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="param.paramName" placeholder="参数名"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">参数类型</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="param.paramType" placeholder="参数类型"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- <div class="form-group">
|
||||
<div class="col-sm-2 control-label">创建日期</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="param.createDate" placeholder="创建日期"/>
|
||||
</div>
|
||||
</div> -->
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">介绍</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="param.descripton" placeholder="介绍"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">是否必须</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="radio" value="1" v-model="param.isMust">必须
|
||||
<input type="radio" value="0" v-model="param.isMust">可选
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">启用状态</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="radio" value="1" v-model="param.enableState">启用
|
||||
<input type="radio" value="0" v-model="param.enableState">停用
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- <div class="form-group">-->
|
||||
<!-- <div class="col-sm-2 control-label">启用状态</div>-->
|
||||
<!-- <label class="radio-inline">-->
|
||||
<!-- <input type="radio" value="0" name="notifyState" class="form-control radiosize" v-model="notify.notifyState" />停用-->
|
||||
<!-- </label>-->
|
||||
<!-- <label class="radio-inline">-->
|
||||
<!-- <input type="radio" value="1" name="notifyState" class="form-control radiosize" v-model="notify.notifyState" />启用-->
|
||||
<!-- </label>-->
|
||||
|
||||
<!-- </div>-->
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label"></div>
|
||||
<input type="button" class="btn btn-primary" @click="saveOrUpdate" value="确定"/>
|
||||
<input type="button" class="btn btn-warning" @click="reload" value="返回"/>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- 选择菜单 -->
|
||||
<div id="menuLayer" style="display: none;padding:10px;">
|
||||
<ul id="menuTree" class="ztree"></ul>
|
||||
</div>
|
||||
|
||||
<script src="../public/libs/jquery.min.js"></script>
|
||||
<script src="../public/plugins/layer/layer.js"></script>
|
||||
<script src="../public/libs/bootstrap.min.js"></script>
|
||||
<script src="../public/libs/vue.min.js"></script>
|
||||
<script src="../public/plugins/bootstrap-table/bootstrap-table.min.js"></script>
|
||||
<script src="../public/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
|
||||
<script src="../public/plugins/ztree/jquery.ztree.all.min.js"></script>
|
||||
<script src="../public/js/common.js"></script>
|
||||
<script src="../public/js/api/public_params.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,64 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>黑名单管理</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
|
||||
<link rel="stylesheet" href="../public/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="../public/css/font-awesome.min.css">
|
||||
<link rel="stylesheet" href="../public/plugins/bootstrap-table/bootstrap-table.min.css">
|
||||
<link rel="stylesheet" href="../public/plugins/ztree/css/metroStyle/metroStyle.css">
|
||||
<link rel="stylesheet" href="../public/css/main.css">
|
||||
<link rel="stylesheet" href="../public/css/index.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="dtapp" v-cloak>
|
||||
|
||||
<div v-show="showList">
|
||||
<div id="toolbar">
|
||||
<button class="btn btn-success " type="button" @click="add">
|
||||
<i class="fa fa-plus"></i> <span class="bold">新增</span>
|
||||
</button>
|
||||
<button class="btn btn-success " type="button" @click="update">
|
||||
<i class="fa fa-pencil-square-o"></i> <span class="bold">修改</span>
|
||||
</button>
|
||||
<button class="btn btn-danger " type="button" @click="del">
|
||||
<i class="fa fa-remove"></i> <span class="bold">删除</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<table id="table"></table>
|
||||
</div>
|
||||
|
||||
<div v-show="!showList" class="panel panel-default">
|
||||
<div class="panel-heading">{{title}}</div>
|
||||
<form class="form-horizontal">
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">手机黑名单</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="black.mobile" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label"></div>
|
||||
<input type="button" class="btn btn-primary" @click="saveOrUpdate" value="确定"/>
|
||||
<input type="button" class="btn btn-warning" @click="reload" value="返回"/>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script src="../public/libs/jquery.min.js"></script>
|
||||
<script src="../public/plugins/layer/layer.js"></script>
|
||||
<script src="../public/libs/bootstrap.min.js"></script>
|
||||
<script src="../public/libs/vue.min.js"></script>
|
||||
<script src="../public/libs/myindex.js"></script>
|
||||
<script src="../public/plugins/bootstrap-table/bootstrap-table.min.js"></script>
|
||||
<script src="../public/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
|
||||
<script src="../public/plugins/ztree/jquery.ztree.all.min.js"></script>
|
||||
<script src="../public/js/common.js"></script>
|
||||
<script src="../public/js/black/blacklist.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,91 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>短信通道管理</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
|
||||
<link rel="stylesheet" href="../public/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="../public/css/font-awesome.min.css">
|
||||
<link rel="stylesheet" href="../public/plugins/bootstrap-table/bootstrap-table.min.css">
|
||||
<link rel="stylesheet" href="../public/plugins/ztree/css/metroStyle/metroStyle.css">
|
||||
<link rel="stylesheet" href="../public/css/main.css">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<div id="dtapp" v-cloak>
|
||||
|
||||
<div v-show="showList">
|
||||
<div id="toolbar">
|
||||
<button v-if="hasPermission('sys:menu:save')" class="btn btn-success " type="button" @click="add">
|
||||
<i class="fa fa-plus"></i> <span class="bold">新增</span>
|
||||
</button>
|
||||
<button v-if="hasPermission('sys:menu:update')" class="btn btn-success " type="button" @click="update">
|
||||
<i class="fa fa-pencil-square-o"></i> <span class="bold">修改</span>
|
||||
</button>
|
||||
<button v-if="hasPermission('sys:menu:delete')" class="btn btn-danger " type="button" @click="del">
|
||||
<i class="fa fa-remove"></i> <span class="bold">删除</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<table id="table"></table>
|
||||
</div>
|
||||
|
||||
<div v-show="!showList" class="panel panel-default">
|
||||
<div class="panel-heading">{{title}}</div>
|
||||
<form class="form-horizontal">
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">通道名称</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="channel.channelname" placeholder="通道名称"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">通道类型</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="radio" value="0" v-model="channel.channeltype">全网
|
||||
<input type="radio" value="1" v-model="channel.channeltype">移动
|
||||
<input type="radio" value="2" v-model="channel.channeltype">联通
|
||||
<input type="radio" value="3" v-model="channel.channeltype">电信
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">账户接入号</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="channel.spnumber" placeholder="账户接入号"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">协议类型</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="radio" value="1" v-model="channel.protocaltype">cmpp
|
||||
<input type="radio" value="2" v-model="channel.protocaltype">sgip
|
||||
<input type="radio" value="3" v-model="channel.protocaltype">smgp
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label"></div>
|
||||
<input type="button" class="btn btn-primary" @click="saveOrUpdate" value="确定"/>
|
||||
<input type="button" class="btn btn-warning" @click="reload" value="返回"/>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- 选择菜单 -->
|
||||
<div id="menuLayer" style="display: none;padding:10px;">
|
||||
<ul id="menuTree" class="ztree"></ul>
|
||||
</div>
|
||||
|
||||
<script src="../public/libs/jquery.min.js"></script>
|
||||
<script src="../public/plugins/layer/layer.js"></script>
|
||||
<script src="../public/libs/bootstrap.min.js"></script>
|
||||
<script src="../public/libs/vue.min.js"></script>
|
||||
<script src="../public/plugins/bootstrap-table/bootstrap-table.min.js"></script>
|
||||
<script src="../public/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
|
||||
<script src="../public/plugins/ztree/jquery.ztree.all.min.js"></script>
|
||||
<script src="../public/js/common.js"></script>
|
||||
<script src="../public/js/channel/channel.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,94 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>客户管理</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
|
||||
<link rel="stylesheet" href="../public/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="../public/css/font-awesome.min.css">
|
||||
<link rel="stylesheet" href="../public/plugins/bootstrap-table/bootstrap-table.min.css">
|
||||
<link rel="stylesheet" href="../public/plugins/ztree/css/metroStyle/metroStyle.css">
|
||||
<link rel="stylesheet" href="../public/css/main.css">
|
||||
<link rel="stylesheet" href="../public/css/index.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="dtapp" v-cloak>
|
||||
|
||||
<div v-show="showList">
|
||||
<div id="toolbar">
|
||||
<button class="btn btn-success " type="button" @click="add">
|
||||
<i class="fa fa-plus"></i> <span class="bold">新增</span>
|
||||
</button>
|
||||
<button class="btn btn-success " type="button" @click="update">
|
||||
<i class="fa fa-pencil-square-o"></i> <span class="bold">修改</span>
|
||||
</button>
|
||||
<button class="btn btn-danger " type="button" @click="del">
|
||||
<i class="fa fa-remove"></i> <span class="bold">删除</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<table id="table"></table>
|
||||
</div>
|
||||
|
||||
<div v-show="!showList" class="panel panel-default">
|
||||
<div class="panel-heading">{{title}}</div>
|
||||
<form class="form-horizontal">
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">公司名称</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="client.corpname" placeholder="公司名称"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">公司地址</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="client.address" placeholder="公司地址"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">联系人</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="client.linkman" placeholder="联系人"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">手机号</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="client.mobile" placeholder="手机号"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">email</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="client.email" placeholder="email"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">客户经理</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="client.customermanager" placeholder="客户经理"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label"></div>
|
||||
<input type="button" class="btn btn-primary" @click="saveOrUpdate" value="确定"/>
|
||||
<input type="button" class="btn btn-warning" @click="reload" value="返回"/>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script src="../public/libs/jquery.min.js"></script>
|
||||
<script src="../public/plugins/layer/layer.js"></script>
|
||||
<script src="../public/libs/bootstrap.min.js"></script>
|
||||
<script src="../public/libs/vue.min.js"></script>
|
||||
<script src="../public/libs/myindex.js"></script>
|
||||
<script src="../public/plugins/bootstrap-table/bootstrap-table.min.js"></script>
|
||||
<script src="../public/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
|
||||
<script src="../public/plugins/ztree/jquery.ztree.all.min.js"></script>
|
||||
<script src="../public/js/common.js"></script>
|
||||
<script src="../public/js/client/client.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,129 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>客户接入管理</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
|
||||
<link rel="stylesheet" href="../public/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="../public/css/font-awesome.min.css">
|
||||
<link rel="stylesheet" href="../public/plugins/bootstrap-table/bootstrap-table.min.css">
|
||||
<link rel="stylesheet" href="../public/plugins/ztree/css/metroStyle/metroStyle.css">
|
||||
<link rel="stylesheet" href="../public/css/main.css">
|
||||
<link rel="stylesheet" href="../public/css/index.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="dtapp" v-cloak>
|
||||
|
||||
<div v-show="showList">
|
||||
<div id="toolbar">
|
||||
<button class="btn btn-success " type="button" @click="add">
|
||||
<i class="fa fa-plus"></i> <span class="bold">新增</span>
|
||||
</button>
|
||||
<button class="btn btn-success " type="button" @click="update">
|
||||
<i class="fa fa-pencil-square-o"></i> <span class="bold">修改</span>
|
||||
</button>
|
||||
<button class="btn btn-danger " type="button" @click="del">
|
||||
<i class="fa fa-remove"></i> <span class="bold">删除</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<table id="table"></table>
|
||||
</div>
|
||||
|
||||
<div v-show="!showList" class="panel panel-default">
|
||||
<div class="panel-heading">{{title}}</div>
|
||||
<form class="form-horizontal">
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">公司名称</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="clientbusiness.corpname" placeholder="公司名称"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">接入的用户名</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="clientbusiness.usercode" placeholder="接入的用户名"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">接入的密码</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="clientbusiness.pwd" placeholder="接入的密码"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">接入的IP地址</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="clientbusiness.ipaddress" placeholder="接入的IP地址"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">是否返回</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="radio" value="1" v-model="clientbusiness.isreturnstatus">返回
|
||||
<input type="radio" value="0" v-model="clientbusiness.isreturnstatus">不返回
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">接收状态报告地址</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="clientbusiness.receivestatusurl"
|
||||
placeholder="接收状态报告地址"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">业务优先级</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="number" class="form-control" v-model="clientbusiness.priority" placeholder="业务优先级"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">使用方式</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="radio" value="1" v-model="clientbusiness.usertype">http
|
||||
<input type="radio" value="2" v-model="clientbusiness.usertype">WEB
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">开通状态</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="radio" value="0" v-model="clientbusiness.state">没开通
|
||||
<input type="radio" value="1" v-model="clientbusiness.state">开通
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">手机号</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="clientbusiness.mobile" placeholder="手机号"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">钱数(厘)</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="clientbusiness.money" placeholder="0"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label"></div>
|
||||
<input type="button" class="btn btn-primary" @click="saveOrUpdate" value="确定"/>
|
||||
<input type="button" class="btn btn-warning" @click="reload" value="返回"/>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script src="../public/libs/jquery.min.js"></script>
|
||||
<script src="../public/plugins/layer/layer.js"></script>
|
||||
<script src="../public/libs/bootstrap.min.js"></script>
|
||||
<script src="../public/libs/vue.min.js"></script>
|
||||
<script src="../public/libs/myindex.js"></script>
|
||||
<script src="../public/plugins/bootstrap-table/bootstrap-table.min.js"></script>
|
||||
<script src="../public/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
|
||||
<script src="../public/plugins/ztree/jquery.ztree.all.min.js"></script>
|
||||
<script src="../public/js/common.js"></script>
|
||||
<script src="../public/js/client/clientbusiness.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,86 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>客户通道管理</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
|
||||
<link rel="stylesheet" href="../public/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="../public/css/font-awesome.min.css">
|
||||
<link rel="stylesheet" href="../public/plugins/bootstrap-table/bootstrap-table.min.css">
|
||||
<link rel="stylesheet" href="../public/plugins/ztree/css/metroStyle/metroStyle.css">
|
||||
<link rel="stylesheet" href="../public/css/main.css">
|
||||
<link rel="stylesheet" href="../public/css/index.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="dtapp" v-cloak>
|
||||
|
||||
<div v-show="showList">
|
||||
<div id="toolbar">
|
||||
<button class="btn btn-success " type="button" @click="add">
|
||||
<i class="fa fa-plus"></i> <span class="bold">新增</span>
|
||||
</button>
|
||||
<button class="btn btn-success " type="button" @click="update">
|
||||
<i class="fa fa-pencil-square-o"></i> <span class="bold">修改</span>
|
||||
</button>
|
||||
<button class="btn btn-danger " type="button" @click="del">
|
||||
<i class="fa fa-remove"></i> <span class="bold">删除</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<table id="table"></table>
|
||||
</div>
|
||||
|
||||
<div v-show="!showList" class="panel panel-default">
|
||||
<div class="panel-heading">{{title}}</div>
|
||||
<form class="form-horizontal">
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">所属客户</div>
|
||||
<div class="col-sm-10">
|
||||
<select v-model="clientchannel.clientid" name="sites" id="sites">
|
||||
<option v-for="item in sites" :value="item.id">{{ item.corpname }}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">扩展号</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="number" class="form-control" v-model="clientchannel.extendnumber"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">每条的价格</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="clientchannel.price" placeholder="价格(单位里)"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">所属通道</div>
|
||||
<div class="col-sm-10">
|
||||
<select v-model="clientchannel.channelid" name="channelsites" id="channelsites">
|
||||
<option v-for="item in channelsites" :value="item.id">{{ item.channelname }}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label"></div>
|
||||
<input type="button" class="btn btn-primary" @click="saveOrUpdate" value="确定"/>
|
||||
<input type="button" class="btn btn-warning" @click="reload" value="返回"/>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script src="../public/libs/jquery.min.js"></script>
|
||||
<script src="../public/plugins/layer/layer.js"></script>
|
||||
<script src="../public/libs/bootstrap.min.js"></script>
|
||||
<script src="../public/libs/vue.min.js"></script>
|
||||
<script src="../public/libs/myindex.js"></script>
|
||||
<script src="../public/plugins/bootstrap-table/bootstrap-table.min.js"></script>
|
||||
<script src="../public/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
|
||||
<script src="../public/plugins/ztree/jquery.ztree.all.min.js"></script>
|
||||
<script src="../public/js/common.js"></script>
|
||||
<script src="../public/js/client/clientchannel.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,64 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>搜索短信</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
|
||||
<link rel="stylesheet" href="../public/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="../public/css/font-awesome.min.css">
|
||||
<link rel="stylesheet" href="../public/plugins/bootstrap-table/bootstrap-table.min.css">
|
||||
<link rel="stylesheet" href="../public/plugins/ztree/css/metroStyle/metroStyle.css">
|
||||
<link rel="stylesheet" href="../public/css/main.css">
|
||||
<link rel="stylesheet" href="../public/css/index.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="dtapp" v-cloak>
|
||||
|
||||
<div>
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">查询条件</div>
|
||||
<div class="panel-body">
|
||||
<form id="formSearch" class="form-inline">
|
||||
<div class="form-group">
|
||||
<label>关键字</label>
|
||||
<input type="text" class="form-control" id="content">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>手机号</label>
|
||||
<input type="text" class="form-control" id="mobile">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>时间</label>
|
||||
<input type="date" class="form-control" id="starttime">
|
||||
<input type="date" class="form-control" id="stoptime">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label >公司</label>
|
||||
<select class="form-control" id="clientID" >
|
||||
<option value="">请选择</option>
|
||||
<option :value="item.id" v-for="item in sites">{{item.corpname}}</option>
|
||||
</select>
|
||||
</div>
|
||||
<button type="button" class="btn btn-primary" @click="reload">查询</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<table id="table"></table>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<script src="../public/libs/jquery.min.js"></script>
|
||||
<script src="../public/plugins/layer/layer.js"></script>
|
||||
<script src="../public/libs/bootstrap.min.js"></script>
|
||||
<script src="../public/libs/vue.min.js"></script>
|
||||
<script src="../public/libs/myindex.js"></script>
|
||||
<script src="../public/plugins/bootstrap-table/bootstrap-table.min.js"></script>
|
||||
<script src="../public/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
|
||||
<script src="../public/plugins/ztree/jquery.ztree.all.min.js"></script>
|
||||
<script src="../public/js/common.js"></script>
|
||||
<script src="../public/js/client/search.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,53 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>短信发送管理</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
|
||||
<link rel="stylesheet" href="../public/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="../public/css/font-awesome.min.css">
|
||||
<link rel="stylesheet" href="../public/plugins/bootstrap-table/bootstrap-table.min.css">
|
||||
<link rel="stylesheet" href="../public/plugins/ztree/css/metroStyle/metroStyle.css">
|
||||
<link rel="stylesheet" href="../public/css/main.css">
|
||||
<link rel="stylesheet" href="../public/css/index.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="dtapp" v-cloak>
|
||||
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">{{title}}</div>
|
||||
<form class="form-horizontal">
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">手机号</div>
|
||||
<div class="col-sm-10">
|
||||
<textarea class="form-control" v-model="sms.mobile" rows="15" placeholder="手机之间换行"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">短信内容</div>
|
||||
<div class="col-sm-10">
|
||||
<textarea class="form-control" v-model="sms.content"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label"></div>
|
||||
<input type="button" class="btn btn-primary" @click="saveOrUpdate" value="短信发送"/>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script src="../public/libs/jquery.min.js"></script>
|
||||
<script src="../public/plugins/layer/layer.js"></script>
|
||||
<script src="../public/libs/bootstrap.min.js"></script>
|
||||
<script src="../public/libs/vue.min.js"></script>
|
||||
<script src="../public/libs/myindex.js"></script>
|
||||
<script src="../public/plugins/bootstrap-table/bootstrap-table.min.js"></script>
|
||||
<script src="../public/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
|
||||
<script src="../public/plugins/ztree/jquery.ztree.all.min.js"></script>
|
||||
<script src="../public/js/common.js"></script>
|
||||
<script src="../public/js/client/smssend.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,13 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Title</title>
|
||||
</head>
|
||||
<body>
|
||||
<form action="/sys/clientbusiness/pay">
|
||||
<input type="number" name="jine"><br>
|
||||
<input type="submit">
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,99 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>数据同步通知管理</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
|
||||
<link rel="stylesheet" href="../public/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="../public/css/font-awesome.min.css">
|
||||
<link rel="stylesheet" href="../public/plugins/bootstrap-table/bootstrap-table.min.css">
|
||||
<link rel="stylesheet" href="../public/plugins/ztree/css/metroStyle/metroStyle.css">
|
||||
<link rel="stylesheet" href="../public/css/main.css">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<div id="dtapp" v-cloak>
|
||||
|
||||
<div v-show="showList">
|
||||
<div id="toolbar">
|
||||
<button v-if="hasPermission('sys:menu:save')" class="btn btn-success " type="button" @click="add">
|
||||
<i class="fa fa-plus"></i> <span class="bold">新增</span>
|
||||
</button>
|
||||
<button v-if="hasPermission('sys:menu:update')" class="btn btn-success " type="button" @click="update">
|
||||
<i class="fa fa-pencil-square-o"></i> <span class="bold">修改</span>
|
||||
</button>
|
||||
<button v-if="hasPermission('sys:menu:delete')" class="btn btn-danger " type="button" @click="del">
|
||||
<i class="fa fa-remove"></i> <span class="bold">删除</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<table id="table"></table>
|
||||
</div>
|
||||
|
||||
<div v-show="!showList" class="panel panel-default">
|
||||
<div class="panel-heading">{{title}}</div>
|
||||
<form class="form-horizontal">
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">通知标记</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="notify.tag" placeholder="通知标记"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">通知介绍</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="notify.desp" placeholder="介绍"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">推送消息(依赖同步缓存)</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="radio" value="1" v-model="notify.notifyState">启用
|
||||
<input type="radio" value="0" v-model="notify.notifyState">停用
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">同步缓存(停用会不推送)</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="radio" value="1" v-model="notify.cacheState">启用
|
||||
<input type="radio" value="0" v-model="notify.cacheState">停用
|
||||
</div>
|
||||
</div>
|
||||
<!-- <div class="form-group">-->
|
||||
<!-- <div class="col-sm-2 control-label">启用状态</div>-->
|
||||
<!-- <label class="radio-inline">-->
|
||||
<!-- <input type="radio" value="0" name="notifyState" class="form-control radiosize" v-model="notify.notifyState" />停用-->
|
||||
<!-- </label>-->
|
||||
<!-- <label class="radio-inline">-->
|
||||
<!-- <input type="radio" value="1" name="notifyState" class="form-control radiosize" v-model="notify.notifyState" />启用-->
|
||||
<!-- </label>-->
|
||||
|
||||
<!-- </div>-->
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label"></div>
|
||||
<input type="button" class="btn btn-primary" @click="saveOrUpdate" value="确定"/>
|
||||
<input type="button" class="btn btn-warning" @click="reload" value="返回"/>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- 选择菜单 -->
|
||||
<div id="menuLayer" style="display: none;padding:10px;">
|
||||
<ul id="menuTree" class="ztree"></ul>
|
||||
</div>
|
||||
|
||||
<script src="../public/libs/jquery.min.js"></script>
|
||||
<script src="../public/plugins/layer/layer.js"></script>
|
||||
<script src="../public/libs/bootstrap.min.js"></script>
|
||||
<script src="../public/libs/vue.min.js"></script>
|
||||
<script src="../public/plugins/bootstrap-table/bootstrap-table.min.js"></script>
|
||||
<script src="../public/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
|
||||
<script src="../public/plugins/ztree/jquery.ztree.all.min.js"></script>
|
||||
<script src="../public/js/common.js"></script>
|
||||
<script src="../public/js/config/notify.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,103 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>数据同步通知管理</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
|
||||
<link rel="stylesheet" href="../public/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="../public/css/font-awesome.min.css">
|
||||
<link rel="stylesheet" href="../public/plugins/bootstrap-table/bootstrap-table.min.css">
|
||||
<link rel="stylesheet" href="../public/plugins/ztree/css/metroStyle/metroStyle.css">
|
||||
<link rel="stylesheet" href="../public/css/main.css">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<div id="dtapp" v-cloak>
|
||||
|
||||
<div v-show="showList">
|
||||
<div id="toolbar">
|
||||
<button v-if="hasPermission('sys:menu:save')" class="btn btn-success " type="button" @click="add">
|
||||
<i class="fa fa-plus"></i> <span class="bold">新增</span>
|
||||
</button>
|
||||
<button v-if="hasPermission('sys:menu:update')" class="btn btn-success " type="button" @click="update">
|
||||
<i class="fa fa-pencil-square-o"></i> <span class="bold">修改</span>
|
||||
</button>
|
||||
<button v-if="hasPermission('sys:menu:delete')" class="btn btn-danger " type="button" @click="del">
|
||||
<i class="fa fa-remove"></i> <span class="bold">删除</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<table id="table"></table>
|
||||
</div>
|
||||
|
||||
<div v-show="!showList" class="panel panel-default">
|
||||
<div class="panel-heading">{{title}}</div>
|
||||
<form class="form-horizontal">
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">请求参数名</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="searchparams.name" placeholder="请求参数名"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">对应搜索参数列名</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="searchparams.cloum" placeholder="对应搜索参数列名"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">搜索类型</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="searchparams.type" placeholder="搜索类型如match,term,range"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">参数范围(range类型有效)</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="searchparams.tOrder" placeholder="0代表range起点,1代表range终点"/>
|
||||
</div>
|
||||
</div>
|
||||
<!-- <div class="form-group">-->
|
||||
<!-- <div class="col-sm-2 control-label">启用状态</div>-->
|
||||
<!-- <label class="radio-inline">-->
|
||||
<!-- <input type="radio" value="0" name="state" class="form-control radiosize" v-model="searchparams.state" />停用-->
|
||||
<!-- </label>-->
|
||||
<!-- <label class="radio-inline">-->
|
||||
<!-- <input type="radio" value="1" name="state" class="form-control radiosize" v-model="searchparams.state" />启用-->
|
||||
<!-- </label>-->
|
||||
|
||||
<!-- </div>-->
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">启用状态</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="radio" value="1" v-model="searchparams.state">启用
|
||||
<input type="radio" value="0" v-model="searchparams.state">停用
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label"></div>
|
||||
<input type="button" class="btn btn-primary" @click="saveOrUpdate" value="确定"/>
|
||||
<input type="button" class="btn btn-warning" @click="reload" value="返回"/>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- 选择菜单 -->
|
||||
<div id="menuLayer" style="display: none;padding:10px;">
|
||||
<ul id="menuTree" class="ztree"></ul>
|
||||
</div>
|
||||
|
||||
<script src="../public/libs/jquery.min.js"></script>
|
||||
<script src="../public/plugins/layer/layer.js"></script>
|
||||
<script src="../public/libs/bootstrap.min.js"></script>
|
||||
<script src="../public/libs/vue.min.js"></script>
|
||||
<script src="../public/plugins/bootstrap-table/bootstrap-table.min.js"></script>
|
||||
<script src="../public/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
|
||||
<script src="../public/plugins/ztree/jquery.ztree.all.min.js"></script>
|
||||
<script src="../public/js/common.js"></script>
|
||||
<script src="../public/js/config/searchparams.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,68 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>敏感词管理</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
|
||||
<link rel="stylesheet" href="../public/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="../public/css/font-awesome.min.css">
|
||||
<link rel="stylesheet" href="../public/plugins/bootstrap-table/bootstrap-table.min.css">
|
||||
<link rel="stylesheet" href="../public/plugins/ztree/css/metroStyle/metroStyle.css">
|
||||
<link rel="stylesheet" href="../public/css/main.css">
|
||||
<link rel="stylesheet" href="../public/css/index.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="dtapp" v-cloak>
|
||||
|
||||
<div v-show="showList">
|
||||
<div id="toolbar">
|
||||
<button class="btn btn-success " type="button" @click="add">
|
||||
<i class="fa fa-plus"></i> <span class="bold">新增</span>
|
||||
</button>
|
||||
<button class="btn btn-success " type="button" @click="update">
|
||||
<i class="fa fa-pencil-square-o"></i> <span class="bold">修改</span>
|
||||
</button>
|
||||
<button class="btn btn-danger " type="button" @click="del">
|
||||
<i class="fa fa-remove"></i> <span class="bold">删除</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<table id="table"></table>
|
||||
</div>
|
||||
|
||||
<div v-show="!showList" class="panel panel-default">
|
||||
<div class="panel-heading">{{title}}</div>
|
||||
<form class="form-horizontal">
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">敏感词</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="message.dirtyword" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label"></div>
|
||||
<input type="button" class="btn btn-primary" @click="saveOrUpdate" value="确定"/>
|
||||
<input type="button" class="btn btn-warning" @click="reload" value="返回"/>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script src="../public/libs/jquery.min.js"></script>
|
||||
<script src="../public/plugins/layer/layer.js"></script>
|
||||
<script src="../public/libs/bootstrap.min.js"></script>
|
||||
<script src="../public/libs/vue.js"></script>
|
||||
<script src="../public/libs/myindex.js"></script>
|
||||
<script src="../public/plugins/bootstrap-table/bootstrap-table.min.js"></script>
|
||||
<script src="../public/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
|
||||
<script src="../public/plugins/ztree/jquery.ztree.all.min.js"></script>
|
||||
<script src="../public/plugins/ueditor/ueditor.config.js"></script>
|
||||
<script src="../public/plugins/ueditor/ueditor.all.js"></script>
|
||||
<script src="../public/plugins/ueditor/ueditor.parse.min.js"></script>
|
||||
<script src="../public/plugins/ueditor/lang/zh-cn/zh-cn.js"></script>
|
||||
<script src="../public/js/common.js"></script>
|
||||
<script src="../public/js/dirtyword/dirtyword.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,46 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Title</title>
|
||||
<script src="../public/libs/jquery.min.js"></script>
|
||||
<script src="../public/plugins/echarts/echarts.min.js"></script>
|
||||
<script>
|
||||
$(function () {
|
||||
//1,初始化echarts
|
||||
var myEcharts = echarts.init(document.getElementById("bar"));
|
||||
//2,设置图形显示的数据选项
|
||||
var option = {
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
data: []
|
||||
},
|
||||
yAxis: {
|
||||
type: 'value'
|
||||
},
|
||||
series: [{
|
||||
data: [],
|
||||
type: 'bar'
|
||||
}]
|
||||
};
|
||||
|
||||
$.get("/sys/echarts/bar", function (r) {
|
||||
//把真数据赋值给option
|
||||
option.xAxis.data = r.xAxis;
|
||||
option.series[0].data = r.seriesData;
|
||||
//3,把option设置给echarts对象 显示柱状图
|
||||
myEcharts.setOption(option);
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
|
||||
|
||||
<div id="bar" style="width: 600px;height: 600px;">
|
||||
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,52 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>部门员工数量</title>
|
||||
|
||||
<script src="../public/libs/jquery.min.js"></script>
|
||||
<script src="../public/plugins/echarts/echarts.min.js"></script>
|
||||
|
||||
<script>
|
||||
$(function () {
|
||||
//1,初始化echarts对象
|
||||
var myEcharts = echarts.init(document.getElementById("pie"));
|
||||
//2, 指定图表的配置项和数据
|
||||
var option = {
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
data: []
|
||||
},
|
||||
yAxis: {
|
||||
type: 'value'
|
||||
},
|
||||
series: [{
|
||||
data: [],
|
||||
type: 'line'
|
||||
}]
|
||||
};
|
||||
$.ajax({
|
||||
url: '/sys/echarts/line',
|
||||
dataType: 'json',
|
||||
success: function (r) {
|
||||
//给option赋值
|
||||
option.xAxis.data = r.xAxis;
|
||||
option.series[0].data = r.seriesData;
|
||||
// 使用刚指定的配置项和数据显示图表。
|
||||
myEcharts.setOption(option);
|
||||
}
|
||||
});
|
||||
// 使用刚指定的配置项和数据显示图表。
|
||||
// myEcharts.setOption(option); //因为ajax是异步的
|
||||
});
|
||||
</script>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!--图形的容器-->
|
||||
<div id="pie" style="width: 400px;height: 400px;">
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,71 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>成功率统计</title>
|
||||
|
||||
<script src="../public/libs/jquery.min.js"></script>
|
||||
<script src="../public/plugins/echarts/echarts.min.js"></script>
|
||||
|
||||
<script>
|
||||
$(function () {
|
||||
//1,初始化echarts对象
|
||||
var myEcharts = echarts.init(document.getElementById("pie"));
|
||||
//2, 指定图表的配置项和数据
|
||||
var option = {
|
||||
title: {
|
||||
text: '标签热度比例',
|
||||
subtext: '真实有效',
|
||||
x: 'center'
|
||||
},
|
||||
tooltip: {
|
||||
trigger: 'item',
|
||||
formatter: "{a} <br/>{b} : {c} ({d}%)"
|
||||
},
|
||||
legend: {
|
||||
orient: 'vertical',
|
||||
left: 'left',
|
||||
data: []
|
||||
},
|
||||
series: [
|
||||
{
|
||||
name: '标签热度比例',
|
||||
type: 'pie',
|
||||
radius: '55%',
|
||||
center: ['50%', '60%'],
|
||||
data: [],
|
||||
itemStyle: {
|
||||
emphasis: {
|
||||
shadowBlur: 10,
|
||||
shadowOffsetX: 0,
|
||||
shadowColor: 'rgba(0, 0, 0, 0.5)'
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
$.ajax({
|
||||
url: '/sys/echarts/pie',
|
||||
dataType: 'json',
|
||||
success: function (r) {
|
||||
console.log(r);
|
||||
//给option赋值
|
||||
//R.ok().put("legendData",legendData).put("seriesData",seriesData);
|
||||
option.legend.data = r.legendData;
|
||||
option.series[0].data = r.seriesData;
|
||||
// 使用刚指定的配置项和数据显示图表。
|
||||
myEcharts.setOption(option);
|
||||
}
|
||||
});
|
||||
// 使用刚指定的配置项和数据显示图表。
|
||||
// myEcharts.setOption(option); //因为ajax是异步的
|
||||
});
|
||||
</script>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<!--图形的容器-->
|
||||
<div id="pie" style="width: 400px;height: 400px;">
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,56 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>成功率统计</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
|
||||
<link rel="stylesheet" href="../public/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="../public/css/font-awesome.min.css">
|
||||
<link rel="stylesheet" href="../public/plugins/bootstrap-table/bootstrap-table.min.css">
|
||||
<link rel="stylesheet" href="../public/plugins/ztree/css/metroStyle/metroStyle.css">
|
||||
<link rel="stylesheet" href="../public/css/main.css">
|
||||
<link rel="stylesheet" href="../public/css/index.css">
|
||||
<script src="../public/libs/jquery.min.js"></script>
|
||||
<script src="../public/plugins/echarts/echarts.min.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="dtapp" v-cloak>
|
||||
<div>
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">查询条件</div>
|
||||
<div class="panel-body">
|
||||
<form id="formSearch" class="form-inline">
|
||||
<div class="form-group">
|
||||
<label>时间</label>
|
||||
<input type="date" class="form-control" id="start">
|
||||
<input type="date" class="form-control" id="end">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label >公司</label>
|
||||
<select class="form-control" id="clientID" >
|
||||
<option value="">请选择</option>
|
||||
<option :value="item.id" v-for="item in sites">{{item.corpname}}</option>
|
||||
</select>
|
||||
</div>
|
||||
<button type="button" class="btn btn-primary" @click="reload" >查询</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<!--图形的容器 -->
|
||||
<div id="pie" style="width: 800px;height: 600px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="../public/libs/jquery.min.js"></script>
|
||||
<script src="../public/plugins/layer/layer.js"></script>
|
||||
<script src="../public/libs/bootstrap.min.js"></script>
|
||||
<script src="../public/libs/vue.min.js"></script>
|
||||
<script src="../public/libs/myindex.js"></script>
|
||||
<script src="../public/plugins/bootstrap-table/bootstrap-table.min.js"></script>
|
||||
<script src="../public/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
|
||||
<script src="../public/plugins/ztree/jquery.ztree.all.min.js"></script>
|
||||
<script src="../public/js/common.js"></script>
|
||||
<script src="../public/js/client/smspie.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,86 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>过滤策略管理</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
|
||||
<link rel="stylesheet" href="../public/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="../public/css/font-awesome.min.css">
|
||||
<link rel="stylesheet" href="../public/plugins/bootstrap-table/bootstrap-table.min.css">
|
||||
<link rel="stylesheet" href="../public/plugins/ztree/css/metroStyle/metroStyle.css">
|
||||
<link rel="stylesheet" href="../public/css/main.css">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<div id="dtapp" v-cloak>
|
||||
|
||||
<div v-show="showList">
|
||||
<div id="toolbar">
|
||||
<button v-if="hasPermission('sys:menu:save')" class="btn btn-success " type="button" @click="add">
|
||||
<i class="fa fa-plus"></i> <span class="bold">新增</span>
|
||||
</button>
|
||||
<button v-if="hasPermission('sys:menu:update')" class="btn btn-success " type="button" @click="update">
|
||||
<i class="fa fa-pencil-square-o"></i> <span class="bold">修改</span>
|
||||
</button>
|
||||
<button v-if="hasPermission('sys:menu:delete')" class="btn btn-danger " type="button" @click="del">
|
||||
<i class="fa fa-remove"></i> <span class="bold">删除</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<table id="table"></table>
|
||||
</div>
|
||||
|
||||
<div v-show="!showList" class="panel panel-default">
|
||||
<div class="panel-heading">{{title}}</div>
|
||||
<form class="form-horizontal">
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">过滤器列表</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="filter.filters" placeholder="过滤器列表"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">启用状态</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="radio" value="1" v-model="filter.filterState">启用
|
||||
<input type="radio" value="0" v-model="filter.filterState">停用
|
||||
</div>
|
||||
</div>
|
||||
<!-- <div class="form-group">-->
|
||||
<!-- <div class="col-sm-2 control-label">启用状态</div>-->
|
||||
<!-- <label class="radio-inline">-->
|
||||
<!-- <input type="radio" value="0" name="filterState" class="form-control radiosize" v-model="filter.filterState" />停用-->
|
||||
<!-- </label>-->
|
||||
<!-- <label class="radio-inline">-->
|
||||
<!-- <input type="radio" value="1" name="filterState" class="form-control radiosize" v-model="filter.filterState" />启用-->
|
||||
<!-- </label>-->
|
||||
|
||||
<!-- </div>-->
|
||||
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label"></div>
|
||||
<input type="button" class="btn btn-primary" @click="saveOrUpdate" value="确定"/>
|
||||
<input type="button" class="btn btn-warning" @click="reload" value="返回"/>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- 选择菜单 -->
|
||||
<div id="menuLayer" style="display: none;padding:10px;">
|
||||
<ul id="menuTree" class="ztree"></ul>
|
||||
</div>
|
||||
|
||||
<script src="../public/libs/jquery.min.js"></script>
|
||||
<script src="../public/plugins/layer/layer.js"></script>
|
||||
<script src="../public/libs/bootstrap.min.js"></script>
|
||||
<script src="../public/libs/vue.min.js"></script>
|
||||
<script src="../public/plugins/bootstrap-table/bootstrap-table.min.js"></script>
|
||||
<script src="../public/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
|
||||
<script src="../public/plugins/ztree/jquery.ztree.all.min.js"></script>
|
||||
<script src="../public/js/common.js"></script>
|
||||
<script src="../public/js/filter/apigatewayfilter.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,86 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>过滤策略管理</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
|
||||
<link rel="stylesheet" href="../public/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="../public/css/font-awesome.min.css">
|
||||
<link rel="stylesheet" href="../public/plugins/bootstrap-table/bootstrap-table.min.css">
|
||||
<link rel="stylesheet" href="../public/plugins/ztree/css/metroStyle/metroStyle.css">
|
||||
<link rel="stylesheet" href="../public/css/main.css">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<div id="dtapp" v-cloak>
|
||||
|
||||
<div v-show="showList">
|
||||
<div id="toolbar">
|
||||
<button v-if="hasPermission('sys:menu:save')" class="btn btn-success " type="button" @click="add">
|
||||
<i class="fa fa-plus"></i> <span class="bold">新增</span>
|
||||
</button>
|
||||
<button v-if="hasPermission('sys:menu:update')" class="btn btn-success " type="button" @click="update">
|
||||
<i class="fa fa-pencil-square-o"></i> <span class="bold">修改</span>
|
||||
</button>
|
||||
<button v-if="hasPermission('sys:menu:delete')" class="btn btn-danger " type="button" @click="del">
|
||||
<i class="fa fa-remove"></i> <span class="bold">删除</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<table id="table"></table>
|
||||
</div>
|
||||
|
||||
<div v-show="!showList" class="panel panel-default">
|
||||
<div class="panel-heading">{{title}}</div>
|
||||
<form class="form-horizontal">
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">过滤器列表</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="filter.filters" placeholder="过滤器列表"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">启用状态</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="radio" value="1" v-model="filter.filterState">启用
|
||||
<input type="radio" value="0" v-model="filter.filterState">停用
|
||||
</div>
|
||||
</div>
|
||||
<!-- <div class="form-group">-->
|
||||
<!-- <div class="col-sm-2 control-label">启用状态</div>-->
|
||||
<!-- <label class="radio-inline">-->
|
||||
<!-- <input type="radio" value="0" name="filterState" class="form-control radiosize" v-model="filter.filterState" />停用-->
|
||||
<!-- </label>-->
|
||||
<!-- <label class="radio-inline">-->
|
||||
<!-- <input type="radio" value="1" name="filterState" class="form-control radiosize" v-model="filter.filterState" />启用-->
|
||||
<!-- </label>-->
|
||||
|
||||
<!-- </div>-->
|
||||
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label"></div>
|
||||
<input type="button" class="btn btn-primary" @click="saveOrUpdate" value="确定"/>
|
||||
<input type="button" class="btn btn-warning" @click="reload" value="返回"/>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- 选择菜单 -->
|
||||
<div id="menuLayer" style="display: none;padding:10px;">
|
||||
<ul id="menuTree" class="ztree"></ul>
|
||||
</div>
|
||||
|
||||
<script src="../public/libs/jquery.min.js"></script>
|
||||
<script src="../public/plugins/layer/layer.js"></script>
|
||||
<script src="../public/libs/bootstrap.min.js"></script>
|
||||
<script src="../public/libs/vue.min.js"></script>
|
||||
<script src="../public/plugins/bootstrap-table/bootstrap-table.min.js"></script>
|
||||
<script src="../public/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
|
||||
<script src="../public/plugins/ztree/jquery.ztree.all.min.js"></script>
|
||||
<script src="../public/js/common.js"></script>
|
||||
<script src="../public/js/filter/stragetyfilter.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,170 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<title>烽火云短信平台</title>
|
||||
<!-- Tell the browser to be responsive to screen width -->
|
||||
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
|
||||
<link rel="stylesheet" href="public/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="public/css/font-awesome.min.css">
|
||||
<link rel="stylesheet" href="public/css/AdminLTE.min.css">
|
||||
<!-- AdminLTE Skins. Choose a skin from the css/skins
|
||||
folder instead of downloading all of them to reduce the load. -->
|
||||
<link rel="stylesheet" href="public/css/all-skins.min.css">
|
||||
<link rel="stylesheet" href="public/css/main.css">
|
||||
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
||||
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
|
||||
<!--[if lt IE 9]>
|
||||
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
|
||||
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
|
||||
<![endif]-->
|
||||
</head>
|
||||
<!-- ADD THE CLASS layout-boxed TO GET A BOXED LAYOUT -->
|
||||
<body class="hold-transition skin-blue sidebar-mini">
|
||||
<!-- Site wrapper -->
|
||||
<div class="wrapper" id="dtapp" v-cloak>
|
||||
<header class="main-header">
|
||||
<a href="javascript:void(0);" class="logo">
|
||||
<!-- mini logo for sidebar mini 50x50 pixels -->
|
||||
<span class="logo-mini"><b>烽火云短信平台</b></span>
|
||||
<!-- logo for regular state and mobile devices -->
|
||||
<span class="logo-lg"><b>烽火云短信平台</b></span>
|
||||
</a>
|
||||
<!-- Header Navbar: style can be found in header.less -->
|
||||
<nav class="navbar navbar-static-top" role="navigation">
|
||||
<!-- Sidebar toggle button-->
|
||||
<a href="#" class="sidebar-toggle" data-toggle="offcanvas" role="button">
|
||||
<span class="sr-only">Toggle navigation</span>
|
||||
</a>
|
||||
<div style="float:left;color:#fff;padding:15px 10px;">欢迎 {{user.nickname}}</div>
|
||||
<div class="navbar-custom-menu">
|
||||
<ul class="nav navbar-nav">
|
||||
<li><a href="javascript:;" @click="updatePassword"><i class="fa fa-lock"></i> 修改密码</a></li>
|
||||
<li><a href="logout"><i class="fa fa-sign-out"></i> 退出系统</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<!-- =============================================== -->
|
||||
|
||||
<!-- Left side column. contains the sidebar -->
|
||||
<aside class="main-sidebar">
|
||||
<!-- sidebar: style can be found in sidebar.less -->
|
||||
<section class="sidebar">
|
||||
<!-- /.search form -->
|
||||
<!-- sidebar menu: : style can be found in sidebar.less -->
|
||||
<ul class="sidebar-menu">
|
||||
<li class="header">导航菜单</li>
|
||||
<!-- vue生成的菜单 -->
|
||||
<menu-item :item="item" v-for="item in menuList"></menu-item>
|
||||
<!--<li class="treeview">
|
||||
<a href="#">
|
||||
<i class="fa fa-clock-o"></i>
|
||||
<span>定时任务</span>
|
||||
<span class="pull-right-container">
|
||||
<i class="fa fa-angle-left pull-right"></i>
|
||||
</span>
|
||||
</a>
|
||||
<ul class="treeview-menu">
|
||||
<li><a href="#sys/job.html"><i class="fa fa-circle-o"></i> 任务管理</a></li>
|
||||
<li><a href="#sys/schedule_log.html"><i class="fa fa-circle-o"></i> 任务日志</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="treeview">
|
||||
<a href="#">
|
||||
<i class="fa fa-binoculars"></i>
|
||||
<span>系统监控</span>
|
||||
<span class="pull-right-container">
|
||||
<i class="fa fa-angle-left pull-right"></i>
|
||||
</span>
|
||||
</a>
|
||||
<ul class="treeview-menu">
|
||||
<li><a href="#druid/sql.html"><i class="fa fa-circle-o"></i> SQL监控</a></li>
|
||||
<li><a href="#sys/log.html"><i class="fa fa-circle-o"></i> 系统日志</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
<i class="fa fa-cog"></i>
|
||||
<span>系统管理</span>
|
||||
<span class="pull-right-container">
|
||||
<i class="fa fa-angle-left pull-right"></i>
|
||||
</span>
|
||||
</a>
|
||||
<ul class="treeview-menu">
|
||||
<li><a href="#sys/user.html"><i class="fa fa-circle-o"></i> 用户管理</a></li>
|
||||
<li><a href="#sys/role1.html"><i class="fa fa-circle-o"></i> 角色管理</a></li>
|
||||
<li><a href="#sys/menu.html"><i class="fa fa-circle-o"></i> 菜单管理</a></li>
|
||||
<li><a href="#sys/config.html"><i class="fa fa-circle-o"></i> 参数管理</a></li>
|
||||
</ul>
|
||||
</li>-->
|
||||
|
||||
</ul>
|
||||
</section>
|
||||
<!-- /.sidebar -->
|
||||
</aside>
|
||||
<!-- =============================================== -->
|
||||
<!-- Content Wrapper. Contains page content -->
|
||||
<div class="content-wrapper">
|
||||
<!-- Content Header (Page header) -->
|
||||
<section class="content-header">
|
||||
<ol class="breadcrumb" id="nav_title" style="position:static;float:none;">
|
||||
<li class="active"><i class="fa fa-home"
|
||||
style="font-size:20px;position:relative;top:2px;left:-3px;"></i> 首页
|
||||
</li>
|
||||
<li class="active">{{navTitle}}</li>
|
||||
</ol>
|
||||
</section>
|
||||
|
||||
<!-- Main content -->
|
||||
<section class="content" style="background:#fff;">
|
||||
<iframe scrolling="yes" frameborder="0"
|
||||
style="width:100%;min-height:200px;overflow:visible;background:#fff;" :src="main"></iframe>
|
||||
</section>
|
||||
<!-- /.content -->
|
||||
</div>
|
||||
<!-- /.content-wrapper -->
|
||||
|
||||
<!-- Add the sidebar's background. This div must be placed
|
||||
immediately after the control sidebar -->
|
||||
<div class="control-sidebar-bg"></div>
|
||||
|
||||
<!-- 修改密码 -->
|
||||
<div id="passwordLayer" style="display: none;">
|
||||
<form class="form-horizontal">
|
||||
<div class="form-group">
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">账号</div>
|
||||
<span class="label label-success" style="vertical-align: bottom;">{{user.username}}</span>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">原密码</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="password" class="form-control" v-model="password" placeholder="原密码"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">新密码</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="newPassword" placeholder="新密码"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<!-- ./wrapper -->
|
||||
|
||||
|
||||
<script src="public/libs/jquery.min.js"></script>
|
||||
<script src="public/libs/vue.min.js"></script>
|
||||
<script src="public/libs/router.js"></script>
|
||||
<script src="public/libs/bootstrap.min.js"></script>
|
||||
<script src="public/libs/app.js"></script>
|
||||
<script src="public/plugins/layer/layer.js"></script>
|
||||
<script src="public/js/index.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,200 @@
|
||||
{
|
||||
"menuList": [
|
||||
{
|
||||
"menuId": 1,
|
||||
"parentId": 0,
|
||||
"parentName": null,
|
||||
"name": "系统管理",
|
||||
"url": null,
|
||||
"perms": null,
|
||||
"type": 0,
|
||||
"icon": "fa fa-cog",
|
||||
"orderNum": 0,
|
||||
"open": null,
|
||||
"list": [
|
||||
{
|
||||
"menuId": 2,
|
||||
"parentId": 1,
|
||||
"parentName": null,
|
||||
"name": "用户管理",
|
||||
"url": "sys/user.html",
|
||||
"perms": null,
|
||||
"type": 1,
|
||||
"icon": "fa fa-user",
|
||||
"orderNum": 1,
|
||||
"open": null,
|
||||
"list": null
|
||||
},
|
||||
{
|
||||
"menuId": 3,
|
||||
"parentId": 1,
|
||||
"parentName": null,
|
||||
"name": "角色管理",
|
||||
"url": "sys/role.html",
|
||||
"perms": null,
|
||||
"type": 1,
|
||||
"icon": "fa fa-user-secret",
|
||||
"orderNum": 2,
|
||||
"open": null,
|
||||
"list": null
|
||||
},
|
||||
{
|
||||
"menuId": 4,
|
||||
"parentId": 1,
|
||||
"parentName": null,
|
||||
"name": "菜单管理",
|
||||
"url": "sys/menu.html",
|
||||
"perms": null,
|
||||
"type": 1,
|
||||
"icon": "fa fa-th-list",
|
||||
"orderNum": 3,
|
||||
"open": null,
|
||||
"list": null
|
||||
},
|
||||
{
|
||||
"menuId": 5,
|
||||
"parentId": 1,
|
||||
"parentName": null,
|
||||
"name": "SQL监控",
|
||||
"url": "druid/sql.html",
|
||||
"perms": null,
|
||||
"type": 1,
|
||||
"icon": "fa fa-bug",
|
||||
"orderNum": 4,
|
||||
"open": null,
|
||||
"list": null
|
||||
},
|
||||
{
|
||||
"menuId": 6,
|
||||
"parentId": 1,
|
||||
"parentName": null,
|
||||
"name": "定时任务管理",
|
||||
"url": "sys/schedule.html",
|
||||
"perms": null,
|
||||
"type": 1,
|
||||
"icon": "fa fa-tasks",
|
||||
"orderNum": 5,
|
||||
"open": null,
|
||||
"list": null
|
||||
},
|
||||
{
|
||||
"menuId": 27,
|
||||
"parentId": 1,
|
||||
"parentName": null,
|
||||
"name": "参数管理",
|
||||
"url": "sys/config.html",
|
||||
"perms": "sys:config:list,sys:config:info,sys:config:save,sys:config:update,sys:config:delete",
|
||||
"type": 1,
|
||||
"icon": "fa fa-sun-o",
|
||||
"orderNum": 6,
|
||||
"open": null,
|
||||
"list": null
|
||||
},
|
||||
{
|
||||
"menuId": 29,
|
||||
"parentId": 1,
|
||||
"parentName": null,
|
||||
"name": "系统日志",
|
||||
"url": "sys/log.html",
|
||||
"perms": "sys:log:list",
|
||||
"type": 1,
|
||||
"icon": "fa fa-file-text-o",
|
||||
"orderNum": 7,
|
||||
"open": null,
|
||||
"list": null
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"menuId": 1,
|
||||
"parentId": 0,
|
||||
"parentName": null,
|
||||
"name": "伴我汽车管理",
|
||||
"url": null,
|
||||
"perms": null,
|
||||
"type": 0,
|
||||
"icon": "fa fa-cog",
|
||||
"orderNum": 0,
|
||||
"open": null,
|
||||
"list": [
|
||||
{
|
||||
"menuId": 2,
|
||||
"parentId": 1,
|
||||
"parentName": null,
|
||||
"name": "咨询管理",
|
||||
"url": "article/article.html",
|
||||
"perms": null,
|
||||
"type": 1,
|
||||
"icon": "fa fa-user",
|
||||
"orderNum": 1,
|
||||
"open": null,
|
||||
"list": null
|
||||
},
|
||||
{
|
||||
"menuId": 3,
|
||||
"parentId": 1,
|
||||
"parentName": null,
|
||||
"name": "标签管理",
|
||||
"url": "tag/tag.html",
|
||||
"perms": null,
|
||||
"type": 1,
|
||||
"icon": "fa fa-user-secret",
|
||||
"orderNum": 2,
|
||||
"open": null,
|
||||
"list": null
|
||||
},
|
||||
{
|
||||
"menuId": 3,
|
||||
"parentId": 1,
|
||||
"parentName": null,
|
||||
"name": "车型库管理",
|
||||
"url": "car/car.html",
|
||||
"perms": null,
|
||||
"type": 1,
|
||||
"icon": "fa fa-user-secret",
|
||||
"orderNum": 2,
|
||||
"open": null,
|
||||
"list": null
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"code": 0,
|
||||
"permissions": [
|
||||
"sys:schedule:info",
|
||||
"sys:menu:update",
|
||||
"sys:menu:delete",
|
||||
"sys:config:info",
|
||||
"sys:generator:list",
|
||||
"sys:menu:list",
|
||||
"sys:config:save",
|
||||
"sys:menu:perms",
|
||||
"sys:config:update",
|
||||
"sys:schedule:resume",
|
||||
"sys:user:delete",
|
||||
"sys:config:list",
|
||||
"sys:user:update",
|
||||
"sys:role:list",
|
||||
"sys:menu:info",
|
||||
"sys:menu:select",
|
||||
"sys:schedule:update",
|
||||
"sys:schedule:save",
|
||||
"sys:role:select",
|
||||
"sys:user:list",
|
||||
"sys:menu:save",
|
||||
"sys:role:save",
|
||||
"sys:schedule:log",
|
||||
"sys:role:info",
|
||||
"sys:schedule:delete",
|
||||
"sys:role:update",
|
||||
"sys:schedule:list",
|
||||
"sys:user:info",
|
||||
"sys:generator:code",
|
||||
"sys:schedule:run",
|
||||
"sys:config:delete",
|
||||
"sys:role:delete",
|
||||
"sys:user:save",
|
||||
"sys:schedule:pause",
|
||||
"sys:log:list"
|
||||
]
|
||||
}
|
After Width: | Height: | Size: 63 KiB |
After Width: | Height: | Size: 108 KiB |
After Width: | Height: | Size: 108 KiB |
@ -0,0 +1,14 @@
|
||||
{
|
||||
"code": 0,
|
||||
"user": {
|
||||
"userId": 1,
|
||||
"username": "admin",
|
||||
"password": "8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918",
|
||||
"email": "100@qq.com",
|
||||
"mobile": "13666666666",
|
||||
"status": 1,
|
||||
"roleIdList": null,
|
||||
"createUserId": null,
|
||||
"createTime": "2017-06-01 15:33:20"
|
||||
}
|
||||
}
|
@ -0,0 +1,94 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>过滤策略管理</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
|
||||
<link rel="stylesheet" href="../public/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="../public/css/font-awesome.min.css">
|
||||
<link rel="stylesheet" href="../public/plugins/bootstrap-table/bootstrap-table.min.css">
|
||||
<link rel="stylesheet" href="../public/plugins/ztree/css/metroStyle/metroStyle.css">
|
||||
<link rel="stylesheet" href="../public/css/main.css">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<div id="dtapp" v-cloak>
|
||||
|
||||
<div v-show="showList">
|
||||
<div id="toolbar">
|
||||
<button v-if="hasPermission('sys:menu:save')" class="btn btn-success " type="button" @click="add">
|
||||
<i class="fa fa-plus"></i> <span class="bold">新增</span>
|
||||
</button>
|
||||
<button v-if="hasPermission('sys:menu:update')" class="btn btn-success " type="button" @click="update">
|
||||
<i class="fa fa-pencil-square-o"></i> <span class="bold">修改</span>
|
||||
</button>
|
||||
<button v-if="hasPermission('sys:menu:delete')" class="btn btn-danger " type="button" @click="del">
|
||||
<i class="fa fa-remove"></i> <span class="bold">删除</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<table id="table"></table>
|
||||
</div>
|
||||
|
||||
<div v-show="!showList" class="panel panel-default">
|
||||
<div class="panel-heading">{{title}}</div>
|
||||
<form class="form-horizontal">
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">限流时间范围(秒)</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="limit.limitTime" placeholder="限流时间范围(秒)"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">限制次数</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="limit.limitCount" placeholder="限制次数"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">描述</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="limit.despcription" placeholder="描述"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">启用状态</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="radio" value="1" v-model="limit.limitState">启用
|
||||
<input type="radio" value="0" v-model="limit.limitState">停用
|
||||
</div>
|
||||
</div>
|
||||
<!-- <div class="form-group">-->
|
||||
<!-- <div class="col-sm-2 control-label">状态</div>-->
|
||||
<!-- <div class="col-sm-10">-->
|
||||
<!-- <input type="text" class="form-control" v-model="limit.limitState" placeholder="0停用1启用"/>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label"></div>
|
||||
<input type="button" class="btn btn-primary" @click="saveOrUpdate" value="确定"/>
|
||||
<input type="button" class="btn btn-warning" @click="reload" value="返回"/>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- 选择菜单 -->
|
||||
<div id="menuLayer" style="display: none;padding:10px;">
|
||||
<ul id="menuTree" class="ztree"></ul>
|
||||
</div>
|
||||
|
||||
<script src="../public/libs/jquery.min.js"></script>
|
||||
<script src="../public/plugins/layer/layer.js"></script>
|
||||
<script src="../public/libs/bootstrap.min.js"></script>
|
||||
<script src="../public/libs/vue.min.js"></script>
|
||||
<script src="../public/plugins/bootstrap-table/bootstrap-table.min.js"></script>
|
||||
<script src="../public/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
|
||||
<script src="../public/plugins/ztree/jquery.ztree.all.min.js"></script>
|
||||
<script src="../public/js/common.js"></script>
|
||||
<script src="../public/js/limit/limit.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,120 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<title>烽火云短信平台</title>
|
||||
<!-- Tell the browser to be responsive to screen width -->
|
||||
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
|
||||
<link rel="stylesheet" href="public/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="public/css/font-awesome.min.css">
|
||||
<link rel="stylesheet" href="public/css/AdminLTE.min.css">
|
||||
<!-- AdminLTE Skins. Choose a skin from the css/skins
|
||||
folder instead of downloading all of them to reduce the load. -->
|
||||
<link rel="stylesheet" href="public/css/all-skins.min.css">
|
||||
<link rel="stylesheet" href="public/css/main.css">
|
||||
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
||||
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
|
||||
<!--[if lt IE 9]>
|
||||
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
|
||||
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
|
||||
<![endif]-->
|
||||
</head>
|
||||
<body class="hold-transition login-page">
|
||||
<div class="login-box" id="rrapp" v-cloak>
|
||||
<div class="login-logo">
|
||||
<b>烽火云短信平台</b>
|
||||
</div>
|
||||
<!-- /.login-logo -->
|
||||
<div class="login-box-body">
|
||||
<p class="login-box-msg">用户登录</p>
|
||||
<div v-if="error" class="alert alert-danger alert-dismissible">
|
||||
<h4 style="margin-bottom: 0px;"><i class="fa fa-exclamation-triangle"></i> {{errorMsg}}</h4>
|
||||
</div>
|
||||
<div class="form-group has-feedback">
|
||||
<input type="text" class="form-control" v-model="user.username" placeholder="账号">
|
||||
<span class="glyphicon glyphicon-user form-control-feedback"></span>
|
||||
</div>
|
||||
<div class="form-group has-feedback">
|
||||
<input type="text" class="form-control" v-model="user.password" placeholder="密码">
|
||||
<span class="glyphicon glyphicon-lock form-control-feedback"></span>
|
||||
</div>
|
||||
<div class="form-group has-feedback">
|
||||
<input type="text" class="form-control" v-model="user.captcha" @keyup.enter="login" placeholder="验证码">
|
||||
<span class="glyphicon glyphicon-warning-sign form-control-feedback"></span>
|
||||
</div>
|
||||
<div class="form-group has-feedback">
|
||||
<img alt="如果看不清楚,请单击图片刷新!" class="pointer" :src="src" @click="refreshCode">
|
||||
<a href="javascript:;" @click="refreshCode">点击刷新</a>
|
||||
</div>
|
||||
<div class="checkbox text-left">
|
||||
<label><input type="checkbox" v-model="user.rememberMe" value="true">记住我</label>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-8">
|
||||
<div class="checkbox icheck">
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
<div class="col-xs-4">
|
||||
<button type="button" class="btn btn-primary btn-block btn-flat" @click="login">登录</button>
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
</div>
|
||||
<!-- /.social-auth-links -->
|
||||
|
||||
</div>
|
||||
<!-- /.login-box-body -->
|
||||
</div>
|
||||
<!-- /.login-box -->
|
||||
<script src="public/libs/jquery.min.js"></script>
|
||||
<script src="public/libs/vue.min.js"></script>
|
||||
<script src="public/libs/bootstrap.min.js"></script>
|
||||
<script src="public/libs/jquery.slimscroll.min.js"></script>
|
||||
<script src="public/libs/fastclick.min.js"></script>
|
||||
<script src="public/libs/app.js"></script>
|
||||
<script type="text/javascript">
|
||||
var vm = new Vue({
|
||||
el: '#rrapp',
|
||||
data: {
|
||||
user: {},
|
||||
error: false,
|
||||
errorMsg: '',
|
||||
src: 'captcha.jpg'
|
||||
},
|
||||
beforeCreate: function () {
|
||||
if (self != top) {
|
||||
top.location.href = self.location.href;
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
refreshCode: function () {
|
||||
this.src = "captcha.jpg?t=" + $.now();
|
||||
},
|
||||
login: function (event) {
|
||||
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "sys/login",
|
||||
data: JSON.stringify(vm.user),
|
||||
dataType: "json",
|
||||
contentType: "application/json",
|
||||
cache: false,
|
||||
success: function (result) {
|
||||
if (result.code == 0) {//登录成功
|
||||
parent.location.href = 'index.html';
|
||||
} else {
|
||||
vm.error = true;
|
||||
vm.errorMsg = result.msg;
|
||||
|
||||
vm.refreshCode();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,85 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>号段管理</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
|
||||
<link rel="stylesheet" href="../public/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="../public/css/font-awesome.min.css">
|
||||
<link rel="stylesheet" href="../public/plugins/bootstrap-table/bootstrap-table.min.css">
|
||||
<link rel="stylesheet" href="../public/plugins/ztree/css/metroStyle/metroStyle.css">
|
||||
<link rel="stylesheet" href="../public/css/main.css">
|
||||
<link rel="stylesheet" href="../public/css/index.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="dtapp" v-cloak>
|
||||
|
||||
<div v-show="showList">
|
||||
<div id="toolbar">
|
||||
<button class="btn btn-success " type="button" @click="add">
|
||||
<i class="fa fa-plus"></i> <span class="bold">新增</span>
|
||||
</button>
|
||||
<button class="btn btn-success " type="button" @click="update">
|
||||
<i class="fa fa-pencil-square-o"></i> <span class="bold">修改</span>
|
||||
</button>
|
||||
<button class="btn btn-danger " type="button" @click="del">
|
||||
<i class="fa fa-remove"></i> <span class="bold">删除</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<table id="table"></table>
|
||||
</div>
|
||||
|
||||
<div v-show="!showList" class="panel panel-default">
|
||||
<div class="panel-heading">{{title}}</div>
|
||||
<form class="form-horizontal">
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">号段</div>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" v-model="phase.phase" placeholder="号段"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">省标识</div>
|
||||
<div class="col-sm-10">
|
||||
<select @change="getCitys($event)" v-model="phase.provId" name="sites" id="sites">
|
||||
<option v-for="item in sites" :value="item.id" >{{ item.areaname }}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label">城市标识</div>
|
||||
<div class="col-sm-10">
|
||||
<select v-model="phase.cityId" name="citys" id="citys">
|
||||
<option v-for="item in citys" :value="item.id" >{{ item.areaname }}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-2 control-label"></div>
|
||||
<input type="button" class="btn btn-primary" @click="saveOrUpdate" value="确定"/>
|
||||
<input type="button" class="btn btn-warning" @click="reload" value="返回"/>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script src="../public/libs/jquery.min.js"></script>
|
||||
<script src="../public/plugins/layer/layer.js"></script>
|
||||
<script src="../public/libs/bootstrap.min.js"></script>
|
||||
<script src="../public/libs/vue.js"></script>
|
||||
<script src="../public/libs/myindex.js"></script>
|
||||
<script src="../public/plugins/bootstrap-table/bootstrap-table.min.js"></script>
|
||||
<script src="../public/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
|
||||
<script src="../public/plugins/ztree/jquery.ztree.all.min.js"></script>
|
||||
<script src="../public/plugins/ueditor/ueditor.config.js"></script>
|
||||
<script src="../public/plugins/ueditor/ueditor.all.js"></script>
|
||||
<script src="../public/plugins/ueditor/ueditor.parse.min.js"></script>
|
||||
<script src="../public/plugins/ueditor/lang/zh-cn/zh-cn.js"></script>
|
||||
<script src="../public/js/common.js"></script>
|
||||
<script src="../public/js/phase/phase.js"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,438 @@
|
||||
@charset "utf-8";
|
||||
/*
|
||||
* Copyright https://github.com/larryqin/larrycms
|
||||
*/
|
||||
/* 头部 */
|
||||
.header {
|
||||
height: 65px;
|
||||
border-bottom: 1px solid #404553;
|
||||
background-color: #393D49;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.logo {
|
||||
display: block;
|
||||
position: absolute;
|
||||
left: 10px;
|
||||
top: 10px;
|
||||
}
|
||||
|
||||
.logo img {
|
||||
width: 150px;
|
||||
height: 35px;
|
||||
}
|
||||
|
||||
.header .layui-nav {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
padding: 0;
|
||||
background: none;
|
||||
}
|
||||
|
||||
.header .layui-nav .layui-nav-item {
|
||||
margin: 0 20px;
|
||||
line-height: 66px;
|
||||
}
|
||||
|
||||
.body {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.layui-layout-admin .header-demo {
|
||||
border-bottom-color: #1AA094;
|
||||
}
|
||||
|
||||
.header-demo .logo {
|
||||
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||
left: 10px;
|
||||
top: 8px;
|
||||
font-size: 24px;
|
||||
font-weight: bold;
|
||||
color: #fff;
|
||||
height: 50px;
|
||||
line-height: 50px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.header-demo .layui-nav {
|
||||
top: 0;
|
||||
}
|
||||
|
||||
.header-demo .layui-nav .layui-nav-item {
|
||||
margin: 0 10px;
|
||||
line-height: 70px;
|
||||
}
|
||||
|
||||
.header-demo .layui-nav .layui-nav-item a {
|
||||
color: #999;
|
||||
padding-left: 15px;
|
||||
padding-right: 15px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.header-demo .layui-nav .layui-nav-item:hover {
|
||||
border-bottom-color: #000;
|
||||
}
|
||||
|
||||
.header-demo .layui-nav .layui-this {
|
||||
background-color: #000; /* #5FB878 */
|
||||
}
|
||||
|
||||
.header-demo .layui-nav .layui-nav-item a:hover,
|
||||
.header-demo .layui-nav .layui-this a {
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.header-demo .layui-nav .layui-nav-item span.layui-nav-more {
|
||||
top: 32px;
|
||||
}
|
||||
|
||||
.header-demo .layui-nav .layui-nav-item span.layui-nav-mored {
|
||||
top: 26px;
|
||||
}
|
||||
|
||||
.header-demo .layui-nav .layui-this:after,
|
||||
.header-demo .layui-nav-bar {
|
||||
background-color: #393D49;
|
||||
}
|
||||
|
||||
.header-demo .layui-nav .layui-this a {
|
||||
padding: 0 15px;
|
||||
}
|
||||
|
||||
.header {
|
||||
background: #393D49;
|
||||
}
|
||||
|
||||
.admin-logo-box {
|
||||
width: 185px;
|
||||
height: 70px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.larry-side-menu {
|
||||
position: absolute;
|
||||
cursor: pointer;
|
||||
z-index: 19940201;
|
||||
left: 200px;
|
||||
color: white;
|
||||
text-align: center;
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
background-color: #1AA094;
|
||||
line-height: 30px;
|
||||
top: 23%;
|
||||
}
|
||||
|
||||
.larry-side-menu:hover {
|
||||
background-color: #5FB878;
|
||||
}
|
||||
|
||||
/* 头部左侧 */
|
||||
.layui-larry-menu {
|
||||
width: auto;
|
||||
height: 70px;
|
||||
position: absolute;
|
||||
left: 245px;
|
||||
top: 0px;
|
||||
}
|
||||
|
||||
.layui-larry-menu ul.layui-nav {
|
||||
height: 70px;
|
||||
position: static;
|
||||
}
|
||||
|
||||
.layui-larry-menu ul.layui-nav li.layui-nav-item {
|
||||
margin: 0px;
|
||||
}
|
||||
|
||||
.layui-larry-menu ul.layui-nav li.layui-nav-item a {
|
||||
color: #F5F5F5;
|
||||
font-size: 14px;
|
||||
line-height: 60px;
|
||||
padding-left: 10px;
|
||||
padding-right: 10px;
|
||||
}
|
||||
|
||||
.layui-larry-menu ul.layui-nav li.layui-nav-item a i {
|
||||
padding-right: 5px;
|
||||
line-height: 70px;
|
||||
}
|
||||
|
||||
.layui-larry-menu ul.layui-nav .layui-this {
|
||||
background: #2B2E37;
|
||||
|
||||
}
|
||||
|
||||
.layui-larry-menu ul.layui-nav .layui-this::after {
|
||||
/* background: #2B2E37; */
|
||||
background: #1AA094;
|
||||
}
|
||||
|
||||
/* 头部右侧 */
|
||||
.header ul.larry-header-item {
|
||||
height: 70px;
|
||||
}
|
||||
|
||||
.header ul.larry-header-item li.layui-nav-item {
|
||||
margin-left: 0px;
|
||||
margin-right: 0px;
|
||||
}
|
||||
|
||||
.header ul.larry-header-item .userimg {
|
||||
width: 40px;
|
||||
border-radius: 50%;
|
||||
-webkit-border-radius: 50%;
|
||||
-moz-border-radius: 50%;
|
||||
border: 4px solid #44576b;
|
||||
margin-top: -6px;
|
||||
}
|
||||
|
||||
.header ul.larry-header-item .layui-this {
|
||||
background: #393D49;
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.header ul.larry-header-item .layui-this::after {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
/* ======================= */
|
||||
/* 左侧区域 */
|
||||
.layui-side-bg {
|
||||
background: #393D49;
|
||||
}
|
||||
|
||||
.layui-larry-side {
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
.layui-larry-side .user-photo {
|
||||
width: 200px;
|
||||
height: 120px;
|
||||
padding-top: 15px;
|
||||
padding-bottom: 5px;
|
||||
}
|
||||
|
||||
.layui-larry-side .user-photo a.img {
|
||||
display: block;
|
||||
width: 76px;
|
||||
height: 76px;
|
||||
margin: 0 auto;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.layui-larry-side .user-photo a.img img {
|
||||
display: block;
|
||||
border: none;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border-radius: 50%;
|
||||
-webkit-border-radius: 50%;
|
||||
-moz-border-radius: 50%;
|
||||
border: 4px solid #44576b;
|
||||
}
|
||||
|
||||
.layui-larry-side .user-photo p {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 25px;
|
||||
color: #ffffff;
|
||||
text-align: center;
|
||||
font-size: 12px;
|
||||
white-space: nowrap;
|
||||
line-height: 25px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.layui-nav-tree li.layui-nav-item a {
|
||||
padding-right: 10px;
|
||||
}
|
||||
|
||||
.layui-nav-tree li.layui-nav-item a i {
|
||||
padding-right: 3px;
|
||||
}
|
||||
|
||||
.layui-nav-tree li.layui-nav-item .layui-nav-child dd a {
|
||||
padding-left: 40px !important;
|
||||
padding-right: 0px;
|
||||
}
|
||||
|
||||
.layui-nav-tree li.layui-nav-item .layui-nav-child dd a i {
|
||||
padding-right: 3px;
|
||||
}
|
||||
|
||||
/* 右侧主体区域 */
|
||||
.layui-body {
|
||||
bottom: 0;
|
||||
border-left: solid 2px #1AA094;
|
||||
}
|
||||
|
||||
.layui-tab-content {
|
||||
min-height: 150px;
|
||||
/* padding: 5px 0 0 0; */
|
||||
}
|
||||
|
||||
/* tab选项卡 */
|
||||
.layui-body {
|
||||
padding-left: 0px;
|
||||
}
|
||||
|
||||
.layui-layout-admin .layui-body {
|
||||
top: 58px;
|
||||
}
|
||||
|
||||
.larry-tab-menu {
|
||||
width: 200px;
|
||||
height: 40px;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.larry-tab-box .layui-tab-title li em {
|
||||
padding-left: 5px;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
#admin-home i.layui-icon {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.larry-tab-box {
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
/* layui-tab-title start */
|
||||
.layui-tab-title .larry-tab-menu {
|
||||
display: inline-block;
|
||||
float: right;
|
||||
border: 1px solid red;
|
||||
position: relative;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.larry-test {
|
||||
|
||||
height: 40px;
|
||||
color: #000;
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
font-size: 16px;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.refresh_iframe {
|
||||
display: none;
|
||||
position: absolute;
|
||||
top: 10px;
|
||||
right: 1px;
|
||||
height: 41px;
|
||||
background: #33AB9F;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
/* layui-tab-title end */
|
||||
.layui-tab-content {
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
}
|
||||
|
||||
.layui-tab-item {
|
||||
padding: 10px 0 0 10px;
|
||||
margin: 0px;
|
||||
|
||||
}
|
||||
|
||||
.layui-tab-content .layui-tab-item iframe {
|
||||
width: 100%;
|
||||
border: 0;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.larry-tab-box > .layui-tab-title {
|
||||
border-bottom: 1px solid #1AA094;
|
||||
}
|
||||
|
||||
.larry-tab-box .layui-tab-title cite {
|
||||
font-style: normal;
|
||||
padding-left: 5px;
|
||||
}
|
||||
|
||||
.larry-tab-box > .layui-tab-title .layui-this {
|
||||
color: white;
|
||||
background-color: #1AA094;
|
||||
}
|
||||
|
||||
.larry-tab-box > .layui-tab-title .layui-this:after {
|
||||
border-bottom: 0;
|
||||
}
|
||||
|
||||
#time {
|
||||
width: 100%;
|
||||
color: #fff;
|
||||
font-size: 60px;
|
||||
margin-bottom: 80px;
|
||||
display: inline-block;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.form-group {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.col-lg-12 {
|
||||
position: relative;
|
||||
min-height: 1px;
|
||||
padding-right: 15px;
|
||||
padding-left: 15px;
|
||||
}
|
||||
|
||||
::selection {
|
||||
background: #FF6C60;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.form-control {
|
||||
height: 30px;
|
||||
}
|
||||
|
||||
@media (min-width: 1200px) {
|
||||
.col-lg-12 {
|
||||
width: 100%;
|
||||
float: left;
|
||||
}
|
||||
}
|
||||
|
||||
body .layui-layout-admin .layui-larry-foot {
|
||||
height: 30px;
|
||||
padding-left: 10px;
|
||||
line-height: 30px;
|
||||
background-color: #eee;
|
||||
color: #666;
|
||||
font-weight: 300;
|
||||
border-left: 2px solid #1AA094;
|
||||
z-index: 998;
|
||||
}
|
||||
|
||||
body .layui-layout-admin .layui-larry-foot a {
|
||||
padding: 0 5px;
|
||||
|
||||
}
|
||||
|
||||
.layui-form-item .layui-input-inline {
|
||||
float: left;
|
||||
width: 350px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.laber-account {
|
||||
padding: 3px 6px;
|
||||
margin-top: 8px;
|
||||
width: auto;
|
||||
border-radius: 5px;
|
||||
text-align: left;
|
||||
background-color: #009688;
|
||||
color: #fff;
|
||||
}
|
||||
|
@ -0,0 +1,96 @@
|
||||
html {
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
.content-header {
|
||||
position: relative;
|
||||
padding: 0 0 3px 8px
|
||||
}
|
||||
|
||||
.content-header > .breadcrumb {
|
||||
position: relative;
|
||||
top: 0;
|
||||
right: 0;
|
||||
float: none;
|
||||
margin-top: 0px;
|
||||
padding-left: 10px;
|
||||
background: #ecf0f5;
|
||||
}
|
||||
|
||||
.main-footer {
|
||||
padding: 7px;
|
||||
color: #444;
|
||||
border-top: 1px solid #eee;
|
||||
}
|
||||
|
||||
[v-cloak] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.grid-btn {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.grid-btn .btn {
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.pointer {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.ml-10 {
|
||||
margin-left: 0 !important;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
.ml-10 {
|
||||
margin-left: 10px !important;
|
||||
}
|
||||
|
||||
.col-sm-10 {
|
||||
width: 70%;
|
||||
padding-left: 0px;
|
||||
}
|
||||
|
||||
.col-sm-2 {
|
||||
width: 24%;
|
||||
}
|
||||
}
|
||||
|
||||
tbody > tr > th {
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.panel .table {
|
||||
margin: 0 0;
|
||||
}
|
||||
|
||||
.panel .pagination {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.panel-default > .panel-heading {
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
|
||||
.row {
|
||||
border-top: 1px solid #ddd;
|
||||
margin: 0;
|
||||
padding: 20px 2px 0px 2px;
|
||||
}
|
||||
|
||||
.col-xs-6 {
|
||||
padding-left: 0px;
|
||||
padding-right: 0px;
|
||||
}
|
||||
|
||||
.form-horizontal .form-group {
|
||||
margin-left: 0px;
|
||||
margin-right: 0px;
|
||||
}
|
||||
|
||||
.form-horizontal {
|
||||
width: 550px;
|
||||
padding-top: 20px;
|
||||
}
|
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 451 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 114 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,43 @@
|
||||
$(function () {
|
||||
$.get("../sys/clientbusiness/all", function (r) {
|
||||
vm.sites = r.sites;
|
||||
});
|
||||
});
|
||||
var vm = new Vue({
|
||||
el:'#dtapp',
|
||||
data:{
|
||||
showList: true,
|
||||
title: null,
|
||||
sites: [],
|
||||
sms:{}
|
||||
},
|
||||
methods:{
|
||||
add: function(){
|
||||
vm.showList = false;
|
||||
vm.title = "新增";
|
||||
vm.sms = {parentName:null,parentId:0,type:1,orderNum:0};
|
||||
},
|
||||
saveOrUpdate: function (event) {
|
||||
var url = vm.sms.id == null ? "../sys/sms/save" : "../sys/sms/update";
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: url,
|
||||
data: JSON.stringify(vm.sms),
|
||||
success: function(r){
|
||||
if(r.code === 0){
|
||||
layer.alert(r.msg, function(index){
|
||||
layer.close(index);
|
||||
vm.reload();
|
||||
});
|
||||
}else{
|
||||
layer.alert(r.msg);
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
reload: function (event) {
|
||||
vm.showList = true;
|
||||
$("#table").bootstrapTable('refresh');
|
||||
}
|
||||
}
|
||||
});
|
@ -0,0 +1,121 @@
|
||||
//生成菜单
|
||||
var menuItem = Vue.extend({
|
||||
name: 'menu-item',
|
||||
props: {item: {}},
|
||||
template: [
|
||||
'<li>',
|
||||
'<a v-if="item.type === 0" href="javascript:;">',
|
||||
'<i v-if="item.icon != null" :class="item.icon"></i>',
|
||||
'<span>{{item.name}}</span>',
|
||||
'<i class="fa fa-angle-left pull-right"></i>',
|
||||
'</a>',
|
||||
'<ul v-if="item.type === 0" class="treeview-menu">',
|
||||
'<menu-item :item="item" v-for="item in item.list"></menu-item>',
|
||||
'</ul>',
|
||||
'<a v-if="item.type === 1" :href="\'#\'+item.url"><i v-if="item.icon != null" :class="item.icon"></i><i v-else class="fa fa-circle-o"></i> {{item.name}}</a>',
|
||||
'</li>'
|
||||
].join('')
|
||||
});
|
||||
|
||||
//iframe自适应
|
||||
$(window).on('resize', function () {
|
||||
var $content = $('.content');
|
||||
$content.height($(this).height() - 120);
|
||||
$content.find('iframe').each(function () {
|
||||
$(this).height($content.height());
|
||||
});
|
||||
}).resize();
|
||||
|
||||
//注册菜单组件
|
||||
Vue.component('menuItem', menuItem);
|
||||
|
||||
var vm = new Vue({
|
||||
el: '#dtapp',
|
||||
data: {
|
||||
user: {},
|
||||
menuList: {},
|
||||
main: "sys/main.html",
|
||||
password: '',
|
||||
newPassword: '',
|
||||
navTitle: "控制台"
|
||||
},
|
||||
methods: {
|
||||
getMenuList: function (event) {
|
||||
//$.getJSON("json/menu_user.json?_"+$.now(), function(r){
|
||||
$.getJSON("sys/menu/user?_" + $.now(), function (r) {
|
||||
vm.menuList = r.data;
|
||||
// 先不管这个权限信息
|
||||
// window.permissions = r.permissions;
|
||||
});
|
||||
},
|
||||
getUser: function () {
|
||||
//$.getJSON("json/user_info.json?_"+$.now(), function(r){
|
||||
$.getJSON("sys/user/info?_" + $.now(), function (r) {
|
||||
vm.user = r.data;
|
||||
});
|
||||
},
|
||||
updatePassword: function () {
|
||||
layer.open({
|
||||
type: 1,
|
||||
skin: 'layui-layer-molv',
|
||||
title: "修改密码",
|
||||
area: ['550px', '270px'],
|
||||
shadeClose: false,
|
||||
content: jQuery("#passwordLayer"),
|
||||
btn: ['修改', '取消'],
|
||||
btn1: function (index) {
|
||||
var data = "password=" + vm.password + "&newPassword=" + vm.newPassword;
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "sys/user/password",
|
||||
data: data,
|
||||
dataType: "json",
|
||||
success: function (result) {
|
||||
if (result.code == 0) {
|
||||
layer.close(index);
|
||||
layer.alert('修改成功', function (index) {
|
||||
location.reload();
|
||||
});
|
||||
} else {
|
||||
layer.alert(result.msg);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
created: function () {
|
||||
this.getMenuList();
|
||||
this.getUser();
|
||||
},
|
||||
updated: function () {
|
||||
//路由
|
||||
var router = new Router();
|
||||
routerList(router, vm.menuList);
|
||||
router.start();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
function routerList(router, menuList) {
|
||||
for (var key in menuList) {
|
||||
var menu = menuList[key];
|
||||
if (menu.type == 0) {
|
||||
routerList(router, menu.list);
|
||||
} else if (menu.type == 1) {
|
||||
router.add('#' + menu.url, function () {
|
||||
var url = window.location.hash;
|
||||
|
||||
//替换iframe的url
|
||||
vm.main = url.replace('#', '');
|
||||
|
||||
//导航菜单展开
|
||||
$(".treeview-menu li").removeClass("active");
|
||||
$("a[href='" + url + "']").parents("li").addClass("active");
|
||||
|
||||
vm.navTitle = $("a[href='" + url + "']").text();
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,106 @@
|
||||
$(function () {
|
||||
var option = {
|
||||
url: '../schedule/job/list',
|
||||
pagination: true, //显示分页条
|
||||
sidePagination: 'server',//服务器端分页
|
||||
showRefresh: true, //显示刷新按钮
|
||||
search: true,
|
||||
toolbar: '#toolbar',
|
||||
striped: true, //设置为true会有隔行变色效果
|
||||
//idField: 'menuId',
|
||||
columns: [
|
||||
{
|
||||
field: 'menuId',
|
||||
title: '序号',
|
||||
width: 40,
|
||||
formatter: function (value, row, index) {
|
||||
var pageSize = $('#table').bootstrapTable('getOptions').pageSize;
|
||||
var pageNumber = $('#table').bootstrapTable('getOptions').pageNumber;
|
||||
return pageSize * (pageNumber - 1) + index + 1;
|
||||
}
|
||||
},
|
||||
{checkbox: true},
|
||||
{title: '任务ID', field: 'jobId'},
|
||||
{title: 'bean名称', field: 'beanName'},
|
||||
{title: '方法名称', field: 'methodName'},
|
||||
{title: '参数', field: 'params'},
|
||||
{title: 'cron表达式 ', field: 'cronExpression'},
|
||||
{title: '备注 ', field: 'remark'},
|
||||
{
|
||||
title: '状态', field: 'status', formatter: function (value, row, index) {
|
||||
return value === 0 ?
|
||||
'<span class="label label-success">正常</span>' :
|
||||
'<span class="label label-danger">暂停</span>';
|
||||
}
|
||||
},
|
||||
{title: '创建时间', field: 'createTime'}
|
||||
]
|
||||
};
|
||||
$('#table').bootstrapTable(option);
|
||||
});
|
||||
|
||||
var vm = new Vue({
|
||||
el: '#dtapp',
|
||||
data: {
|
||||
showList: true,
|
||||
title: null,
|
||||
scheduleJob: {}
|
||||
},
|
||||
methods: {
|
||||
del: function () {
|
||||
|
||||
doTask('jobId', '删除', 'job/del');
|
||||
},
|
||||
resume: function () {
|
||||
|
||||
doTask('jobId', '恢复', 'job/resume');
|
||||
},
|
||||
pause: function () {
|
||||
|
||||
doTask('jobId', '暂停', 'job/pause');
|
||||
},
|
||||
runOnce: function () {
|
||||
doTask('jobId', '立即执行', 'job/run');
|
||||
},
|
||||
add: function () {
|
||||
vm.showList = false;
|
||||
vm.title = "新增";
|
||||
vm.scheduleJob = {};
|
||||
},
|
||||
update: function () {
|
||||
var id = 'jobId';
|
||||
var jobId = getSelectedRow()[id];
|
||||
if (jobId == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
$.get("../schedule/job/info/" + jobId, function (r) {
|
||||
vm.showList = false;
|
||||
vm.title = "修改";
|
||||
vm.scheduleJob = r.scheduleJob;
|
||||
});
|
||||
},
|
||||
saveOrUpdate: function () {
|
||||
var url = vm.scheduleJob.jobId == null ? "../schedule/job/save" : "../schedule/job/update";
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: url,
|
||||
data: JSON.stringify(vm.scheduleJob),
|
||||
success: function (r) {
|
||||
if (r.code === 0) {
|
||||
layer.alert(r.msg, function (index) {
|
||||
layer.close(index);
|
||||
vm.reload();
|
||||
});
|
||||
} else {
|
||||
layer.alert(r.msg);
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
reload: function (event) {
|
||||
vm.showList = true;
|
||||
$("#table").bootstrapTable('refresh');
|
||||
}
|
||||
}
|
||||
});
|
@ -0,0 +1,49 @@
|
||||
$(function () {
|
||||
var option = {
|
||||
url: 'log/list',
|
||||
pagination: true, //显示分页条
|
||||
sidePagination: 'server',//服务器端分页
|
||||
showRefresh: true, //显示刷新按钮
|
||||
search: true,
|
||||
toolbar: '#toolbar',
|
||||
striped: true, //设置为true会有隔行变色效果
|
||||
columns: [
|
||||
{
|
||||
field: 'logId',
|
||||
title: '序号',
|
||||
width: 40,
|
||||
formatter: function (value, row, index) {
|
||||
var pageSize = $('#table').bootstrapTable('getOptions').pageSize;
|
||||
var pageNumber = $('#table').bootstrapTable('getOptions').pageNumber;
|
||||
return pageSize * (pageNumber - 1) + index + 1;
|
||||
}
|
||||
},
|
||||
{checkbox: true},
|
||||
{title: '日志ID', field: 'logId'},
|
||||
{title: '任务ID', field: 'jobId'},
|
||||
{title: 'bean名称', field: 'beanName'},
|
||||
{title: '方法名称', field: 'methodName'},
|
||||
{title: '参数', field: 'params'},
|
||||
{
|
||||
title: '状态', field: 'status', formatter: function (value, row, index) {
|
||||
return value === 0 ?
|
||||
'<span class="label label-success">成功</span>' :
|
||||
'<span class="label label-danger pointer" onclick="vm.showError(' + row.logId + ')">失败</span>';
|
||||
}
|
||||
},
|
||||
{title: '耗时(单位:毫秒)', field: 'times'},
|
||||
{title: '执行时间', field: 'createTime'}
|
||||
]
|
||||
};
|
||||
$('#table').bootstrapTable(option);
|
||||
});
|
||||
|
||||
var vm = new Vue({
|
||||
el: '#dtapp',
|
||||
methods: {
|
||||
del: function () {
|
||||
|
||||
doTask('logId', '删除', 'log/del');
|
||||
}
|
||||
}
|
||||
});
|
@ -0,0 +1,160 @@
|
||||
{
|
||||
"menuList": [
|
||||
{
|
||||
"menuId": 1,
|
||||
"parentId": 0,
|
||||
"parentName": null,
|
||||
"name": "系统管理",
|
||||
"url": null,
|
||||
"perms": null,
|
||||
"type": 0,
|
||||
"icon": "fa fa-cog",
|
||||
"orderNum": 0,
|
||||
"open": null,
|
||||
"list": [
|
||||
{
|
||||
"menuId": 2,
|
||||
"parentId": 1,
|
||||
"parentName": null,
|
||||
"name": "用户管理",
|
||||
"url": "sys/user.html",
|
||||
"perms": null,
|
||||
"type": 1,
|
||||
"icon": "fa fa-user",
|
||||
"orderNum": 1,
|
||||
"open": null,
|
||||
"list": null
|
||||
},
|
||||
{
|
||||
"menuId": 3,
|
||||
"parentId": 1,
|
||||
"parentName": null,
|
||||
"name": "角色管理",
|
||||
"url": "sys/role.html",
|
||||
"perms": null,
|
||||
"type": 1,
|
||||
"icon": "fa fa-user-secret",
|
||||
"orderNum": 2,
|
||||
"open": null,
|
||||
"list": null
|
||||
},
|
||||
{
|
||||
"menuId": 4,
|
||||
"parentId": 1,
|
||||
"parentName": null,
|
||||
"name": "菜单管理",
|
||||
"url": "sys/menu.html",
|
||||
"perms": null,
|
||||
"type": 1,
|
||||
"icon": "fa fa-th-list",
|
||||
"orderNum": 3,
|
||||
"open": null,
|
||||
"list": null
|
||||
},
|
||||
{
|
||||
"menuId": 5,
|
||||
"parentId": 1,
|
||||
"parentName": null,
|
||||
"name": "SQL监控",
|
||||
"url": "druid/sql.html",
|
||||
"perms": null,
|
||||
"type": 1,
|
||||
"icon": "fa fa-bug",
|
||||
"orderNum": 4,
|
||||
"open": null,
|
||||
"list": null
|
||||
},
|
||||
{
|
||||
"menuId": 6,
|
||||
"parentId": 1,
|
||||
"parentName": null,
|
||||
"name": "定时任务管理",
|
||||
"url": "sys/schedule.html",
|
||||
"perms": null,
|
||||
"type": 1,
|
||||
"icon": "fa fa-tasks",
|
||||
"orderNum": 5,
|
||||
"open": null,
|
||||
"list": null
|
||||
},
|
||||
{
|
||||
"menuId": 27,
|
||||
"parentId": 1,
|
||||
"parentName": null,
|
||||
"name": "参数管理",
|
||||
"url": "sys/config.html",
|
||||
"perms": "sys:config:list,sys:config:info,sys:config:save,sys:config:update,sys:config:delete",
|
||||
"type": 1,
|
||||
"icon": "fa fa-sun-o",
|
||||
"orderNum": 6,
|
||||
"open": null,
|
||||
"list": null
|
||||
},
|
||||
{
|
||||
"menuId": 29,
|
||||
"parentId": 1,
|
||||
"parentName": null,
|
||||
"name": "系统日志",
|
||||
"url": "sys/log.html",
|
||||
"perms": "sys:log:list",
|
||||
"type": 1,
|
||||
"icon": "fa fa-file-text-o",
|
||||
"orderNum": 7,
|
||||
"open": null,
|
||||
"list": null
|
||||
},
|
||||
{
|
||||
"menuId": 28,
|
||||
"parentId": 1,
|
||||
"parentName": null,
|
||||
"name": "代码生成器",
|
||||
"url": "sys/generator.html",
|
||||
"perms": "sys:generator:list,sys:generator:code",
|
||||
"type": 1,
|
||||
"icon": "fa fa-rocket",
|
||||
"orderNum": 8,
|
||||
"open": null,
|
||||
"list": null
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"code": 0,
|
||||
"permissions": [
|
||||
"sys:schedule:info",
|
||||
"sys:menu:update",
|
||||
"sys:menu:delete",
|
||||
"sys:config:info",
|
||||
"sys:generator:list",
|
||||
"sys:menu:list",
|
||||
"sys:config:save",
|
||||
"sys:menu:perms",
|
||||
"sys:config:update",
|
||||
"sys:schedule:resume",
|
||||
"sys:user:delete",
|
||||
"sys:config:list",
|
||||
"sys:user:update",
|
||||
"sys:role:list",
|
||||
"sys:menu:info",
|
||||
"sys:menu:select",
|
||||
"sys:schedule:update",
|
||||
"sys:schedule:save",
|
||||
"sys:role:select",
|
||||
"sys:user:list",
|
||||
"sys:menu:save",
|
||||
"sys:role:save",
|
||||
"sys:schedule:log",
|
||||
"sys:role:info",
|
||||
"sys:schedule:delete",
|
||||
"sys:role:update",
|
||||
"sys:schedule:list",
|
||||
"sys:user:info",
|
||||
"sys:generator:code",
|
||||
"sys:schedule:run",
|
||||
"sys:config:delete",
|
||||
"sys:role:delete",
|
||||
"sys:user:save",
|
||||
"sys:schedule:pause",
|
||||
"sys:log:list"
|
||||
]
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
{
|
||||
"code": 0,
|
||||
"user": {
|
||||
"userId": 1,
|
||||
"username": "admin",
|
||||
"password": "8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918",
|
||||
"email": "100@qq.com",
|
||||
"mobile": "13666666666",
|
||||
"status": 1,
|
||||
"roleIdList": null,
|
||||
"createUserId": null,
|
||||
"createTime": "2017-06-01 15:33:20"
|
||||
}
|
||||
}
|
@ -0,0 +1,679 @@
|
||||
/**
|
||||
* AJAX Upload ( http://valums.com/ajax-upload/ )
|
||||
* Copyright (c) Andris Valums
|
||||
* Licensed under the MIT license ( http://valums.com/mit-license/ )
|
||||
* Thanks to Gary Haran, David Mark, Corey Burns and others for contributions
|
||||
*/
|
||||
(function () {
|
||||
/* global window */
|
||||
|
||||
/* jslint browser: true, devel: true, undef: true, nomen: true, bitwise: true, regexp: true, newcap: true, immed: true */
|
||||
|
||||
/**
|
||||
* Wrapper for FireBug's console.log
|
||||
*/
|
||||
function log() {
|
||||
if (typeof (console) != 'undefined' && typeof (console.log) == 'function') {
|
||||
Array.prototype.unshift.call(arguments, '[Ajax Upload]');
|
||||
console.log(Array.prototype.join.call(arguments, ' '));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Attaches event to a dom element.
|
||||
* @param {Element} el
|
||||
* @param type event name
|
||||
* @param fn callback This refers to the passed element
|
||||
*/
|
||||
function addEvent(el, type, fn) {
|
||||
if (el.addEventListener) {
|
||||
el.addEventListener(type, fn, false);
|
||||
} else if (el.attachEvent) {
|
||||
el.attachEvent('on' + type, function () {
|
||||
fn.call(el);
|
||||
});
|
||||
} else {
|
||||
throw new Error('not supported or DOM not loaded');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Attaches resize event to a window, limiting
|
||||
* number of event fired. Fires only when encounteres
|
||||
* delay of 100 after series of events.
|
||||
*
|
||||
* Some browsers fire event multiple times when resizing
|
||||
* http://www.quirksmode.org/dom/events/resize.html
|
||||
*
|
||||
* @param fn callback This refers to the passed element
|
||||
*/
|
||||
function addResizeEvent(fn) {
|
||||
var timeout;
|
||||
|
||||
addEvent(window, 'resize', function () {
|
||||
if (timeout) {
|
||||
clearTimeout(timeout);
|
||||
}
|
||||
timeout = setTimeout(fn, 100);
|
||||
});
|
||||
}
|
||||
|
||||
// Needs more testing, will be rewriten for next version
|
||||
// getOffset function copied from jQuery lib (http://jquery.com/)
|
||||
if (document.documentElement.getBoundingClientRect) {
|
||||
// Get Offset using getBoundingClientRect
|
||||
// http://ejohn.org/blog/getboundingclientrect-is-awesome/
|
||||
var getOffset = function (el) {
|
||||
var box = el.getBoundingClientRect();
|
||||
var doc = el.ownerDocument;
|
||||
var body = doc.body;
|
||||
var docElem = doc.documentElement; // for ie
|
||||
var clientTop = docElem.clientTop || body.clientTop || 0;
|
||||
var clientLeft = docElem.clientLeft || body.clientLeft || 0;
|
||||
|
||||
// In Internet Explorer 7 getBoundingClientRect property is treated as physical,
|
||||
// while others are logical. Make all logical, like in IE8.
|
||||
var zoom = 1;
|
||||
if (body.getBoundingClientRect) {
|
||||
var bound = body.getBoundingClientRect();
|
||||
zoom = (bound.right - bound.left) / body.clientWidth;
|
||||
}
|
||||
|
||||
if (zoom > 1) {
|
||||
clientTop = 0;
|
||||
clientLeft = 0;
|
||||
}
|
||||
|
||||
var top = box.top / zoom + (window.pageYOffset || docElem && docElem.scrollTop / zoom || body.scrollTop / zoom) - clientTop,
|
||||
left = box.left / zoom + (window.pageXOffset || docElem && docElem.scrollLeft / zoom || body.scrollLeft / zoom) - clientLeft;
|
||||
|
||||
return {
|
||||
top: top,
|
||||
left: left
|
||||
};
|
||||
};
|
||||
} else {
|
||||
// Get offset adding all offsets
|
||||
var getOffset = function (el) {
|
||||
var top = 0, left = 0;
|
||||
do {
|
||||
top += el.offsetTop || 0;
|
||||
left += el.offsetLeft || 0;
|
||||
el = el.offsetParent;
|
||||
} while (el);
|
||||
|
||||
return {
|
||||
left: left,
|
||||
top: top
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns left, top, right and bottom properties describing the border-box,
|
||||
* in pixels, with the top-left relative to the body
|
||||
* @param {Element} el
|
||||
* @return {Object} Contains left, top, right,bottom
|
||||
*/
|
||||
function getBox(el) {
|
||||
var left, right, top, bottom;
|
||||
var offset = getOffset(el);
|
||||
left = offset.left;
|
||||
top = offset.top;
|
||||
|
||||
right = left + el.offsetWidth;
|
||||
bottom = top + el.offsetHeight;
|
||||
|
||||
return {
|
||||
left: left,
|
||||
right: right,
|
||||
top: top,
|
||||
bottom: bottom
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper that takes object literal
|
||||
* and add all properties to element.style
|
||||
* @param {Element} el
|
||||
* @param {Object} styles
|
||||
*/
|
||||
function addStyles(el, styles) {
|
||||
for (var name in styles) {
|
||||
if (styles.hasOwnProperty(name)) {
|
||||
el.style[name] = styles[name];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Function places an absolutely positioned
|
||||
* element on top of the specified element
|
||||
* copying position and dimentions.
|
||||
* @param {Element} from
|
||||
* @param {Element} to
|
||||
*/
|
||||
function copyLayout(from, to) {
|
||||
var box = getBox(from);
|
||||
|
||||
addStyles(to, {
|
||||
position: 'absolute',
|
||||
left: box.left + 'px',
|
||||
top: box.top + 'px',
|
||||
width: from.offsetWidth + 'px',
|
||||
height: from.offsetHeight + 'px'
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates and returns element from html chunk
|
||||
* Uses innerHTML to create an element
|
||||
*/
|
||||
var toElement = (function () {
|
||||
var div = document.createElement('div');
|
||||
return function (html) {
|
||||
div.innerHTML = html;
|
||||
var el = div.firstChild;
|
||||
return div.removeChild(el);
|
||||
};
|
||||
})();
|
||||
|
||||
/**
|
||||
* Function generates unique id
|
||||
* @return unique id
|
||||
*/
|
||||
var getUID = (function () {
|
||||
var id = 0;
|
||||
return function () {
|
||||
return 'ValumsAjaxUpload' + id++;
|
||||
};
|
||||
})();
|
||||
|
||||
/**
|
||||
* Get file name from path
|
||||
* @param {String} file path to file
|
||||
* @return filename
|
||||
*/
|
||||
function fileFromPath(file) {
|
||||
return file.replace(/.*(\/|\\)/, "");
|
||||
}
|
||||
|
||||
/**
|
||||
* Get file extension lowercase
|
||||
* @param {String} file name
|
||||
* @return file extenstion
|
||||
*/
|
||||
function getExt(file) {
|
||||
return (-1 !== file.indexOf('.')) ? file.replace(/.*[.]/, '') : '';
|
||||
}
|
||||
|
||||
function hasClass(el, name) {
|
||||
var re = new RegExp('\\b' + name + '\\b');
|
||||
return re.test(el.className);
|
||||
}
|
||||
|
||||
function addClass(el, name) {
|
||||
if (!hasClass(el, name)) {
|
||||
el.className += ' ' + name;
|
||||
}
|
||||
}
|
||||
|
||||
function removeClass(el, name) {
|
||||
var re = new RegExp('\\b' + name + '\\b');
|
||||
el.className = el.className.replace(re, '');
|
||||
}
|
||||
|
||||
function removeNode(el) {
|
||||
el.parentNode.removeChild(el);
|
||||
}
|
||||
|
||||
/**
|
||||
* Easy styling and uploading
|
||||
* @constructor
|
||||
* @param button An element you want convert to
|
||||
* upload button. Tested dimentions up to 500x500px
|
||||
* @param {Object} options See defaults below.
|
||||
*/
|
||||
window.AjaxUpload = function (button, options) {
|
||||
this._settings = {
|
||||
// Location of the server-side upload script
|
||||
action: 'upload.php',
|
||||
// File upload name
|
||||
name: 'userfile',
|
||||
// Additional data to send
|
||||
data: {},
|
||||
// Submit file as soon as it's selected
|
||||
autoSubmit: true,
|
||||
// The type of data that you're expecting back from the server.
|
||||
// html and xml are detected automatically.
|
||||
// Only useful when you are using json data as a response.
|
||||
// Set to "json" in that case.
|
||||
responseType: false,
|
||||
// Class applied to button when mouse is hovered
|
||||
hoverClass: 'hover',
|
||||
// Class applied to button when AU is disabled
|
||||
disabledClass: 'disabled',
|
||||
// When user selects a file, useful with autoSubmit disabled
|
||||
// You can return false to cancel upload
|
||||
onChange: function (file, extension) {
|
||||
},
|
||||
// Callback to fire before file is uploaded
|
||||
// You can return false to cancel upload
|
||||
onSubmit: function (file, extension) {
|
||||
},
|
||||
// Fired when file upload is completed
|
||||
// WARNING! DO NOT USE "FALSE" STRING AS A RESPONSE!
|
||||
onComplete: function (file, response) {
|
||||
}
|
||||
};
|
||||
|
||||
// Merge the users options with our defaults
|
||||
for (var i in options) {
|
||||
if (options.hasOwnProperty(i)) {
|
||||
this._settings[i] = options[i];
|
||||
}
|
||||
}
|
||||
|
||||
// button isn't necessary a dom element
|
||||
if (button.jquery) {
|
||||
// jQuery object was passed
|
||||
button = button[0];
|
||||
} else if (typeof button == "string") {
|
||||
if (/^#.*/.test(button)) {
|
||||
// If jQuery user passes #elementId don't break it
|
||||
button = button.slice(1);
|
||||
}
|
||||
|
||||
button = document.getElementById(button);
|
||||
}
|
||||
|
||||
if (!button || button.nodeType !== 1) {
|
||||
throw new Error("Please make sure that you're passing a valid element");
|
||||
}
|
||||
|
||||
if (button.nodeName.toUpperCase() == 'A') {
|
||||
// disable link
|
||||
addEvent(button, 'click', function (e) {
|
||||
if (e && e.preventDefault) {
|
||||
e.preventDefault();
|
||||
} else if (window.event) {
|
||||
window.event.returnValue = false;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// DOM element
|
||||
this._button = button;
|
||||
// DOM element
|
||||
this._input = null;
|
||||
// If disabled clicking on button won't do anything
|
||||
this._disabled = false;
|
||||
|
||||
// if the button was disabled before refresh if will remain
|
||||
// disabled in FireFox, let's fix it
|
||||
this.enable();
|
||||
|
||||
this._rerouteClicks();
|
||||
};
|
||||
|
||||
// assigning methods to our class
|
||||
AjaxUpload.prototype = {
|
||||
setData: function (data) {
|
||||
this._settings.data = data;
|
||||
},
|
||||
disable: function () {
|
||||
addClass(this._button, this._settings.disabledClass);
|
||||
this._disabled = true;
|
||||
|
||||
var nodeName = this._button.nodeName.toUpperCase();
|
||||
if (nodeName == 'INPUT' || nodeName == 'BUTTON') {
|
||||
this._button.setAttribute('disabled', 'disabled');
|
||||
}
|
||||
|
||||
// hide input
|
||||
if (this._input) {
|
||||
// We use visibility instead of display to fix problem with Safari 4
|
||||
// The problem is that the value of input doesn't change if it
|
||||
// has display none when user selects a file
|
||||
this._input.parentNode.style.visibility = 'hidden';
|
||||
}
|
||||
},
|
||||
enable: function () {
|
||||
removeClass(this._button, this._settings.disabledClass);
|
||||
this._button.removeAttribute('disabled');
|
||||
this._disabled = false;
|
||||
|
||||
},
|
||||
/**
|
||||
* Creates invisible file input
|
||||
* that will hover above the button
|
||||
* <div><input type='file' /></div>
|
||||
*/
|
||||
_createInput: function () {
|
||||
var self = this;
|
||||
|
||||
var input = document.createElement("input");
|
||||
input.setAttribute('type', 'file');
|
||||
input.setAttribute('name', this._settings.name);
|
||||
|
||||
addStyles(input, {
|
||||
'position': 'absolute',
|
||||
// in Opera only 'browse' button
|
||||
// is clickable and it is located at
|
||||
// the right side of the input
|
||||
'right': 0,
|
||||
'margin': 0,
|
||||
'padding': 0,
|
||||
'fontSize': '480px',
|
||||
'cursor': 'pointer'
|
||||
});
|
||||
|
||||
var div = document.createElement("div");
|
||||
addStyles(div, {
|
||||
'display': 'block',
|
||||
'position': 'absolute',
|
||||
'overflow': 'hidden',
|
||||
'margin': 0,
|
||||
'padding': 0,
|
||||
'opacity': 0,
|
||||
// Make sure browse button is in the right side
|
||||
// in Internet Explorer
|
||||
'direction': 'ltr',
|
||||
//Max zIndex supported by Opera 9.0-9.2
|
||||
'zIndex': 2147483583
|
||||
});
|
||||
|
||||
// Make sure that element opacity exists.
|
||||
// Otherwise use IE filter
|
||||
if (div.style.opacity !== "0") {
|
||||
if (typeof (div.filters) == 'undefined') {
|
||||
throw new Error('Opacity not supported by the browser');
|
||||
}
|
||||
div.style.filter = "alpha(opacity=0)";
|
||||
}
|
||||
|
||||
addEvent(input, 'change', function () {
|
||||
|
||||
if (!input || input.value === '') {
|
||||
return;
|
||||
}
|
||||
|
||||
// Get filename from input, required
|
||||
// as some browsers have path instead of it
|
||||
var file = fileFromPath(input.value);
|
||||
|
||||
if (false === self._settings.onChange.call(self, file, getExt(file))) {
|
||||
self._clearInput();
|
||||
return;
|
||||
}
|
||||
|
||||
// Submit form when value is changed
|
||||
if (self._settings.autoSubmit) {
|
||||
self.submit();
|
||||
}
|
||||
});
|
||||
|
||||
addEvent(input, 'mouseover', function () {
|
||||
addClass(self._button, self._settings.hoverClass);
|
||||
});
|
||||
|
||||
addEvent(input, 'mouseout', function () {
|
||||
removeClass(self._button, self._settings.hoverClass);
|
||||
|
||||
// We use visibility instead of display to fix problem with Safari 4
|
||||
// The problem is that the value of input doesn't change if it
|
||||
// has display none when user selects a file
|
||||
input.parentNode.style.visibility = 'hidden';
|
||||
|
||||
});
|
||||
|
||||
div.appendChild(input);
|
||||
document.body.appendChild(div);
|
||||
|
||||
this._input = input;
|
||||
},
|
||||
_clearInput: function () {
|
||||
if (!this._input) {
|
||||
return;
|
||||
}
|
||||
|
||||
// this._input.value = ''; Doesn't work in IE6
|
||||
removeNode(this._input.parentNode);
|
||||
this._input = null;
|
||||
this._createInput();
|
||||
|
||||
removeClass(this._button, this._settings.hoverClass);
|
||||
},
|
||||
/**
|
||||
* Function makes sure that when user clicks upload button,
|
||||
* the this._input is clicked instead
|
||||
*/
|
||||
_rerouteClicks: function () {
|
||||
var self = this;
|
||||
|
||||
// IE will later display 'access denied' error
|
||||
// if you use using self._input.click()
|
||||
// other browsers just ignore click()
|
||||
|
||||
addEvent(self._button, 'mouseover', function () {
|
||||
if (self._disabled) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!self._input) {
|
||||
self._createInput();
|
||||
}
|
||||
|
||||
var div = self._input.parentNode;
|
||||
copyLayout(self._button, div);
|
||||
div.style.visibility = 'visible';
|
||||
|
||||
});
|
||||
|
||||
|
||||
// commented because we now hide input on mouseleave
|
||||
/**
|
||||
* When the window is resized the elements
|
||||
* can be misaligned if button position depends
|
||||
* on window size
|
||||
*/
|
||||
//addResizeEvent(function(){
|
||||
// if (self._input){
|
||||
// copyLayout(self._button, self._input.parentNode);
|
||||
// }
|
||||
//});
|
||||
|
||||
},
|
||||
/**
|
||||
* Creates iframe with unique name
|
||||
* @return {Element} iframe
|
||||
*/
|
||||
_createIframe: function () {
|
||||
// We can't use getTime, because it sometimes return
|
||||
// same value in safari :(
|
||||
var id = getUID();
|
||||
|
||||
// We can't use following code as the name attribute
|
||||
// won't be properly registered in IE6, and new window
|
||||
// on form submit will open
|
||||
// var iframe = document.createElement('iframe');
|
||||
// iframe.setAttribute('name', id);
|
||||
|
||||
var iframe = toElement('<iframe src="javascript:false;" name="' + id + '" />');
|
||||
// src="javascript:false; was added
|
||||
// because it possibly removes ie6 prompt
|
||||
// "This page contains both secure and nonsecure items"
|
||||
// Anyway, it doesn't do any harm.
|
||||
iframe.setAttribute('id', id);
|
||||
|
||||
iframe.style.display = 'none';
|
||||
document.body.appendChild(iframe);
|
||||
|
||||
return iframe;
|
||||
},
|
||||
/**
|
||||
* Creates form, that will be submitted to iframe
|
||||
* @param {Element} iframe Where to submit
|
||||
* @return {Element} form
|
||||
*/
|
||||
_createForm: function (iframe) {
|
||||
var settings = this._settings;
|
||||
|
||||
// We can't use the following code in IE6
|
||||
// var form = document.createElement('form');
|
||||
// form.setAttribute('method', 'post');
|
||||
// form.setAttribute('enctype', 'multipart/form-data');
|
||||
// Because in this case file won't be attached to request
|
||||
var form = toElement('<form method="post" enctype="multipart/form-data"></form>');
|
||||
|
||||
form.setAttribute('action', settings.action);
|
||||
form.setAttribute('target', iframe.name);
|
||||
form.style.display = 'none';
|
||||
document.body.appendChild(form);
|
||||
|
||||
// Create hidden input element for each data key
|
||||
for (var prop in settings.data) {
|
||||
if (settings.data.hasOwnProperty(prop)) {
|
||||
var el = document.createElement("input");
|
||||
el.setAttribute('type', 'hidden');
|
||||
el.setAttribute('name', prop);
|
||||
el.setAttribute('value', settings.data[prop]);
|
||||
form.appendChild(el);
|
||||
}
|
||||
}
|
||||
return form;
|
||||
},
|
||||
/**
|
||||
* Gets response from iframe and fires onComplete event when ready
|
||||
* @param iframe
|
||||
* @param file Filename to use in onComplete callback
|
||||
*/
|
||||
_getResponse: function (iframe, file) {
|
||||
// getting response
|
||||
var toDeleteFlag = false, self = this, settings = this._settings;
|
||||
|
||||
addEvent(iframe, 'load', function () {
|
||||
|
||||
if (// For Safari
|
||||
iframe.src == "javascript:'%3Chtml%3E%3C/html%3E';" ||
|
||||
// For FF, IE
|
||||
iframe.src == "javascript:'<html></html>';") {
|
||||
// First time around, do not delete.
|
||||
// We reload to blank page, so that reloading main page
|
||||
// does not re-submit the post.
|
||||
|
||||
if (toDeleteFlag) {
|
||||
// Fix busy state in FF3
|
||||
setTimeout(function () {
|
||||
removeNode(iframe);
|
||||
}, 0);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
var doc = iframe.contentDocument ? iframe.contentDocument : window.frames[iframe.id].document;
|
||||
|
||||
// fixing Opera 9.26,10.00
|
||||
if (doc.readyState && doc.readyState != 'complete') {
|
||||
// Opera fires load event multiple times
|
||||
// Even when the DOM is not ready yet
|
||||
// this fix should not affect other browsers
|
||||
return;
|
||||
}
|
||||
|
||||
// fixing Opera 9.64
|
||||
if (doc.body && doc.body.innerHTML == "false") {
|
||||
// In Opera 9.64 event was fired second time
|
||||
// when body.innerHTML changed from false
|
||||
// to server response approx. after 1 sec
|
||||
return;
|
||||
}
|
||||
|
||||
var response;
|
||||
|
||||
if (doc.XMLDocument) {
|
||||
// response is a xml document Internet Explorer property
|
||||
response = doc.XMLDocument;
|
||||
} else if (doc.body) {
|
||||
// response is html document or plain text
|
||||
response = doc.body.innerHTML;
|
||||
|
||||
if (settings.responseType && settings.responseType.toLowerCase() == 'json') {
|
||||
// If the document was sent as 'application/javascript' or
|
||||
// 'text/javascript', then the browser wraps the text in a <pre>
|
||||
// tag and performs html encoding on the contents. In this case,
|
||||
// we need to pull the original text content from the text node's
|
||||
// nodeValue property to retrieve the unmangled content.
|
||||
// Note that IE6 only understands text/html
|
||||
if (doc.body.firstChild && doc.body.firstChild.nodeName.toUpperCase() == 'PRE') {
|
||||
response = doc.body.firstChild.firstChild.nodeValue;
|
||||
}
|
||||
|
||||
if (response) {
|
||||
response = eval("(" + response + ")");
|
||||
} else {
|
||||
response = {};
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// response is a xml document
|
||||
response = doc;
|
||||
}
|
||||
|
||||
settings.onComplete.call(self, file, response);
|
||||
|
||||
// Reload blank page, so that reloading main page
|
||||
// does not re-submit the post. Also, remember to
|
||||
// delete the frame
|
||||
toDeleteFlag = true;
|
||||
|
||||
// Fix IE mixed content issue
|
||||
iframe.src = "javascript:'<html></html>';";
|
||||
});
|
||||
},
|
||||
/**
|
||||
* Upload file contained in this._input
|
||||
*/
|
||||
submit: function () {
|
||||
var self = this, settings = this._settings;
|
||||
|
||||
if (!this._input || this._input.value === '') {
|
||||
return;
|
||||
}
|
||||
|
||||
var file = fileFromPath(this._input.value);
|
||||
|
||||
// user returned false to cancel upload
|
||||
if (false === settings.onSubmit.call(this, file, getExt(file))) {
|
||||
this._clearInput();
|
||||
return;
|
||||
}
|
||||
|
||||
// sending request
|
||||
var iframe = this._createIframe();
|
||||
var form = this._createForm(iframe);
|
||||
|
||||
// assuming following structure
|
||||
// div -> input type='file'
|
||||
removeNode(this._input.parentNode);
|
||||
removeClass(self._button, self._settings.hoverClass);
|
||||
|
||||
form.appendChild(this._input);
|
||||
|
||||
form.submit();
|
||||
|
||||
// request set, clean up
|
||||
removeNode(form);
|
||||
form = null;
|
||||
removeNode(this._input);
|
||||
this._input = null;
|
||||
|
||||
// Get response from iframe and fire onComplete event when ready
|
||||
this._getResponse(iframe, file);
|
||||
|
||||
// get ready for next request
|
||||
this._createInput();
|
||||
}
|
||||
};
|
||||
})();
|
@ -0,0 +1,772 @@
|
||||
/*! AdminLTE app.js
|
||||
* ================
|
||||
* Main JS application file for AdminLTE v2. This file
|
||||
* should be included in all pages. It controls some layout
|
||||
* options and implements exclusive AdminLTE plugins.
|
||||
*
|
||||
* @Author Almsaeed Studio
|
||||
* @Support <http://www.almsaeedstudio.com>
|
||||
* @Email <abdullah@almsaeedstudio.com>
|
||||
* @version 2.3.8
|
||||
* @license MIT <http://opensource.org/licenses/MIT>
|
||||
*/
|
||||
|
||||
//Make sure jQuery has been loaded before app.js
|
||||
if (typeof jQuery === "undefined") {
|
||||
throw new Error("AdminLTE requires jQuery");
|
||||
}
|
||||
|
||||
/* AdminLTE
|
||||
*
|
||||
* @type Object
|
||||
* @description $.AdminLTE is the main object for the template's app.
|
||||
* It's used for implementing functions and options related
|
||||
* to the template. Keeping everything wrapped in an object
|
||||
* prevents conflict with other plugins and is a better
|
||||
* way to organize our code.
|
||||
*/
|
||||
$.AdminLTE = {};
|
||||
|
||||
/* --------------------
|
||||
* - AdminLTE Options -
|
||||
* --------------------
|
||||
* Modify these options to suit your implementation
|
||||
*/
|
||||
$.AdminLTE.options = {
|
||||
//Add slimscroll to navbar menus
|
||||
//This requires you to load the slimscroll plugin
|
||||
//in every page before app.js
|
||||
navbarMenuSlimscroll: true,
|
||||
navbarMenuSlimscrollWidth: "3px", //The width of the scroll bar
|
||||
navbarMenuHeight: "200px", //The height of the inner menu
|
||||
//General animation speed for JS animated elements such as box collapse/expand and
|
||||
//sidebar treeview slide up/down. This options accepts an integer as milliseconds,
|
||||
//'fast', 'normal', or 'slow'
|
||||
animationSpeed: 'fast',
|
||||
//Sidebar push menu toggle button selector
|
||||
sidebarToggleSelector: "[data-toggle='offcanvas']",
|
||||
//Activate sidebar push menu
|
||||
sidebarPushMenu: true,
|
||||
//Activate sidebar slimscroll if the fixed layout is set (requires SlimScroll Plugin)
|
||||
sidebarSlimScroll: true,
|
||||
//Enable sidebar expand on hover effect for sidebar mini
|
||||
//This option is forced to true if both the fixed layout and sidebar mini
|
||||
//are used together
|
||||
sidebarExpandOnHover: false,
|
||||
//BoxRefresh Plugin
|
||||
enableBoxRefresh: true,
|
||||
//Bootstrap.js tooltip
|
||||
enableBSToppltip: true,
|
||||
BSTooltipSelector: "[data-toggle='tooltip']",
|
||||
//Enable Fast Click. Fastclick.js creates a more
|
||||
//native touch experience with touch devices. If you
|
||||
//choose to enable the plugin, make sure you load the script
|
||||
//before AdminLTE's app.js
|
||||
enableFastclick: false,
|
||||
//Control Sidebar Tree views
|
||||
enableControlTreeView: true,
|
||||
//Control Sidebar Options
|
||||
enableControlSidebar: true,
|
||||
controlSidebarOptions: {
|
||||
//Which button should trigger the open/close event
|
||||
toggleBtnSelector: "[data-toggle='control-sidebar']",
|
||||
//The sidebar selector
|
||||
selector: ".control-sidebar",
|
||||
//Enable slide over content
|
||||
slide: true
|
||||
},
|
||||
//Box Widget Plugin. Enable this plugin
|
||||
//to allow boxes to be collapsed and/or removed
|
||||
enableBoxWidget: true,
|
||||
//Box Widget plugin options
|
||||
boxWidgetOptions: {
|
||||
boxWidgetIcons: {
|
||||
//Collapse icon
|
||||
collapse: 'fa-minus',
|
||||
//Open icon
|
||||
open: 'fa-plus',
|
||||
//Remove icon
|
||||
remove: 'fa-times'
|
||||
},
|
||||
boxWidgetSelectors: {
|
||||
//Remove button selector
|
||||
remove: '[data-widget="remove"]',
|
||||
//Collapse button selector
|
||||
collapse: '[data-widget="collapse"]'
|
||||
}
|
||||
},
|
||||
//Direct Chat plugin options
|
||||
directChat: {
|
||||
//Enable direct chat by default
|
||||
enable: true,
|
||||
//The button to open and close the chat contacts pane
|
||||
contactToggleSelector: '[data-widget="chat-pane-toggle"]'
|
||||
},
|
||||
//Define the set of colors to use globally around the website
|
||||
colors: {
|
||||
lightBlue: "#3c8dbc",
|
||||
red: "#f56954",
|
||||
green: "#00a65a",
|
||||
aqua: "#00c0ef",
|
||||
yellow: "#f39c12",
|
||||
blue: "#0073b7",
|
||||
navy: "#001F3F",
|
||||
teal: "#39CCCC",
|
||||
olive: "#3D9970",
|
||||
lime: "#01FF70",
|
||||
orange: "#FF851B",
|
||||
fuchsia: "#F012BE",
|
||||
purple: "#8E24AA",
|
||||
maroon: "#D81B60",
|
||||
black: "#222222",
|
||||
gray: "#d2d6de"
|
||||
},
|
||||
//The standard screen sizes that bootstrap uses.
|
||||
//If you change these in the variables.less file, change
|
||||
//them here too.
|
||||
screenSizes: {
|
||||
xs: 480,
|
||||
sm: 768,
|
||||
md: 992,
|
||||
lg: 1200
|
||||
}
|
||||
};
|
||||
|
||||
/* ------------------
|
||||
* - Implementation -
|
||||
* ------------------
|
||||
* The next block of code implements AdminLTE's
|
||||
* functions and plugins as specified by the
|
||||
* options above.
|
||||
*/
|
||||
$(function () {
|
||||
"use strict";
|
||||
|
||||
//Fix for IE page transitions
|
||||
$("body").removeClass("hold-transition");
|
||||
|
||||
//Extend options if external options exist
|
||||
if (typeof AdminLTEOptions !== "undefined") {
|
||||
$.extend(true,
|
||||
$.AdminLTE.options,
|
||||
AdminLTEOptions);
|
||||
}
|
||||
|
||||
//Easy access to options
|
||||
var o = $.AdminLTE.options;
|
||||
|
||||
//Set up the object
|
||||
_init();
|
||||
|
||||
//Activate the layout maker
|
||||
$.AdminLTE.layout.activate();
|
||||
|
||||
//Enable sidebar tree view controls
|
||||
if (o.enableControlTreeView) {
|
||||
$.AdminLTE.tree('.sidebar');
|
||||
}
|
||||
|
||||
//Enable control sidebar
|
||||
if (o.enableControlSidebar) {
|
||||
$.AdminLTE.controlSidebar.activate();
|
||||
}
|
||||
|
||||
//Add slimscroll to navbar dropdown
|
||||
if (o.navbarMenuSlimscroll && typeof $.fn.slimscroll != 'undefined') {
|
||||
$(".navbar .menu").slimscroll({
|
||||
height: o.navbarMenuHeight,
|
||||
alwaysVisible: false,
|
||||
size: o.navbarMenuSlimscrollWidth
|
||||
}).css("width", "100%");
|
||||
}
|
||||
|
||||
//Activate sidebar push menu
|
||||
if (o.sidebarPushMenu) {
|
||||
$.AdminLTE.pushMenu.activate(o.sidebarToggleSelector);
|
||||
}
|
||||
|
||||
//Activate Bootstrap tooltip
|
||||
if (o.enableBSToppltip) {
|
||||
$('body').tooltip({
|
||||
selector: o.BSTooltipSelector,
|
||||
container: 'body'
|
||||
});
|
||||
}
|
||||
|
||||
//Activate box widget
|
||||
if (o.enableBoxWidget) {
|
||||
$.AdminLTE.boxWidget.activate();
|
||||
}
|
||||
|
||||
//Activate fast click
|
||||
if (o.enableFastclick && typeof FastClick != 'undefined') {
|
||||
FastClick.attach(document.body);
|
||||
}
|
||||
|
||||
//Activate direct chat widget
|
||||
if (o.directChat.enable) {
|
||||
$(document).on('click', o.directChat.contactToggleSelector, function () {
|
||||
var box = $(this).parents('.direct-chat').first();
|
||||
box.toggleClass('direct-chat-contacts-open');
|
||||
});
|
||||
}
|
||||
|
||||
/*
|
||||
* INITIALIZE BUTTON TOGGLE
|
||||
* ------------------------
|
||||
*/
|
||||
$('.btn-group[data-toggle="btn-toggle"]').each(function () {
|
||||
var group = $(this);
|
||||
$(this).find(".btn").on('click', function (e) {
|
||||
group.find(".btn.active").removeClass("active");
|
||||
$(this).addClass("active");
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
/* ----------------------------------
|
||||
* - Initialize the AdminLTE Object -
|
||||
* ----------------------------------
|
||||
* All AdminLTE functions are implemented below.
|
||||
*/
|
||||
function _init() {
|
||||
'use strict';
|
||||
/* Layout
|
||||
* ======
|
||||
* Fixes the layout height in case min-height fails.
|
||||
*
|
||||
* @type Object
|
||||
* @usage $.AdminLTE.layout.activate()
|
||||
* $.AdminLTE.layout.fix()
|
||||
* $.AdminLTE.layout.fixSidebar()
|
||||
*/
|
||||
$.AdminLTE.layout = {
|
||||
activate: function () {
|
||||
var _this = this;
|
||||
_this.fix();
|
||||
_this.fixSidebar();
|
||||
$('body, html, .wrapper').css('height', 'auto');
|
||||
$(window, ".wrapper").resize(function () {
|
||||
_this.fix();
|
||||
_this.fixSidebar();
|
||||
});
|
||||
},
|
||||
fix: function () {
|
||||
// Remove overflow from .wrapper if layout-boxed exists
|
||||
$(".layout-boxed > .wrapper").css('overflow', 'hidden');
|
||||
//Get window height and the wrapper height
|
||||
var footer_height = $('.main-footer').outerHeight() || 0;
|
||||
var neg = $('.main-header').outerHeight() + footer_height;
|
||||
var window_height = $(window).height();
|
||||
var sidebar_height = $(".sidebar").height() || 0;
|
||||
//Set the min-height of the content and sidebar based on the
|
||||
//the height of the document.
|
||||
if ($("body").hasClass("fixed")) {
|
||||
$(".content-wrapper, .right-side").css('min-height', window_height - footer_height);
|
||||
} else {
|
||||
var postSetWidth;
|
||||
if (window_height >= sidebar_height) {
|
||||
$(".content-wrapper, .right-side").css('min-height', window_height - neg);
|
||||
postSetWidth = window_height - neg;
|
||||
} else {
|
||||
$(".content-wrapper, .right-side").css('min-height', sidebar_height);
|
||||
postSetWidth = sidebar_height;
|
||||
}
|
||||
|
||||
//Fix for the control sidebar height
|
||||
var controlSidebar = $($.AdminLTE.options.controlSidebarOptions.selector);
|
||||
if (typeof controlSidebar !== "undefined") {
|
||||
if (controlSidebar.height() > postSetWidth)
|
||||
$(".content-wrapper, .right-side").css('min-height', controlSidebar.height());
|
||||
}
|
||||
|
||||
}
|
||||
},
|
||||
fixSidebar: function () {
|
||||
//Make sure the body tag has the .fixed class
|
||||
if (!$("body").hasClass("fixed")) {
|
||||
if (typeof $.fn.slimScroll != 'undefined') {
|
||||
$(".sidebar").slimScroll({destroy: true}).height("auto");
|
||||
}
|
||||
return;
|
||||
} else if (typeof $.fn.slimScroll == 'undefined' && window.console) {
|
||||
window.console.error("Error: the fixed layout requires the slimscroll plugin!");
|
||||
}
|
||||
//Enable slimscroll for fixed layout
|
||||
if ($.AdminLTE.options.sidebarSlimScroll) {
|
||||
if (typeof $.fn.slimScroll != 'undefined') {
|
||||
//Destroy if it exists
|
||||
$(".sidebar").slimScroll({destroy: true}).height("auto");
|
||||
//Add slimscroll
|
||||
$(".sidebar").slimScroll({
|
||||
height: ($(window).height() - $(".main-header").height()) + "px",
|
||||
color: "rgba(0,0,0,0.2)",
|
||||
size: "3px"
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/* PushMenu()
|
||||
* ==========
|
||||
* Adds the push menu functionality to the sidebar.
|
||||
*
|
||||
* @type Function
|
||||
* @usage: $.AdminLTE.pushMenu("[data-toggle='offcanvas']")
|
||||
*/
|
||||
$.AdminLTE.pushMenu = {
|
||||
activate: function (toggleBtn) {
|
||||
//Get the screen sizes
|
||||
var screenSizes = $.AdminLTE.options.screenSizes;
|
||||
|
||||
//Enable sidebar toggle
|
||||
$(document).on('click', toggleBtn, function (e) {
|
||||
e.preventDefault();
|
||||
|
||||
//Enable sidebar push menu
|
||||
if ($(window).width() > (screenSizes.sm - 1)) {
|
||||
if ($("body").hasClass('sidebar-collapse')) {
|
||||
$("body").removeClass('sidebar-collapse').trigger('expanded.pushMenu');
|
||||
} else {
|
||||
$("body").addClass('sidebar-collapse').trigger('collapsed.pushMenu');
|
||||
}
|
||||
}
|
||||
//Handle sidebar push menu for small screens
|
||||
else {
|
||||
if ($("body").hasClass('sidebar-open')) {
|
||||
$("body").removeClass('sidebar-open').removeClass('sidebar-collapse').trigger('collapsed.pushMenu');
|
||||
} else {
|
||||
$("body").addClass('sidebar-open').trigger('expanded.pushMenu');
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$(".content-wrapper").click(function () {
|
||||
//Enable hide menu when clicking on the content-wrapper on small screens
|
||||
if ($(window).width() <= (screenSizes.sm - 1) && $("body").hasClass("sidebar-open")) {
|
||||
$("body").removeClass('sidebar-open');
|
||||
}
|
||||
});
|
||||
|
||||
//Enable expand on hover for sidebar mini
|
||||
if ($.AdminLTE.options.sidebarExpandOnHover
|
||||
|| ($('body').hasClass('fixed')
|
||||
&& $('body').hasClass('sidebar-mini'))) {
|
||||
this.expandOnHover();
|
||||
}
|
||||
},
|
||||
expandOnHover: function () {
|
||||
var _this = this;
|
||||
var screenWidth = $.AdminLTE.options.screenSizes.sm - 1;
|
||||
//Expand sidebar on hover
|
||||
$('.main-sidebar').hover(function () {
|
||||
if ($('body').hasClass('sidebar-mini')
|
||||
&& $("body").hasClass('sidebar-collapse')
|
||||
&& $(window).width() > screenWidth) {
|
||||
_this.expand();
|
||||
}
|
||||
}, function () {
|
||||
if ($('body').hasClass('sidebar-mini')
|
||||
&& $('body').hasClass('sidebar-expanded-on-hover')
|
||||
&& $(window).width() > screenWidth) {
|
||||
_this.collapse();
|
||||
}
|
||||
});
|
||||
},
|
||||
expand: function () {
|
||||
$("body").removeClass('sidebar-collapse').addClass('sidebar-expanded-on-hover');
|
||||
},
|
||||
collapse: function () {
|
||||
if ($('body').hasClass('sidebar-expanded-on-hover')) {
|
||||
$('body').removeClass('sidebar-expanded-on-hover').addClass('sidebar-collapse');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/* Tree()
|
||||
* ======
|
||||
* Converts the sidebar into a multilevel
|
||||
* tree view menu.
|
||||
*
|
||||
* @type Function
|
||||
* @Usage: $.AdminLTE.tree('.sidebar')
|
||||
*/
|
||||
$.AdminLTE.tree = function (menu) {
|
||||
var _this = this;
|
||||
var animationSpeed = $.AdminLTE.options.animationSpeed;
|
||||
$(document).off('click', menu + ' li a')
|
||||
.on('click', menu + ' li a', function (e) {
|
||||
//Get the clicked link and the next element
|
||||
var $this = $(this);
|
||||
var checkElement = $this.next();
|
||||
|
||||
//Check if the next element is a menu and is visible
|
||||
if ((checkElement.is('.treeview-menu')) && (checkElement.is(':visible')) && (!$('body').hasClass('sidebar-collapse'))) {
|
||||
//Close the menu
|
||||
checkElement.slideUp(animationSpeed, function () {
|
||||
checkElement.removeClass('menu-open');
|
||||
//Fix the layout in case the sidebar stretches over the height of the window
|
||||
//_this.layout.fix();
|
||||
});
|
||||
checkElement.parent("li").removeClass("active");
|
||||
}
|
||||
//If the menu is not visible
|
||||
else if ((checkElement.is('.treeview-menu')) && (!checkElement.is(':visible'))) {
|
||||
//Get the parent menu
|
||||
var parent = $this.parents('ul').first();
|
||||
//Close all open menus within the parent
|
||||
var ul = parent.find('ul:visible').slideUp(animationSpeed);
|
||||
//Remove the menu-open class from the parent
|
||||
ul.removeClass('menu-open');
|
||||
//Get the parent li
|
||||
var parent_li = $this.parent("li");
|
||||
|
||||
//Open the target menu and add the menu-open class
|
||||
checkElement.slideDown(animationSpeed, function () {
|
||||
//Add the class active to the parent li
|
||||
checkElement.addClass('menu-open');
|
||||
parent.find('li.active').removeClass('active');
|
||||
parent_li.addClass('active');
|
||||
//Fix the layout in case the sidebar stretches over the height of the window
|
||||
_this.layout.fix();
|
||||
});
|
||||
}
|
||||
//if this isn't a link, prevent the page from being redirected
|
||||
if (checkElement.is('.treeview-menu')) {
|
||||
e.preventDefault();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
/* ControlSidebar
|
||||
* ==============
|
||||
* Adds functionality to the right sidebar
|
||||
*
|
||||
* @type Object
|
||||
* @usage $.AdminLTE.controlSidebar.activate(options)
|
||||
*/
|
||||
$.AdminLTE.controlSidebar = {
|
||||
//instantiate the object
|
||||
activate: function () {
|
||||
//Get the object
|
||||
var _this = this;
|
||||
//Update options
|
||||
var o = $.AdminLTE.options.controlSidebarOptions;
|
||||
//Get the sidebar
|
||||
var sidebar = $(o.selector);
|
||||
//The toggle button
|
||||
var btn = $(o.toggleBtnSelector);
|
||||
|
||||
//Listen to the click event
|
||||
btn.on('click', function (e) {
|
||||
e.preventDefault();
|
||||
//If the sidebar is not open
|
||||
if (!sidebar.hasClass('control-sidebar-open')
|
||||
&& !$('body').hasClass('control-sidebar-open')) {
|
||||
//Open the sidebar
|
||||
_this.open(sidebar, o.slide);
|
||||
} else {
|
||||
_this.close(sidebar, o.slide);
|
||||
}
|
||||
});
|
||||
|
||||
//If the body has a boxed layout, fix the sidebar bg position
|
||||
var bg = $(".control-sidebar-bg");
|
||||
_this._fix(bg);
|
||||
|
||||
//If the body has a fixed layout, make the control sidebar fixed
|
||||
if ($('body').hasClass('fixed')) {
|
||||
_this._fixForFixed(sidebar);
|
||||
} else {
|
||||
//If the content height is less than the sidebar's height, force max height
|
||||
if ($('.content-wrapper, .right-side').height() < sidebar.height()) {
|
||||
_this._fixForContent(sidebar);
|
||||
}
|
||||
}
|
||||
},
|
||||
//Open the control sidebar
|
||||
open: function (sidebar, slide) {
|
||||
//Slide over content
|
||||
if (slide) {
|
||||
sidebar.addClass('control-sidebar-open');
|
||||
} else {
|
||||
//Push the content by adding the open class to the body instead
|
||||
//of the sidebar itself
|
||||
$('body').addClass('control-sidebar-open');
|
||||
}
|
||||
},
|
||||
//Close the control sidebar
|
||||
close: function (sidebar, slide) {
|
||||
if (slide) {
|
||||
sidebar.removeClass('control-sidebar-open');
|
||||
} else {
|
||||
$('body').removeClass('control-sidebar-open');
|
||||
}
|
||||
},
|
||||
_fix: function (sidebar) {
|
||||
var _this = this;
|
||||
if ($("body").hasClass('layout-boxed')) {
|
||||
sidebar.css('position', 'absolute');
|
||||
sidebar.height($(".wrapper").height());
|
||||
if (_this.hasBindedResize) {
|
||||
return;
|
||||
}
|
||||
$(window).resize(function () {
|
||||
_this._fix(sidebar);
|
||||
});
|
||||
_this.hasBindedResize = true;
|
||||
} else {
|
||||
sidebar.css({
|
||||
'position': 'fixed',
|
||||
'height': 'auto'
|
||||
});
|
||||
}
|
||||
},
|
||||
_fixForFixed: function (sidebar) {
|
||||
sidebar.css({
|
||||
'position': 'fixed',
|
||||
'max-height': '100%',
|
||||
'overflow': 'auto',
|
||||
'padding-bottom': '50px'
|
||||
});
|
||||
},
|
||||
_fixForContent: function (sidebar) {
|
||||
$(".content-wrapper, .right-side").css('min-height', sidebar.height());
|
||||
}
|
||||
};
|
||||
|
||||
/* BoxWidget
|
||||
* =========
|
||||
* BoxWidget is a plugin to handle collapsing and
|
||||
* removing boxes from the screen.
|
||||
*
|
||||
* @type Object
|
||||
* @usage $.AdminLTE.boxWidget.activate()
|
||||
* Set all your options in the main $.AdminLTE.options object
|
||||
*/
|
||||
$.AdminLTE.boxWidget = {
|
||||
selectors: $.AdminLTE.options.boxWidgetOptions.boxWidgetSelectors,
|
||||
icons: $.AdminLTE.options.boxWidgetOptions.boxWidgetIcons,
|
||||
animationSpeed: $.AdminLTE.options.animationSpeed,
|
||||
activate: function (_box) {
|
||||
var _this = this;
|
||||
if (!_box) {
|
||||
_box = document; // activate all boxes per default
|
||||
}
|
||||
//Listen for collapse event triggers
|
||||
$(_box).on('click', _this.selectors.collapse, function (e) {
|
||||
e.preventDefault();
|
||||
_this.collapse($(this));
|
||||
});
|
||||
|
||||
//Listen for remove event triggers
|
||||
$(_box).on('click', _this.selectors.remove, function (e) {
|
||||
e.preventDefault();
|
||||
_this.remove($(this));
|
||||
});
|
||||
},
|
||||
collapse: function (element) {
|
||||
var _this = this;
|
||||
//Find the box parent
|
||||
var box = element.parents(".box").first();
|
||||
//Find the body and the footer
|
||||
var box_content = box.find("> .box-body, > .box-footer, > form >.box-body, > form > .box-footer");
|
||||
if (!box.hasClass("collapsed-box")) {
|
||||
//Convert minus into plus
|
||||
element.children(":first")
|
||||
.removeClass(_this.icons.collapse)
|
||||
.addClass(_this.icons.open);
|
||||
//Hide the content
|
||||
box_content.slideUp(_this.animationSpeed, function () {
|
||||
box.addClass("collapsed-box");
|
||||
});
|
||||
} else {
|
||||
//Convert plus into minus
|
||||
element.children(":first")
|
||||
.removeClass(_this.icons.open)
|
||||
.addClass(_this.icons.collapse);
|
||||
//Show the content
|
||||
box_content.slideDown(_this.animationSpeed, function () {
|
||||
box.removeClass("collapsed-box");
|
||||
});
|
||||
}
|
||||
},
|
||||
remove: function (element) {
|
||||
//Find the box parent
|
||||
var box = element.parents(".box").first();
|
||||
box.slideUp(this.animationSpeed);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/* ------------------
|
||||
* - Custom Plugins -
|
||||
* ------------------
|
||||
* All custom plugins are defined below.
|
||||
*/
|
||||
|
||||
/*
|
||||
* BOX REFRESH BUTTON
|
||||
* ------------------
|
||||
* This is a custom plugin to use with the component BOX. It allows you to add
|
||||
* a refresh button to the box. It converts the box's state to a loading state.
|
||||
*
|
||||
* @type plugin
|
||||
* @usage $("#box-widget").boxRefresh( options );
|
||||
*/
|
||||
(function ($) {
|
||||
|
||||
"use strict";
|
||||
|
||||
$.fn.boxRefresh = function (options) {
|
||||
|
||||
// Render options
|
||||
var settings = $.extend({
|
||||
//Refresh button selector
|
||||
trigger: ".refresh-btn",
|
||||
//File source to be loaded (e.g: ajax/src.php)
|
||||
source: "",
|
||||
//Callbacks
|
||||
onLoadStart: function (box) {
|
||||
return box;
|
||||
}, //Right after the button has been clicked
|
||||
onLoadDone: function (box) {
|
||||
return box;
|
||||
} //When the source has been loaded
|
||||
|
||||
}, options);
|
||||
|
||||
//The overlay
|
||||
var overlay = $('<div class="overlay"><div class="fa fa-refresh fa-spin"></div></div>');
|
||||
|
||||
return this.each(function () {
|
||||
//if a source is specified
|
||||
if (settings.source === "") {
|
||||
if (window.console) {
|
||||
window.console.log("Please specify a source first - boxRefresh()");
|
||||
}
|
||||
return;
|
||||
}
|
||||
//the box
|
||||
var box = $(this);
|
||||
//the button
|
||||
var rBtn = box.find(settings.trigger).first();
|
||||
|
||||
//On trigger click
|
||||
rBtn.on('click', function (e) {
|
||||
e.preventDefault();
|
||||
//Add loading overlay
|
||||
start(box);
|
||||
|
||||
//Perform ajax call
|
||||
box.find(".box-body").load(settings.source, function () {
|
||||
done(box);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
function start(box) {
|
||||
//Add overlay and loading img
|
||||
box.append(overlay);
|
||||
|
||||
settings.onLoadStart.call(box);
|
||||
}
|
||||
|
||||
function done(box) {
|
||||
//Remove overlay and loading img
|
||||
box.find(overlay).remove();
|
||||
|
||||
settings.onLoadDone.call(box);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
})(jQuery);
|
||||
|
||||
/*
|
||||
* EXPLICIT BOX CONTROLS
|
||||
* -----------------------
|
||||
* This is a custom plugin to use with the component BOX. It allows you to activate
|
||||
* a box inserted in the DOM after the app.js was loaded, toggle and remove box.
|
||||
*
|
||||
* @type plugin
|
||||
* @usage $("#box-widget").activateBox();
|
||||
* @usage $("#box-widget").toggleBox();
|
||||
* @usage $("#box-widget").removeBox();
|
||||
*/
|
||||
(function ($) {
|
||||
|
||||
'use strict';
|
||||
|
||||
$.fn.activateBox = function () {
|
||||
$.AdminLTE.boxWidget.activate(this);
|
||||
};
|
||||
|
||||
$.fn.toggleBox = function () {
|
||||
var button = $($.AdminLTE.boxWidget.selectors.collapse, this);
|
||||
$.AdminLTE.boxWidget.collapse(button);
|
||||
};
|
||||
|
||||
$.fn.removeBox = function () {
|
||||
var button = $($.AdminLTE.boxWidget.selectors.remove, this);
|
||||
$.AdminLTE.boxWidget.remove(button);
|
||||
};
|
||||
|
||||
})(jQuery);
|
||||
|
||||
/*
|
||||
* TODO LIST CUSTOM PLUGIN
|
||||
* -----------------------
|
||||
* This plugin depends on iCheck plugin for checkbox and radio inputs
|
||||
*
|
||||
* @type plugin
|
||||
* @usage $("#todo-widget").todolist( options );
|
||||
*/
|
||||
(function ($) {
|
||||
|
||||
'use strict';
|
||||
|
||||
$.fn.todolist = function (options) {
|
||||
// Render options
|
||||
var settings = $.extend({
|
||||
//When the user checks the input
|
||||
onCheck: function (ele) {
|
||||
return ele;
|
||||
},
|
||||
//When the user unchecks the input
|
||||
onUncheck: function (ele) {
|
||||
return ele;
|
||||
}
|
||||
}, options);
|
||||
|
||||
return this.each(function () {
|
||||
|
||||
if (typeof $.fn.iCheck != 'undefined') {
|
||||
$('input', this).on('ifChecked', function () {
|
||||
var ele = $(this).parents("li").first();
|
||||
ele.toggleClass("done");
|
||||
settings.onCheck.call(ele);
|
||||
});
|
||||
|
||||
$('input', this).on('ifUnchecked', function () {
|
||||
var ele = $(this).parents("li").first();
|
||||
ele.toggleClass("done");
|
||||
settings.onUncheck.call(ele);
|
||||
});
|
||||
} else {
|
||||
$('input', this).on('change', function () {
|
||||
var ele = $(this).parents("li").first();
|
||||
ele.toggleClass("done");
|
||||
if ($('input', ele).is(":checked")) {
|
||||
settings.onCheck.call(ele);
|
||||
} else {
|
||||
settings.onUncheck.call(ele);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
}(jQuery));
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,115 @@
|
||||
/**
|
||||
* 图标常量
|
||||
*/
|
||||
var iconConstants = {
|
||||
INFO: 'INFO',
|
||||
SUCCESS: 'SUCCESS',//有确定按钮,不会自动关闭
|
||||
WARNING: 'WARN',
|
||||
ERROR: 'ERROR',
|
||||
QUESTION: 'QUESTION',
|
||||
SUCCESSAUTO: 'SUCCESSAUTO',//自动关闭
|
||||
INFOAUTO: 'INFOAUTO',
|
||||
WARNINGAUTO: 'WARNAUTO',
|
||||
ERRORAUTO: 'ERRORAUTO'
|
||||
};
|
||||
|
||||
var showAlert = function (msg, icon, dangerouslyUseHTMLString) {
|
||||
return showAlertCommon.call(this, {
|
||||
msg: msg,
|
||||
icon: icon,
|
||||
dangerouslyUseHTMLString: dangerouslyUseHTMLString,
|
||||
showClose: true
|
||||
});
|
||||
};
|
||||
|
||||
var showAlertCommon = function (params) {
|
||||
var _self = this;
|
||||
var type, msg = params.msg, icon = params.icon;
|
||||
var dangerouslyUseHTMLString = params.dangerouslyUseHTMLString || false;
|
||||
var showClose = params.showClose;
|
||||
|
||||
if (iconConstants.SUCCESSAUTO === icon) {
|
||||
type = "success";
|
||||
} else if (iconConstants.INFOAUTO === icon) {
|
||||
type = "info";
|
||||
} else if (iconConstants.WARNINGAUTO === icon) {
|
||||
type = "warning";
|
||||
} else if (iconConstants.ERRORAUTO === icon) {
|
||||
type = "error";
|
||||
} else if (iconConstants.ERROR === icon) {
|
||||
type = "error";
|
||||
} else if (iconConstants.WARNING === icon) {
|
||||
type = "warning";
|
||||
} else if (iconConstants.SUCCESS === icon) {
|
||||
type = "success";
|
||||
} else if (iconConstants.INFO === icon) {
|
||||
type = "info";
|
||||
}
|
||||
|
||||
if (icon.indexOf("AUTO") > 0) {
|
||||
//2秒后自动关闭
|
||||
return _self.$message({
|
||||
type: type,
|
||||
message: msg,
|
||||
duration: 1500//显示时间, 毫秒。设为 0 则不会自动关闭
|
||||
});
|
||||
} else {
|
||||
//不会自动关闭
|
||||
return _self.$message({
|
||||
showClose: showClose,
|
||||
dangerouslyUseHTMLString: dangerouslyUseHTMLString,
|
||||
message: msg,
|
||||
type: type,
|
||||
duration: 0
|
||||
})
|
||||
}
|
||||
};
|
||||
|
||||
var showAlertCanNotClose = function (msg, icon, dangerouslyUseHTMLString) {
|
||||
return showAlertCommon.call(this, {
|
||||
msg: msg,
|
||||
icon: icon,
|
||||
dangerouslyUseHTMLString: dangerouslyUseHTMLString,
|
||||
showClose: false
|
||||
});
|
||||
};
|
||||
|
||||
var showConfirm = function (msg, icon, confirmCallBack, cancelCallBack) {
|
||||
var _self = this;
|
||||
return _self.$confirm(msg, "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: 'warning',
|
||||
center: true
|
||||
}).then(function () {
|
||||
if (confirmCallBack) {
|
||||
confirmCallBack();
|
||||
} else {
|
||||
showAlert.call(_self, "操作成功!", iconConstants.SUCCESSAUTO);
|
||||
}
|
||||
}).catch(function () {
|
||||
cancelCallBack && cancelCallBack();
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 没有取消回调 返回 Promise
|
||||
* @param msg
|
||||
* @param icon
|
||||
* @param confirmCallBack
|
||||
*/
|
||||
var showConfirmNoCancelCallBack = function (msg, icon, confirmCallBack) {
|
||||
var _self = this;
|
||||
return _self.$confirm(msg, "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: 'warning',
|
||||
center: true
|
||||
}).then(function () {
|
||||
if (confirmCallBack) {
|
||||
confirmCallBack();
|
||||
} else {
|
||||
showAlert.call(_self, "操作成功!", iconConstants.SUCCESSAUTO);
|
||||
}
|
||||
});
|
||||
};
|
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue