layui上传,选择与上传分开,非自动上传

上传附件,将选择与上传分开,图片则显示缩略图。表单验证通过后才上传。

1、选择按钮使用input标签,解决点击后验证表单问题。

2、增加隐藏按钮与upload.render绑定。在表单验证通过后,使用模拟点击上传$('').trigger('click');

3、修改时,如果只修改了表单内容,则附件不重复上传,如果修改了附件则上传。监听选择文件的回调函数。

Html代码

<!DOCTYPE html>
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title></title>
		<link rel="stylesheet" type="text/css" href="../../../../../css/validform/style.css" media="all" />
		<link rel="stylesheet" type="text/css" href="../../../../../layui/css/layui.css" media="all" />
		<link rel="stylesheet" type="text/css" href="../../../../../css/modules/comm.css" media="all">
		<style type="text/css">
			html,body{
				height: auto;
			}
			.layui-input-block {
				margin-right: 20px;
			}

			.layui-input,
			.layui-select,
			.layui-textarea {
				height: 38px;
			}

			.layui-form-pane .layui-input-block,
			.layui-form-pane .layui-input-inline,
			layui-form-pane .layui-form-label {
				margin-bottom: 12px;
			}
		</style>
	</head>

	<body>
		<form class="layui-form layui-container layui-form-pane" id="datumForm">
			<fieldset class="layui-elem-field layui-field-title">
				<legend>资料信息</legend>
			</fieldset>
			<div class="layui-form-item">
				<input name="id" type="hidden" v-model="id">
				<input name="pic_id" type="hidden" v-model="pic_id">
				<input name="org_id" type="hidden" v-model="org_id">
				<input name="sub_cid" type="hidden" v-model="sub_cid">
				<input name="device_id" type="hidden" v-model="device_id">
			</div>
			<div class="layui-form-item">
				<div class="layui-inline">
					<label class="layui-form-label">资料类型:</label>
					<div class="layui-input-inline layui-form" lay-filter="datumFilter">
						<select name="type" datatype="*" id="datum_type" lay-filter="datumTypeFilter" lay-search></select>
					</div>
				</div>
				<div class="layui-inline">
					<label class="layui-form-label">资料名称:</label>
					<div class="layui-input-inline">
						<input id="datumName" type="text" name="name" datatype="*" class="layui-input" v-model="name">
					</div>
				</div>
				<div class="layui-inline">
					<div class="layui-input-inline">
						<input type="button" class="layui-btn layui-btn-normal layui-btn-radius" value="选择" id="selectDatum"/>
					</div>
				</div>
			</div>
			<div class="layui-form-item layui-form-text" style="height: 100%; padding: 10px 0;">
				<label class="layui-form-label ">资料描述</label>
				<div class="layui-input-block" style="height: calc(100% - 38px - 20px - 5px);">
					<textarea class="layui-textarea" style="height:100%;" name="remark" v-model="remark"></textarea>
				</div>
			</div>
			<div class="layui-form-item" v-show="picIsShow">
				 <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;">
				    预览图:
				    <div class="layui-upload-list" id="datumPic"></div>
				 </blockquote>
				
			</div>
			<div class="layui-form-item">
				<div class="layui-col-md4 layui-col-md-offset4">
					<div class="layui-input-block button-item">
						<button class="layui-btn" lay-submit lay-filter="formDemo">保存</button>
						<button class="layui-btn" id="uploadDatum" style="display: none;">上传</button>
						<button id="cancel" class="layui-btn layui-btn-primary">取消</button>
					</div>
				</div>
			</div>
		</form>
		<script src="../../../../../js/lib/jquery/jquery.min.js"></script>
		<script src="../../../../../layui/layui.js"></script>
		<script src="../../../../../js/lib/vue/vue.min.js"></script>
		<script src="../../../../../js/common/common.js"></script>
		<script src="../../../../../js/lib/Validform_v5.3.2_min.js"></script>
		<script src="../../../../../js/app/base/device/datum/editDeviceDatum.js"></script>
	</body>
</html>

js代码

/**
 * 资料上传
 * @author chenbin
 * @date 2019.08.21
 * 
 */

var record = parent.datum.record;
var datum_upload_url = parent.datum_upload_url;

//是否显示缩略图
record.picIsShow = false;

if(record.type == 1){
	record.picIsShow = true;
}
//只修改信息未上传附件
var updataInfo = true;

//vue初始化
var vm = new Vue({
	el: "#datumForm",
	data: record
})

layui.use(['form', 'laydate', 'layer', 'upload'], function() {
	var form = layui.form,
		layer = layui.layer,
		laydate = layui.laydate,
		$ = layui.$,
		upload = layui.upload;

	var uploadParam = {};

	var isSubmit = true;
	var valid = $("#datumForm").Validform({
		tiptype: 3,
		callback: function(data) {
			var p = Form.getFormJson(data);
			if (isSubmit) {
				update(p);
			}
			return false;
		}
	});

	//类型下拉框
	select.setSelectData("datum_type", "datumFilter", select.formatEnumDataByKey("datum_type"), form, false, function() {
		if (record.type != null) {
			$("#datum_type").val(record.type);
		}
		
		$('.layui-form-select dl dd.layui-this').trigger('click');
	});

	//监听选中事件
	form.on('select(datumTypeFilter)', function(data) {
		if (data.value == 1) {
			vm.picIsShow = true;
		} else {
			vm.picIsShow = false;
		}
	});

	function update(obj) {
		uploadParam = obj;
		if(!updataInfo){
			$("#uploadDatum").trigger('click');
		}else{
			updateInfo();
		}
		
	}

	$("#cancel").click(function() {
		isSubmit = false;
		var index = parent.layer.getFrameIndex(window.name);
		parent.layer.close(index);
	});

	//文件上传
	upload.render({
		elem: '#selectDatum',
		url: Ajax.formatUrl(datum_upload_url),
		size: 1024 * 20,
		accept: "file",
		acceptMime: 'file',
		auto: false,
		bindAction: '#uploadDatum',
		headers: {
			'Authorization': LocalData.getToken()
		},
		choose: function(obj) {
			updataInfo = false;
			var files = this.files = obj.pushFile(); //将每次选择的文件追加到文件队列
			//预读本地文件示例,不支持ie8
			obj.preview(function(index, file, result) {
				if (vm.picIsShow) {
					$('#datumPic').empty();
					var str = '<img src="' + result + '" style="height:80px;" class="layui-upload-img"/>';
					$('#datumPic').append(str);
				}
				var name = $("#datumName").val();
				if (comm.isEmpty(name)) {
					$("#datumName").val(file.name);
					$("#datumName").focus();
					$("#datumName").blur();
				}
			});

		},
		before: function(obj) { //obj参数包含的信息
			this.data = uploadParam;
		},
		done: function(res) {
			console.log(res);
			var index = parent.layer.getFrameIndex(window.name);
			parent.layer.close(index);
			// parent.layer.msg(data.msg);
		}
	});

	//只修改信息未修改附件
	function updateInfo(){
		Ajax.Post(parent.edit_info_url, uploadParam, function(data) {
			var index = parent.layer.getFrameIndex(window.name);
			parent.layer.close(index);
			parent.layer.msg(data.msg);
		});
	}

	if(!comm.isEmpty(vm.url)){
		if (vm.picIsShow) {
			var url = datum.formatUrl(vm.url);
			$('#datumPic').empty();
			var str = '<img src="' + url + '" style="height:80px;" class="layui-upload-img"/>';
			$('#datumPic').append(str);
		}
	}

})

效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值