You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
excel_handle/app/view/task/index.html

446 lines
23 KiB

{extend name="public/layout" /}
{block name="header"}
{/block}
{block name="body"}
<div class="layui-card">
<div class="layui-card-header layui-card-header-auto layui-form">
<div id="task-model-add" class="layui-form">
<div class="layui-form-item active">
<label class="layui-form-label" style="width: 140px;">任务类型</label>
<div class="layui-input-block">
<input type="radio" lay-filter="task_type" name="task_type" value="1" title="导入处理" checked>
<input type="radio" lay-filter="task_type" name="task_type" value="2" title="导出处理">
<input type="radio" lay-filter="task_type" name="task_type" value="3" title="重复电话处理">
<input type="radio" lay-filter="task_type" name="task_type" value="4" title="重复车架处理">
<input type="radio" lay-filter="task_type" name="task_type" value="5" title="更新数据">
</div>
</div>
<div class="layui-form-item task-param active" id="task-import">
<label class="layui-form-label" style="width: 140px;">上传文件</label>
<div class="layui-input-inline" style="width: 405px;">
<input type="text" name="original_filename" id="original_filename" class="layui-input" readonly>
<input type="hidden" name="filename" id="filename" autocomplete="off" class="layui-input">
</div>
<div class="layui-input-inline" style="width: 200px;">
<button type="button" class="layui-btn" id="upload">
<i class="layui-icon">&#xe67c;</i>上传CSV文件
</button>
</div>
<a href="/static/tpl.xlsx" download="车辆信息导入模板.xlsx" style="color: #009688;">[下载车辆信息导入模板]</a>
</div>
<div class="task-param" id="task-export" style="display: none;">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label" style="width: 140px;">初登日期</label>
<div class="layui-input-inline" style="width: 200px;">
<input type="text" name="export_date1" class="layui-input export-date1">
</div>
<div class="layui-form-mid">-</div>
<div class="layui-input-inline" style="width: 200px;">
<input type="text" name="export_date2" class="layui-input export-date2">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label" style="width: 140px;">保险日期</label>
<div class="layui-input-inline">
<input type="text" name="insurer_month1" class="layui-input" style="display: inline-block; width: 60px;">
<input type="text" name="insurer_day1" class="layui-input" style="display: inline-block; width: 60px;">
</div>
<div class="layui-form-mid">-</div>
<div class="layui-input-inline">
<input type="text" name="insurer_month2" class="layui-input" style="display: inline-block; width: 60px;">
<input type="text" name="insurer_day2" class="layui-input" style="display: inline-block; width: 60px;">
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label" style="width: 140px;">导出类型</label>
<div class="layui-input-inline" style="width: 520px;">
<input type="radio" lay-filter="export_type" name="export_type" value="bhx" class="layui-input" title="清洗" checked>
<input type="radio" lay-filter="export_type" name="export_type" value="failed" class="layui-input" title="清洗失败">
<input type="radio" lay-filter="export_type" name="export_type" value="bmc" class="layui-input" title="清洗成功至上传">
<input type="radio" lay-filter="export_type" name="export_type" value="success_bmc" class="layui-input" title="清洗成功再次清洗">
<!-- <input type="radio" lay-filter="export_type" name="export_type" value="failed_bmc" class="layui-input" title="导出清洗失败至上传">
<input type="radio" lay-filter="export_type" name="export_type" value="none_bmc" class="layui-input" title="导出未处理至上传">
-->
</div>
</div>
<div class="layui-inline" id="update_no" style="display: none;">
<label class="layui-form-label" style="width: 60px;">更新序号</label>
<div class="layui-input-inline" style="width: 210px;">
<input type="text" name="update_no" class="layui-input" value="">
</div>
</div>
<div class="layui-inline" id="sub_export_type">
<label class="layui-form-label" style="width: 60px;padding: 15px 15px 0 0;">导出字段</label>
<div class="layui-input-inline" style="width: 185px;">
<input type="checkbox" name="export_field[]" lay-filter="export_field" value="car_no" title="车牌">
<input type="checkbox" name="export_field[]" lay-filter="export_field" value="car_frame_no" title="车架" checked>
</div>
<label class="layui-form-label" style="width: 60px;padding: 15px 15px 0 0;">保险日期</label>
<div class="layui-inline">
<div class="layui-input-inline" style="width:auto;">
<input type="text" name="insurer_date1" class="layui-input export-date1" style="display: inline-block; width: 90px;">
</div>
<div class="layui-form-mid">-</div>
<div class="layui-input-inline" style="width:auto;">
<input type="text" name="insurer_date2" class="layui-input export-date2" style="display: inline-block; width: 90px;">
</div>
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label" style="width: 140px;">导出数量</label>
<div class="layui-input-inline">
<input type="text" name="export_limit" class="layui-input">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label" style="width: 100px;">导出文件名</label>
<div class="layui-input-inline" style="width: 450px;">
<input type="text" name="queue" id="queue-name" class="layui-input" style="display:inline-block; width: 325px;">
<button type="button" class="layui-btn" onclick="getExportName(event)">生成文件名</button>
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">导出总计:</label>
<div class="layui-input-inline" style="width: 120px;">
<input type="text" name="num" id="count" class="layui-input" disabled>
</div>
<div class="layui-input-inline">
<button type="button" class="layui-btn" onclick="export_num(event)">获取总数</button>
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label" style="width: 140px;">新车购置价</label>
<div class="layui-input-inline" style="width: auto;">
<input type="text" name="price1" class="layui-input" style="display: inline-block; width: 60px;">
</div>
<div class="layui-form-mid">-</div>
<div class="layui-input-inline" style="width: auto;">
<input type="text" name="price2" class="layui-input" style="display: inline-block; width: 60px;">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label" style="width: 140px;">空电话检测</label>
<div class="layui-input-inline" style="width: 80px;">
<input type="checkbox" name="empty_phone_check" lay-skin="switch" lay-filter="empty_phone_check" value="yes" lay-text="开启|关闭" checked>
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label" style="width: 140px;">是否EXCEL</label>
<div class="layui-input-inline" style="width: 80px;">
<input type="checkbox" name="is_excel" lay-skin="switch" value="yes" lay-text="开启|关闭" checked>
</div>
</div>
</div>
</div>
<div class="task-param" id="task-peer-phone" style="display: none;">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label" style="width: 140px;">个人电话重复次数</label>
<div class="layui-input-inline">
<input type="number" name="peer_phone_number" required lay-verify="required" class="layui-input">
</div>
</div>
</div>
</div>
<div class="task-param" id="task-repeat_frame" style="display: none;">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label" style="width: 140px;">初登日期</label>
<div class="layui-input-inline" style="width: 200px;">
<input type="text" name="export_date1" class="layui-input export-date1">
</div>
<div class="layui-form-mid">-</div>
<div class="layui-input-inline" style="width: 200px;">
<input type="text" name="export_date2" class="layui-input export-date2">
</div>
</div>
</div>
</div>
</div>
<div class="layui-form-item" style="margin:24px 0 -15px;">
<div class="layui-inline" style="float: left;position: relative;z-index: 999;">
<label class="layui-form-label" style="width: 65px;"></label>
<div class="layui-input-inline" style="width: 405px">
<input type="text" name="queue" id="queue" class="layui-input">
</div>
<div class="layui-input-inline" style="">
<button type="button" class="layui-btn" onclick="search(event)">查询</button>
</div>
</div>
<div class="layui-input-block layui-text-right">
<button type="button" class="layui-btn" onclick="task_add()">立即提交</button>
</div>
</div>
</div>
<div class="layui-card-body layui-form">
<table class="layui-hide" id="task-info" lay-filter="task-info"></table>
</div>
</div>
{/block}
{block name="script"}
<!--Core Javascript -->
<script type="text/html" id="table-bar">
{{#
var payload = JSON.parse(d.payload);
var export_date1 = payload['data']['params']['export_date1'];
var export_date2 = payload['data']['params']['export_date2'];
var ext = d.remark.split('.')[1];
}}
{{# if(d.type == 2){ }}
{{# if(payload['data']['params']['export_limit'] > 0){ }}
{{#
var arrParam = [];
var exportUrlParam = '';
exportUrlParam += 'export_date1=' + export_date1 + '&';
exportUrlParam += 'export_date2=' + export_date2 + '&';
exportUrlParam += 'insurer_month1=' + payload['data']['params']['insurer_month1'] + '&';
exportUrlParam += 'insurer_day1=' + payload['data']['params']['insurer_day1'] + '&';
exportUrlParam += 'insurer_month2=' + payload['data']['params']['insurer_month2'] + '&';
exportUrlParam += 'insurer_day2=' + payload['data']['params']['insurer_day2'] + '&';
exportUrlParam += 'is_export_' + payload['data']['params']['export_type'] + '=' + d.id;
}}
<a class="layui-btn layui-btn-xs" href="/index/index.html?{{exportUrlParam}}">查看</a>
{{# } }}
{{# if(d.download_times > 0){ }}
<buton class="layui-btn layui-btn-xs" onclick="layer.confirm('已下载过,是否继续',function(index){layer.close(index);window.open('{:url(\'task/download\')}?id={{d.id}}');window.location.reload();});">下载文件</buton>
{{# }else { }}
<buton class="layui-btn layui-btn-xs" onclick="window.open('{:url(\'task/download\')}?id={{d.id}}');window.location.reload();">下载文件</buton>
{{# } }}
{{# }else if(d.type == 3){ }}
<a class="layui-btn layui-btn-xs" href="/index/index.html?is_check_peer_phone={{d.id}}">查看</a>
{{# if(d.info_num > 0){ }}
<button type="button" class="layui-btn layui-btn-xs" onclick="task_create(2,{{d.id}})">导出</button>
<button type="button" class="layui-btn layui-btn-xs layui-btn-danger" onclick="task_create(6,{{d.id}})">清除重复</button>
{{# } }}
{{# }else if(d.type == 4){ }}
<a class="layui-btn layui-btn-xs" href="/index/index.html?is_check_repeat_frame={{d.id}}">查看</a>
{{# if(d.info_num > 0){ }}
<button type="button" class="layui-btn layui-btn-xs" onclick="task_create(2,{{d.id}})">导出</button>
<button type="button" class="layui-btn layui-btn-xs layui-btn-danger" onclick="task_create(7,{{d.id}})">删除重复</button>
{{# } }}
{{# }else if(d.type == 5){ }}
<a class="layui-btn layui-btn-xs" href="/index/index.html?is_update_bhx={{d.id}}">查看</a>
{{# }else if(d.type == 7){ }}
<a class="layui-btn layui-btn-xs" href="/index/index.html?is_delete_frame={{d.id}}">查看</a>
{{# }else if(d.type == 1){ }}
<a class="layui-btn layui-btn-xs" href="/index/index.html?source={{d.id}}">查看</a>
{{# } }}
</script>
<script type="text/html" id="process-tpl">
<div class="layui-progress layui-progress-big" lay-filter="process-{{d.id}}" lay-showPercent="yes">
<div class="layui-progress-bar layui-bg-green" lay-percent="{{d.process}}%"></div>
</div>
</script>
<script>
layui.form.on('radio(task_type)', function(data){
$('#task-model-add').find('.task-param').removeClass('active').hide();
switch (+data.value) {
case 1:
$('#task-import').addClass('active').show();
break;
case 2:
$('#task-export').addClass('active').show();
break;
case 3:
$('#task-peer-phone').addClass('active').show();
break;
case 4:
// $('#task-repeat_frame').addClass('active').show();
break;
case 5:
$('#task-import').addClass('active').show();
break;
}
});
layui.form.on('radio(export_type)', function(data){
if(['bmc','failed_bmc','none_bmc'].indexOf(data.value) != -1){
$('#sub_export_type').hide();
$('#sub_export_type').find(':input').attr('disabled',true);
}else {
$('#sub_export_type').show();
$('#sub_export_type').find(':input').removeAttr('disabled');
}
if(data.value == 'bmc'){
$('#update_no').show();
$('#update_no').find(':input').removeAttr('disabled');
} else {
$('#update_no').hide();
$('#update_no').find(':input').attr('disabled',true);
}
});
var tableIns = layui.table.render({
id: 'taskInfo',
elem: '#task-info',
title:'车辆信息',
url: '{:url("/task/taskInfo/")}', //数据接口
page: true, //开启分页
limit: 20,
loading: true,
cols: [[ //表头
// {type: 'checkbox', fixed: 'left'},
{field: 'id', title: '序号', fixed: 'left', width: 100},
{field: 'type_txt', title: '任务名称', sort: true, width: 400},
{field: 'process', title: '处理进度', templet: '#process-tpl'},
{field: 'remark', title: '任务结果', sort: true},
{field: 'create_timestamp', title: '创建时间', sort: true, width: 200},
{field: 'status', title: '任务状态', sort: true, width: 100},
{field: 'download_times', title: '下载次数', sort: true, width: 100},
{fixed: 'right', width: 240, align:'center', toolbar: '#table-bar'}
]],
done: function (res, curr, count) {
layui.element.render();
var timer = setInterval(function(){
$.get('{:url("task/process")}', function (ret) {
if(!ret.data || ret.data.length == 0 ){
clearInterval(timer);
delete timer;
}else {
$.each(ret.data,function(i,d){
d.process = d.process > 100 ? 100 : d.process;
layui.element.progress('process-' + d.id, +d.process + '%');
if(d.process >= 100){
layui.table.reload('taskInfo');
}
})
}
});
},3000)
}
});
//监听行工具事件
layui.table.on('tool(task-info)', function(obj){ //注:tool 是工具条事件名,test 是 table 原始容器的属性 lay-filter="对应的值"
var data = obj.data, //获得当前行数据
layEvent = obj.event; //获得 lay-event 对应的值
if(layEvent === 'detail'){
layer.confirm('确定要清楚此项手机吗', function(index){
layer.close(index);
index = layer.load();
$.post('{:url("index/clearPhone")}', {id: data.id}, function (res) {
layer.close(index);
layer.msg(res.msg,function () {
layui.table.reload('taskInfo');
});
})
});
}
});
layui.upload.render({
elem: '#upload', //绑定元素
accept: 'file',
url: '{:url("task/upload")}', //上传接口
data: {
task_type: function () {
return $("input[name='task_type']:checked").val();
}
},
done: function (res) {
if (res.code == -1) {
$('#lock-screen').css('display', 'flex');
} else if (res.code == 0) {
layer.alert(res.msg);
} else if (res.code == 1) {
$('#original_filename').val(res.original_filename);
$('#filename').val(res.filename);
return true;
}
},
error: function (res) {
//请求异常回调
layer.alert(res.msg);
}
});
$(function(){
$('.export-date1,.export-date2').each(function (i, d) {
layui.laydate.render({
elem: d,
});
});
});
function export_num(){
if($('[name="export_date1"]').val() == '' && $('[name="export_date1"]').val() == ''){
layer.msg('请先填写初登日期');
return false;
}
$.post('{:url("task/exportNum")}', $('#task-export').find(':input').serialize(), function (ret) {
layer.msg(ret['msg']);
$('#count').val(ret.data);
});
}
function task_create(type,id = 0){
$.post('{:url("task/save")}', {task_type: type,source_id: id}, function (ret) {
layer.msg(ret['msg'],function(){
layui.table.reload('taskInfo');
});
});
}
function task_add() {
var task_type = $('[name="task_type"]:checked').val();
if (task_type == 5 || task_type == 2) {
var name = task_type == 5 ? $('#original_filename').val() : $('#queue-name').val();
var type = task_type == 5 ? 'update' : 'export';
$.get('{:url("task/checkIsExistName")}?name=' + name + '&type=' + type, function (ret) {
if (ret.code == 1) {
layer.confirm(ret.msg, function (index) {
layer.close(index);
submitForm();
});
}else if (ret.code == 0) {
layer.alert(ret.msg);
}else if (ret.code == 2) {
submitForm();
}
});
}else {
submitForm();
}
}
function submitForm(){
$.post('{:url("task/save")}', $('#task-model-add').find('.active :input').serialize(), function (ret) {
if(ret.code == 0){
layer.alert(ret.msg);
}else {
layer.msg(ret['msg'],function(){
layui.table.reload('taskInfo');
});
}
});
}
function search(event){
tableIns.reload({
page: {
curr: 1 //重新从第 1 页开始
},
where: {queue: $('#queue').val()},
}, 'data');
}
function getExportName(event) {
var target = event.target;
$.get('{:url("task/exportName")}', $('#task-export').find(':input').serialize(), function (ret) {
if(ret.code == 0){
layer.alert(ret.msg);
}else {
$(target).prev('input[name="queue"]').val(ret.name);
}
});
}
</script>
{/block}