|
@@ -0,0 +1,349 @@
|
|
|
+<!DOCTYPE html>
|
|
|
+<html lang="zh-CN" xmlns:th="http://www.thymeleaf.org"
|
|
|
+ xmlns:layout="http://www.ultraq.net.nz/web/thymeleaf/layout"
|
|
|
+ layout:decorator="main">
|
|
|
+<head>
|
|
|
+ <link rel="stylesheet" href="/static/css/applications.css" type="text/css"/>
|
|
|
+ <!-- dataTables -->
|
|
|
+ <link rel="stylesheet" type="text/css"
|
|
|
+ href="/static/AdminLTE/bower_components/datatables.net-bs/css/dataTables.bootstrap.min.css"/>
|
|
|
+ <!-- Font Awesome -->
|
|
|
+ <link rel="stylesheet" href="/static/AdminLTE/bower_components/font-awesome/css/font-awesome.min.css"/>
|
|
|
+ <!-- Ionicons -->
|
|
|
+ <link rel="stylesheet" href="/static/AdminLTE/bower_components/Ionicons/css/ionicons.min.css"/>
|
|
|
+ <!-- daterange picker -->
|
|
|
+ <link rel="stylesheet" href="/static/AdminLTE/bower_components/bootstrap-daterangepicker/daterangepicker.css"/>
|
|
|
+ <!-- bootstrap datepicker -->
|
|
|
+ <link rel="stylesheet" href="/static/AdminLTE/bower_components/bootstrap-datepicker/dist/css/bootstrap-datepicker.min.css"/>
|
|
|
+ <!-- iCheck for checkboxes and radio inputs -->
|
|
|
+ <link rel="stylesheet" href="/static/AdminLTE/plugins/iCheck/all.css"/>
|
|
|
+ <!-- Bootstrap time Picker -->
|
|
|
+ <link rel="stylesheet" href="/static/AdminLTE/plugins/timepicker/bootstrap-timepicker.min.css"/>
|
|
|
+ <!-- Select2 -->
|
|
|
+ <link rel="stylesheet" type="text/css" href="/static/AdminLTE/bower_components/select2/dist/css/select2.min.css"/>
|
|
|
+ <!-- Theme style -->
|
|
|
+ <link rel="stylesheet" href="/static/AdminLTE/dist/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="/static/AdminLTE/dist/css/skins/_all-skins.min.css"/>
|
|
|
+</head>
|
|
|
+<body>
|
|
|
+<th:block layout:fragment="sidebar">
|
|
|
+ <li th:replace="/home::mainSidebar">
|
|
|
+</th:block>
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+<th:block layout:fragment="maincontent">
|
|
|
+ <section class="content-header">
|
|
|
+ <ul id="myTab" class="nav nav-tabs">
|
|
|
+ <li class="active">
|
|
|
+ <a href="#otherReport" data-toggle="tab">导入第三方报告</a>
|
|
|
+ </li>
|
|
|
+ <li>
|
|
|
+ <a href="#selfReport" data-toggle="tab">导入本系统报告</a>
|
|
|
+ </li>
|
|
|
+ </ul>
|
|
|
+ <ol class="breadcrumb">
|
|
|
+ <li><a href="/home"><i class="fa fa-dashboard"></i> 主页</a></li>
|
|
|
+ <li><a href="/importTask">导入众测任务</a></li>
|
|
|
+ </ol>
|
|
|
+ </section>
|
|
|
+
|
|
|
+ <div id="myTabContent" class="tab-content">
|
|
|
+ <div class="content tab-pane fade in active" id="otherReport">
|
|
|
+ <row>
|
|
|
+ <div class = col-sm-6>
|
|
|
+ <div class="box box-primary" >
|
|
|
+ <div class="box-header with-border">
|
|
|
+ <h3 class="box-title">基本信息</h3>
|
|
|
+ <input class="btn btn-success pull-right" type="button" value="提交" id="submit_file" onmousemove="checkSubmit()" onclick="check_success()">
|
|
|
+
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="box-body" >
|
|
|
+ <form id="form" action="/add_excel_pro" class="form-horizontal" method="post" enctype="multipart/form-data">
|
|
|
+ <!-- text input -->
|
|
|
+
|
|
|
+ <div class="form-group">
|
|
|
+ <label class="col-sm-3 control-label">名称</label>
|
|
|
+ <div class="col-sm-9">
|
|
|
+ <input type="text" class="form-control" id="name" name="name" style="width: 35%" onblur="checkName()" />
|
|
|
+ <span name="name_span" style="color: #ff0000"></span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="form-group">
|
|
|
+ <label class="col-sm-3 control-label">文件来源</label>
|
|
|
+ <div class="col-sm-9">
|
|
|
+ <select id="come" class="form-control" style="width: 35%">
|
|
|
+ <option th:each="mapItem : ${type_map}"
|
|
|
+ th:value="${mapItem.key}" th:text="${mapItem.value}"></option>
|
|
|
+ </select>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="form-group">
|
|
|
+ <label class="col-sm-3 control-label">导入Bug文件</label>
|
|
|
+ <div class="col-sm-9">
|
|
|
+ <a href="http://crowdtest-data.oss-cn-hangzhou.aliyuncs.com/%E6%A8%A1%E6%9D%BF%E6%96%87%E4%BB%B6.xls">文件模板</a>
|
|
|
+ <input type="file" id="excel_file" name="excelFile" onchange="checkFile()" />
|
|
|
+ <span name="file_span" style="color: #ff0000"></span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+<!-- <span id="submit_span"></span>-->
|
|
|
+ </form>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </row>
|
|
|
+ </div>
|
|
|
+ <div class="content tab-pane fade " id="selfReport">
|
|
|
+ <row>
|
|
|
+ <div class = col-sm-6>
|
|
|
+ <div class="box box-primary" >
|
|
|
+ <div class="box-header with-border">
|
|
|
+ <h3 class="box-title">基本信息</h3>
|
|
|
+ <button class="btn btn-success pull-right" onclick="importTask()">
|
|
|
+ 导入
|
|
|
+ </button>
|
|
|
+ </div>
|
|
|
+ <!-- /.box-header -->
|
|
|
+ <div class="box-body">
|
|
|
+ <form class="form-horizontal">
|
|
|
+ <!-- text input -->
|
|
|
+ <div class="form-group">
|
|
|
+ <label class="col-sm-3 control-label">单位序列号</label>
|
|
|
+ <div class="col-sm-9">
|
|
|
+ <input onchange="checkNull(event)" class="form-control" id="number" placeholder="请输入单位名称"/>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <!-- text input -->
|
|
|
+ <div class="form-group">
|
|
|
+ <label class="col-sm-3 control-label">原始任务id</label>
|
|
|
+ <div class="col-sm-9">
|
|
|
+ <input onchange="checkNull(event)" class="form-control" id="originId" placeholder="请输入原始任务id"/>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+
|
|
|
+ <div class="form-group">
|
|
|
+ <label for="zipFile" class="col-sm-3 control-label">导入zip文件</label>
|
|
|
+ <div class="col-sm-9">
|
|
|
+ <input type="file" id="zipFile"/>
|
|
|
+ <!-- <p class="help-block">Example block-level help text here.</p>-->
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="form-group">
|
|
|
+ <label for="jsonFile" class="col-sm-3 control-label">导入json文件</label>
|
|
|
+ <div class="col-sm-9">
|
|
|
+ <input type="file" id="jsonFile"/>
|
|
|
+ <!-- <p class="help-block">Example block-level help text here.</p>-->
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </form>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </row>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+</th:block>
|
|
|
+</body>
|
|
|
+</html>
|
|
|
+<!-- jQuery 3 -->
|
|
|
+<!--<script src="/static/AdminLTE/bower_components/jquery/dist/jquery.min.js"></script>-->
|
|
|
+<!-- Bootstrap 3.3.7 -->
|
|
|
+<script src="/static/AdminLTE/bower_components/bootstrap/dist/js/bootstrap.min.js"></script>
|
|
|
+<!-- InputMask -->
|
|
|
+<script src="/static/AdminLTE/plugins/input-mask/jquery.inputmask.js"></script>
|
|
|
+<script src="/static/AdminLTE/plugins/input-mask/jquery.inputmask.date.extensions.js"></script>
|
|
|
+<script src="/static/AdminLTE/plugins/input-mask/jquery.inputmask.extensions.js"></script>
|
|
|
+<!-- date-range-picker -->
|
|
|
+<script src="/static/AdminLTE/bower_components/moment/min/moment.min.js"></script>
|
|
|
+<script src="/static/AdminLTE/bower_components/bootstrap-daterangepicker/daterangepicker.js"></script>
|
|
|
+<!-- bootstrap datepicker -->
|
|
|
+<script src="/static/AdminLTE/bower_components/bootstrap-datepicker/dist/js/bootstrap-datepicker.min.js"></script>
|
|
|
+<!-- bootstrap time picker -->
|
|
|
+<script src="/static/AdminLTE/plugins/timepicker/bootstrap-timepicker.min.js"></script>
|
|
|
+<!-- SlimScroll -->
|
|
|
+<script src="/static/AdminLTE/bower_components/jquery-slimscroll/jquery.slimscroll.min.js"></script>
|
|
|
+<!-- iCheck 1.0.1 -->
|
|
|
+<script src="/static/AdminLTE/plugins/iCheck/icheck.min.js"></script>
|
|
|
+<!-- FastClick -->
|
|
|
+<script src="/static/AdminLTE/bower_components/fastclick/lib/fastclick.js"></script>
|
|
|
+
|
|
|
+<script src="/static/AdminLTE/bower_components/bootstrap-notify/dist/bootstrap-notify.min.js"></script>
|
|
|
+<!--<script src="/static/js/app_info.js"></script>-->
|
|
|
+<script type="text/javascript">
|
|
|
+ $(document).ready(function(){
|
|
|
+ $('#crowdSidebar').addClass('active');
|
|
|
+ $('#crowdSidebarMenu-importData').addClass('active');
|
|
|
+ });
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ importTask = function(){
|
|
|
+ var data = new FormData();
|
|
|
+ data.append('number',$('#number').val());
|
|
|
+ data.append('originId',$('#originId').val());
|
|
|
+ data.append("zipFile",document.getElementById('zipFile').files[0])
|
|
|
+ data.append("jsonFile",document.getElementById('jsonFile').files[0])
|
|
|
+ $.ajax({
|
|
|
+ url: '/importTask',
|
|
|
+ data:data,
|
|
|
+ type: 'POST',
|
|
|
+ processData: false,
|
|
|
+ contentType: false,
|
|
|
+ success: function (result) {
|
|
|
+
|
|
|
+ if(result != 'success'){
|
|
|
+ $.notify({
|
|
|
+ message: result
|
|
|
+ },{
|
|
|
+ // settings
|
|
|
+ delay: 100,
|
|
|
+ timer: 1000,
|
|
|
+ type: 'error'
|
|
|
+ });
|
|
|
+ }else {
|
|
|
+ $.notify({
|
|
|
+ message: '导入成功'
|
|
|
+ },{
|
|
|
+ // settings
|
|
|
+ delay: 100,
|
|
|
+ timer: 3000,
|
|
|
+ type: 'success'
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ checkNull = function (event) {
|
|
|
+ var num = event.target.value;
|
|
|
+ console.log(num)
|
|
|
+ if(num!=null&&num.length!=0){
|
|
|
+ console.log(event.target.parentElement.parentElement)
|
|
|
+ event.target.parentElement.parentElement.setAttribute("class","form-group has-success")
|
|
|
+ if(event.target.nextSibling!=null){
|
|
|
+ event.target.nextSibling.remove();
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ var newNode = document.createElement("span");
|
|
|
+ newNode.setAttribute("class","help-block")
|
|
|
+ newNode.innerHTML =" 请填写 ";
|
|
|
+ if(event.target.nextSibling==null){
|
|
|
+ event.target.parentNode.insertBefore(newNode,event.target.nextSibling)
|
|
|
+ }
|
|
|
+ event.target.parentElement.parentElement.setAttribute("class","form-group has-error")
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ function checkFile() {
|
|
|
+ var fileName = document.getElementsByName("excelFile")[0].value;
|
|
|
+ console.info(fileName)
|
|
|
+ var index = fileName.lastIndexOf(".");
|
|
|
+ var file_type = fileName.substr(index+1);
|
|
|
+ var file_span = document.getElementsByName("file_span")[0];
|
|
|
+
|
|
|
+ var file = document.getElementById("excel_file").files[0];
|
|
|
+ var file_size=file.size;//文件的字节数
|
|
|
+
|
|
|
+
|
|
|
+ if(file_type != "xls" && file_type != "xlsx" && file_type != "csv"){
|
|
|
+ file_span.innerText="文件类型错误,请导入excel文件";
|
|
|
+ file_flag = false;
|
|
|
+ }else {
|
|
|
+ file_span.innerText="";
|
|
|
+ if(file_size > 1048576){
|
|
|
+ file_span.innerText="文件大小超过1M,请上传小于1M文件";
|
|
|
+ file_flag = false;
|
|
|
+ }else {
|
|
|
+ file_span.innerText="";
|
|
|
+ file_flag = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ checkSubmit();
|
|
|
+ }
|
|
|
+
|
|
|
+ function checkSubmit() {
|
|
|
+ var submit_button = document.getElementById("submit_file");
|
|
|
+ if(name_flag && file_flag){
|
|
|
+ submit_button.removeAttribute("disabled");
|
|
|
+ }else{
|
|
|
+ submit_button.setAttribute("disabled", true);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ function checkName() {
|
|
|
+ var name = document.getElementsByName("name")[0].value;
|
|
|
+ var name_span = document.getElementsByName("name_span")[0];
|
|
|
+ if(name == null || name == "" || name.trim().length == 0){
|
|
|
+ name_span.innerText= "输入字段不能为空";
|
|
|
+ name_flag = false;
|
|
|
+ }else{
|
|
|
+ name_span.innerText= "";
|
|
|
+ name_flag = true;
|
|
|
+ }
|
|
|
+ checkSubmit();
|
|
|
+ }
|
|
|
+
|
|
|
+ function check_success(){
|
|
|
+ var params = new FormData();
|
|
|
+ params.append("name",$("#name").val())
|
|
|
+ params.append("excelFile",document.getElementById('excel_file').files[0])
|
|
|
+ params.append("come",$("#come").val());
|
|
|
+ $.ajax({
|
|
|
+ type:"post",
|
|
|
+ url:"/add_excel_pro",
|
|
|
+ processData: false,
|
|
|
+ contentType: false,
|
|
|
+ data:params,
|
|
|
+ dataType:'json',
|
|
|
+ success:function(result){
|
|
|
+ console.info(result);
|
|
|
+ if(result["file_is_null"] == false && result["insert_success"] == true){
|
|
|
+ $.notify({
|
|
|
+ message: '导入成功'
|
|
|
+ },{
|
|
|
+ // settings
|
|
|
+ delay: 100,
|
|
|
+ timer: 1000,
|
|
|
+ type: 'success'
|
|
|
+ });
|
|
|
+ }else{
|
|
|
+ $.notify({
|
|
|
+ message: '导入失败,请按文件模板样式导入文件'
|
|
|
+ },{
|
|
|
+ // settings
|
|
|
+ delay: 100,
|
|
|
+ timer: 1000,
|
|
|
+ type: 'danger'
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ },
|
|
|
+ error:function(data){
|
|
|
+ $.notify({
|
|
|
+ message: '网络错误'
|
|
|
+ },{
|
|
|
+ // settings
|
|
|
+ delay: 100,
|
|
|
+ timer: 1000,
|
|
|
+ type: 'warning'
|
|
|
+ });
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+</script>
|