初始上传

This commit is contained in:
2026-04-04 17:27:12 +08:00
parent 4d80d28eb4
commit b7e11774ee
11191 changed files with 1588469 additions and 0 deletions

View File

@@ -0,0 +1,407 @@
<style>
.add-way .add-way-item{display: flex;margin: 8px 0;align-items: center;flex-wrap: wrap;}
.add-way .add-way-item input{margin: 0 10px;}
.add-way .add-way-item .layui-form-radio{margin-right: 0;padding-right: 0;}
.add-way .word-aux{flex-basis: 100%;margin-left: 0;}
.disabled-click{pointer-events: none;color: #999 !important;}
#addFile {margin-left: 10px;cursor: pointer;color: var(--base-color);}
.upload-file{flex-basis: 100%;padding-left: 12px;padding-top: 5px;}
.load-animation {
position: fixed;
z-index: 19999999;
background-color: rgba(255,255,255,.9);
width: 700px;
height: 400px;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: auto;
}
.load-animation .load-head{
font-size: 16px;
height: 44px;
line-height: 44px;
padding-left: 10px;
}
.load-animation .load-body {
height: 300px;
display: flex;
flex-direction: column;
width: 100%;
justify-content: center;
align-items: center;
font-size: 16px;
}
.load-animation .load-body .animation-outer{
position: relative;
margin-top: 30px;
border-radius: 10px;
width: 300px;
height: 10px;
background-color: #eee;
}
.load-animation .load-body .animation-within{
border-radius: 10px;
width: 0;
height: 100%;
background-color: var(--base-color);
transition: all .3s;
}
.load-animation .load-body .num{
position: absolute;
left: 50%;
transform: translateX(-50%);
top: -20px
}
.confirm-import{margin-left: 0 !important;}
</style>
<div class="single-filter-box">
<button class="layui-btn" onclick="addCard()">添加卡密</button>
</div>
<div class="layui-tab table-tab" lay-filter="bargain_tab">
<div class="layui-tab-content poster_list">
<!-- 列表 -->
<table id="poster_list" lay-filter="poster_list"></table>
</div>
</div>
<script type='text/html' id="iog_card_cdk">
<div class="layui-form iog-card-cdk">
<div class="layui-form-item">
<label class="layui-form-label sm">添加方式</label>
<div class="layui-input-block add-way">
<div class="add-way-item">
<input type="radio" name="type" value="auto" lay-filter="validityType" checked>
<span class="sub-text">在线制卡</span>
<input type="number" class="layui-input len-short sub-text" name="num">
<span class="sub-text"></span>
<div class="word-aux">在线制卡最多单次制作1千张卡号及密钥按照制卡规则设置</div>
</div>
<div class="add-way-item">
<input type="radio" name="type" value="import" lay-filter="validityType">
<span class="sub-text disabled-click">导入制卡</span>
<span>(下载<a href="GIFTCARD_CSV/card_import.csv" class="text-color" target="_blank">导入模板</a>)</span>
<div class="upload-file sub-text disabled-click">
<div class="upload-img-block" id="addFile">
<div class="upload-img-box">
<div class="upload-default">
<div class="upload">
<i class="iconfont iconshangchuan"></i>
<p>导入模版</p>
</div>
</div>
</div>
</div>
</div>
<div class="word-aux">导入制卡需上传卡密文档注意不要重复且单次最多制作1千张</div>
</div>
</div>
</div>
<div class="form-row">
<button class="layui-btn confirm-auto">确定</button>
<button class="layui-btn confirm-import layui-hide">确定</button>
<button class="layui-btn layui-btn-primary cancel">取消</button>
</div>
</div>
</script>
<!-- 操作 -->
<script type="text/html" id="operation">
<div class="table-btn">
<a class="layui-btn" lay-event="delete">删除</a>
<a class="layui-btn" lay-event="export">导出</a>
</div>
</script>
<script>
var table,form,laytpl,upload,layer_label,
repeat_flag = false; //防重复标识
var giftcard_id = {$giftcard_id};
layui.use(['form','laytpl','upload'], function () {
laytpl = layui.laytpl;
form = layui.form;
upload = layui.upload;
form.render();
table = new Table({
elem: '#poster_list',
url: ns.url("giftcard://shop/cardimport/lists",{'giftcard_id': giftcard_id}),
cols: [
[
{
field:'type_name',
title: '制卡类型',
unresize: 'false',
width: '15%',
}, {
field: 'total_count',
unresize: 'false',
title: '在线/导入制卡数',
width: '10%',
}, {
field: 'success_count',
unresize: 'false',
title: '成功制卡数',
width: '10%',
}, {
field: 'fail_count',
unresize: 'false',
title: '导入失败数',
width: '10%'
},
{
field: 'use_count',
unresize: 'false',
title: '使用数',
width: '10%',
}, {
field: 'activate_count',
unresize: 'false',
title: '激活数',
width: '10%',
}, {
field: 'create_time',
title: '制卡时间',
unresize: 'false',
width: '15%',
templet: function (data) {
return ns.time_to_date(data.create_time);
}
}, {
title: '操作',
toolbar: '#operation',
unresize: 'false',
align : 'right'
}]
]
});
/**
* 监听工具栏操作
*/
table.tool(function (obj) {
var data = obj.data;
switch (obj.event) {
case 'export':
exportFn(data.import_id);
break;
case 'delete':
del(data.import_id);
break;
}
});
/**
* 导出
*/
function exportFn(id) {
window.open(ns.url("giftcard://shop/cardimport/export",{ request_mode: 'download',import_id: id}));
}
// 删除
function del(id){
layer.confirm('您正在执行删除操作,请谨慎处理', {
btn: ['确定','取消'] //按钮
,cancel: function(index, layero){
repeat_flag = false;
layer.close(index);
}
},function (index) {
if (repeat_flag) return false;
repeat_flag = true;
layer.close(index);
$.ajax({
url: ns.url("giftcard://shop/cardimport/delete"),
data: {
import_id: id
},
dataType: 'JSON',
type: 'POST',
success: function (res) {
layer.msg(res.message);
if (res.code == 0) {
table.reload();
}
repeat_flag = false;
}
});
}, function(index){
repeat_flag = false;
layer.close(index);
});
}
});
// 添加卡密
var interval;
var formData = new FormData();
var cardPup;
function addCard(){
laytpl($("#iog_card_cdk").html()).render({}, function (html) {
cardPup = layer.open({
type: 1,
title:"添加卡密",
area:['700px','400px'],
content: html,
success: function(layero, index){
form.render();
// 上传文件
var uploadInst = upload.render({
elem: '#addFile' //绑定元素
,url: ns.url("giftcard://shop/cardimport/create") //上传接口
,accept:'file'
,acceptMime: '.csv'
,exts: 'csv'
,auto: false
,bindAction: ".iog-card-cdk .confirm-import"
,data:{
type: 'import',
giftcard_id
},
choose:function(obj){
//预读本地文件,如果是多文件,则会遍历。(不支持ie8/9)
obj.preview(function(index, file, result){
$("#addFile .upload").html(file.name);
formData.append('file',file);
});
},
done: function(res){
if (res.code >= 0) {
importing(res.data,'import');
} else {
layer.msg(res.message);
}
}
});
form.on('radio(validityType)', function(data){
if(data.value == 'auto'){
$(".iog-card-cdk .confirm-import").addClass("layui-hide");
$(".iog-card-cdk .confirm-auto").removeClass("layui-hide");
}else{
$(".iog-card-cdk .confirm-import").removeClass("layui-hide");
$(".iog-card-cdk .confirm-auto").addClass("layui-hide");
}
$(data.elem).parent(".add-way-item").siblings().find(".sub-text").addClass("disabled-click");
$(data.elem).parent(".add-way-item").find(".sub-text").removeClass("disabled-click");
});
$(".iog-card-cdk .confirm-auto").click(()=>{
var obj = {};
obj.type = $(".iog-card-cdk input[name='type']:checked").val();
obj.giftcard_id = giftcard_id;
var num = $(".iog-card-cdk input[name='num']").val();
if(obj.type == 'auto')
obj.num = num;
else if(obj.type == 'import')
return false;
if (repeat_flag) return;
repeat_flag = true;
$.ajax({
type: 'POST',
dataType: 'JSON',
url: ns.url("giftcard://shop/cardimport/create"),
data: obj,
success: function (res) {
repeat_flag = false;
if (res.code >= 0) {
importing(res.data);
} else {
layer.msg(res.message);
}
}
});
});
$(".iog-card-cdk .form-row .cancel").click(function(){
layer.closeAll();
});
}
});
});
}
function importing(data) {
loadAnimation();
cdkLog(data);
getCardImportInfo(data);
interval = setInterval(()=>{
getCardImportInfo(data);
},1000);
}
function cdkLog(id) {
formData.append('import_id',id);
$.ajax({
type: 'POST',
dataType: 'JSON',
url: ns.url("giftcard://shop/cardimport/cdkLog"),
data: formData,
processData: false,
contentType:false,
success: function (res) {}
});
}
function getCardImportInfo(id) {
$.ajax({
type: 'POST',
dataType: 'JSON',
url: ns.url("giftcard://shop/cardimport/getCardImportInfo"),
data: {import_id:id},
success: function (res) {
if(res.code >= 0){
var data = res.data;
var num = ((parseInt(data.imported_count)/parseInt(data.total_count))*100).toFixed(2);
if(num >= 100) num = 100;
progress(num);
if(parseInt(data.imported_count) == parseInt(data.total_count)){
clearInterval(interval);
layer.msg("制卡成功");
formData.delete('import_id');
formData.delete('file');
setTimeout(()=>{
closeProgress();
layer.close(cardPup);
table.reload();
},1000)
}
}else
repeat_flag = false;
}
});
}
function loadAnimation(){
var html = `
<div class="load-animation">
<div class="load-head">正在添加</div>
<div class="load-body">
<div>卡密正在添加中,请稍等...</div>
<div class="animation-outer">
<span class="num">0.00%</span>
<div class="animation-within"></div>
</div>
</div>
</div>
`;
$("body").append(html);
}
function progress(num) {
$(".load-animation .animation-within").css("width",num+'%');
$(".load-animation .num").html(num+'%');
}
function closeProgress() {
$(".load-animation").remove();
}
</script>