主内容

<script id="img-show-tpl" type="text/html">
<div>
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
<!--<div class="panel-heading">-->
<!--上传图片凭证-->
<!--</div>-->
<!-- /.panel-heading -->
<div class="panel-body">
<div class="table-responsive col-lg-10">
<form class="form-horizontal addForm" method="post" action="save_cert" name="form1" id="save_cert_form" enctype="multipart/form-data">
<input name="order_num" value="{{ data.order_num }}" hidden="hidden">
<input name="identify" value="{{ data.identify }}" hidden="hidden">
<div class="form-group col-lg-12">
<label class="control-label col-lg-4"></label>
<label class="col-lg-5 text-left">凭证图</label>
<label class="control-label col-lg-1">
<button type="button" class="btn btn-xs btn-danger add-img">添加凭证图</button>
</label>
</div> <div class="form-group col-lg-10 main_list" id="cert-content">
</div> <div class="form-group col-lg-12">
<div class="col-lg-2 col-lg-offset-3">
<button type="button" class="btn btn-primary col-lg-8" id="add_btn">保存</button>
</div> <div class="col-lg-2">
<button type="button" class="btn btn-danger col-lg-8" id="cancel_btn">取消</button>
</div>
<div class="clear"></div>
</div> </form>
</div>
<!-- /.table-responsive -->
</div>
<!-- /.panel-body -->
</div>
<!-- /.panel -->
</div>
</div>
</div>
</div>
</script>

单元内容

<script id="img-module-tpl" type="text/template">
{{ if data.is_new }}
<div class="list">
<input type="hidden" name="cert_id[]"/>
<label class="control-label col-lg-3"></label>
<span class="control-label col-lg-8 text-left">
<span class="input-group file-caption-main col-lg-8" style="float: left;">
<div class="form-control file-caption kv-fileinput-caption" style="text-align:left;overflow: hidden;line-height: 23px;">
凭证图不限尺寸
</div> <input style="display: none;width:0px;border:1px solid #ff99ff;" class="file-real for-add" name="cert_img[]" type="file" multiple="" /> <div class="input-group-btn file-btn">
<div class="btn btn-primary btn-file for-cert-img">
<i class="glyphicon glyphicon-folder-open"></i>&nbsp;
<span class="hidden-xs">凭证图</span>
</div>
</div>
</span>
<span class="col-lg-3 erbi-form-right">
(请上传图片)
</span>
</span> <label class="control-label col-lg-1 del-btn">
<button type="button" class="btn btn-xs btn-danger del-img">删除</button>
</label>
</div>
{{ else }}
{{ each data.list }}
<div class="list">
<input type="hidden" name="cert_id[]" value="{{ $value.id }}"/>
<label class="control-label col-lg-3"></label>
<span class="control-label col-lg-8 text-left">
<span class="input-group file-caption-main col-lg-8" style="float: left;">
<div class="form-control file-caption kv-fileinput-caption" style="text-align:left;overflow: hidden;line-height: 23px;">
凭证图不限尺寸
</div> <input style="display: none;width:0px;border:1px solid #ff99ff;" class="file-real for-edit" name="cert_img_{{ $value.id }}" type="file" multiple="" /> <div class="input-group-btn file-btn">
<div class="btn btn-primary btn-file for-cert-img">
<i class="glyphicon glyphicon-folder-open"></i>&nbsp;
<span class="hidden-xs">凭证图</span>
</div>
</div>
</span> <span class="col-lg-3 erbi-form-right">
<a href="{{ $value.img_url }}" target="_blank">点击查看</a>
</span>
</span> <label class="control-label col-lg-1 del-btn">
<button type="button" class="btn btn-xs btn-danger del-img">删除</button>
</label>
</div>
{{ /each }}
{{ /if }} </script>

展示内容

$(".info_upload_cert").on('click',function () {
let identify = $(this).data('identify');
let order_num = $(this).parent().data('num');
let desc = $(this).data('desc');
$.ajax({
type: 'POST',
url: 'ajaxGetCert',
data: {identify: identify, order_num: order_num , more:1},
dataType: 'json',
success: function (data) {
if (data.errno == 0) {
// 设置主内容
let show_html = template('img-show-tpl',{data:{identify:identify,order_num:order_num}});
layer.open({
title: desc,
type: 1,
skin: 'layui-layer-rim', //加上边框
area: ['1200px', '600px'], //宽高
content: show_html
});
// 设置单元内容
let module_html = template('img-module-tpl', {data:{is_new:false,list:data.data}});
$('#cert-content').html(module_html);
} else {
alert(data.errdesc);
return false;
}
}
});
});

添加,删除,提交

$(document).on('click','.add-img',function(){
var length = $('.main_list .list').length;
if(length <= 5){
let html = template('img-module-tpl', {data:{is_new:true}});
$('#cert-content').append(html);
}else{
layer.msg('最多只可以添加6个!');
return false;
}
}); $(document).on('click','.del-img',function(){
if(confirm('确定要删除吗')){
$(this).parent().parent().remove();
}
}); $(document).on('click','#cancel_btn',function(){
layer.closeAll();
}); $(document).on('click','#add_btn',function(){
$("#save_cert_form").ajaxForm({
dataType: "json",
success : function(obj){
if(obj.errno == 0){
layer.msg('已保存');
setTimeout(function() {
layer.closeAll();
window.location.reload();
},1000);
}else{
layer.msg(obj.errdesc);
}
return false;
}
}); $("#save_cert_form").submit();
return false;
});

接口

/**
* 获取凭证
*/
public function ajaxGetCert() {
$identify = $_POST['identify'];
$order_num = $_POST['order_num'];
if (!$identify) {
$this->json->E('缺少参数',10001);
}
if (!$order_num) {
$this->json->E('缺少参数',10002);
}
$more = $_POST['more'] ? true : false ;
$cert_list = OrderService::getCert($order_num,$identify,$more);
$this->json->S($cert_list);
} /**
* 上传凭证
*/
public function save_cert() {
if (!$identifyStr = $_POST['identify']) {
$this->json->E('缺少参数identify');
} if (!$order_num = $_POST['order_num']) {
$this->json->E('缺少参数order_num');
}
$identify = OrderService::getIdentifyByStr($identifyStr)['identify'];
$type = OrderService::getIdentifyByStr($identifyStr)['type'];
$temp_cert_id = $_POST['cert_id'];
if (count($temp_cert_id) === 0) {
$this->json->E('请上传凭证');
} M()->startTrans();
// 先删除凭证
$order_cert = M('order_cert');
$order_cert->where(['order_num'=>$order_num,'identify'=>$identify])->save(['status'=>0]); $temp_all_file = $_FILES;
$temp_new_file = $_FILES['cert_img'];
unset($_FILES);
$cursor_new = 0;
foreach ($temp_cert_id as $k=>$v) {
// 重置$data数据
$data = [];
if ($v) { // 修改
// 可能传图,也可能未传图
if ($temp_all_file['cert_img_'.$v]) { // 传图了
$_FILES['cert_img'] = $temp_all_file['cert_img_'.$v];
$file = $this->upload(1,0,0,'cert_img','cert_img');
$data['img_url'] = $file['save_name'];
if(!$data['img_url']) {
M()->rollback();
$this->json->E('图片上传失败',10001);
}
}
$data['status'] = 1;
$edit_flag = $order_cert->where(['id'=>$v])->save($data);
if (!$edit_flag && $edit_flag !==0 ) {
M()->rollback();
$this->json->E('凭证更新失败',10002);
} } else { // 新增,变更游标
$file_up = array();
$file_up['name'] = $temp_new_file['name'][$cursor_new];
$file_up['type'] = $temp_new_file['type'][$cursor_new];
$file_up['tmp_name'] = $temp_new_file['tmp_name'][$cursor_new];
$file_up['error'] = $temp_new_file['error'][$cursor_new];
$file_up['size'] = $temp_new_file['size'][$cursor_new];
$_FILES['cert_img'] = $file_up; $file = $this->upload(1,0,0,'cert_img','cert_img');
$data['img_url'] = $file['save_name']; if(!$data['img_url']) {
M()->rollback();
$this->json->E('图片上传失败',10001);
} $data['order_num'] = $order_num;
$data['identify'] = $identify;
$data['type'] = $type;
$data['status'] = 1;
$data['create_time'] = time();
$add_flag = $order_cert->add($data);
if (!$add_flag) {
M()->rollback();
$this->json->E('凭证添加失败',10002);
}
unset($_FILES, $file_up);
$cursor_new ++;
}
} // 设置凭证为已上传
$order = M('order');
$save_order_flag = $order->where(['order_num'=>$order_num])->save([$identifyStr=>'1']);
if ($save_order_flag !== false) {
M()->commit();
$this->json->S('操作成功');
} else {
M()->rollback();
$this->json->E('修改订单数据失败',10003);
}
}

art-template 弹出上传多图的更多相关文章

  1. Java实现文件上传-按钮弹出上传页面

    转自: https://blessht.iteye.com/blog/1405057 最近自己在做一个小系统玩的时候涉及到了文件的上传,于是在网上找到Java上传文件的方案,最后确定使用common- ...

  2. js实现点击按钮弹出上传文件的窗口

    转自:https://www.jb51.net/article/100916.htm 1.详细描述 在页面上设置一个“选择文件”按钮,点击该按钮,会弹出本地磁盘信息用于选择文件. 2.代码 ? 1 2 ...

  3. HTML+js+css实现点击图片弹出上传文件窗口的两种思路

    第一种:CSS实现 <style><!-- .fileInputContainer{        height:256px;        background:url(upfil ...

  4. 帝国CMS7.2新增多图同时上传插件,上传多图效率更高

    原来上传多图文件,需要挨个选择文件,然后再点批量上传,比较麻烦.所以帝国CMS7.2新增了多图上传插件:为采用FLASH方式实现同时选择多个图片一起上传,提高多图上传效率. 帝国CMS多图上传插件特性 ...

  5. 使用ajax上传图片,并且使用canvas实现出上传进度效果

    前端代码: <%@ page contentType="text/html;charset=UTF-8" language="java" %> &l ...

  6. AF封装的关于一次请求上传多图到服务器!!!

    方式一:图片封装在模型数组中 /** *  上传多图到服务器 * *  @param URLString       请求地址 *  @param parameters      请求的其他参数 *  ...

  7. bootstrap popover 如何在hover状态移动到弹出上不消失

    bootstrap中的popover其实就是对tooltip做了一定升级,拥有了标题和内容 概要 使用的时候依赖第三方插件 依赖tooltip插件 必须初始化 title 和 content 可以在p ...

  8. 使用tinypng对需要上传Gitee图床的图片进行压缩

    目录 背景 Tinypng简介 Tinypng使用 手动上传图片 使用API 调用API自动上传超过1MB图片 安装tinyfy 自动上传脚本 其他 背景 在使用Gitee作为图床时(使用Typora ...

  9. iOS移动下上传图片失败解决 (上传多图,带其他参数)

    项目中有一个主要的功能,就是上传图片,结结果移动真的是很奇怪,WiFi,联通,电信都没有问题的情况下,居然在移动下不行,真的是很头疼.不过好在最后是解决了 项目的网络请求我是采用ASIHttpRequ ...

随机推荐

  1. Failed opening libc!的解决方法

    方法来源: http://www.cfd-online.com/Forums/fluent/135879-setting-process-affinity-failed-opening-libc.ht ...

  2. Linux 搜索查找类指令

    一.find  指令 find 指令将从指定目录向下递归遍历其各子目录,将满足条件的文件或者目录显示在终端. 基本语法 find  [搜索范围]  [选项] 选项说明 -name            ...

  3. VsCode插件与Node.js交互通信

    首先关于VsCode插件通信,如果不明白的可以参考我的这篇博客VsCode插件开发之插件初步通信 如果需要详细例子的话,可以参考VsCode插件开发 现在又有一个新的需求是,VsCode插件可以通过j ...

  4. Python安装第三方库常用方法

    在学习Python过程中,经常要用到很多第三方库,面对各种不同情况,Python为我们提供了多种安装方法: 一.pip安装: pip安装相信大家都不陌生了,在安装第三方库中,pip是最常使用的一种方法 ...

  5. NumPyArray

    import arcpy import numpy # Create a simple array from scratch using random values myArray = numpy.r ...

  6. heatmap.js 参数说明

      blur:每个点都是两个圆组成的,分别为内圆和外圆:外圆越大,看起来这个点越模糊,内圆部分比较清晰:外圆的颜色比较固定且与内圆颜色不同,内圆的颜色由value确定:blur决定外圆与内圆的占比大小 ...

  7. CMU Database Systems - Query Processing

    Query Model Query处理有三种方式, 首先是Iterator model,这是最基本的model,又称为volcano,pipeline模式 他是top-down的模式,通过next函数 ...

  8. Tosca:设置执行结束时间

  9. Spring Junit4 接口测试

    Junit实现接口类测试 - dfine.sqa - 博客园http://www.cnblogs.com/Automation_software/archive/2011/01/24/1943054. ...

  10. mount: unknown filesystem type ‘ntfs’ 解决方法

    问题: mount –t ntfs /dev/sde1 /mnt/mount: unknown filesystem type ‘ntfs’ 这是由于CentOS release 6.6(Final) ...