-
2021-12-22 21:35:01
LayUI是一款很不错的前端框架,下线有点可惜了。在前端的开发中,作为一般的小型开发还是可以的。
将这几天在使用过程中的问题整理一下,方便以后的使用。
1、验证码的点击更新:
<img class="validateImg" src="captcha.php" onclick="this.src=this.src+'?'+Math.random()" width="100" height="38">
2、ajax的更新
在加载了layui.js后,可以按它指定的方式进行ajax的操作。
<script src="./lib/layui-v2.6.3/layui.js" charset="utf-8"></script> <script> layui.use(['form','jquery'], function () { var $ = layui.jquery,form = layui.form,layer = layui.layer; // 进行登录操作 form.on('submit(login)', function (data) { $.ajax({ url:'login.php', data:"username="+data.username+"&password="+data.password+"&captcha="+data.captcha, type:'POST', success:function (data) { if (data == 'OK'){ location.href = "index.php"; }else{ layer.msg(data); } } }); return false; }); }); </script>
3、为了方便使用LayUI,在页面上使用两个DIV在最前面。
<div class="layuimini-container"> <div class="layuimini-main"> <div class="header"> <div class="left"> <div style="display: inline-block;vertical-align: middle;margin-top: 5px;margin-left: 5px;"> <img src="./images/logo.png" width="40px" height="40px"> </div> <div style="display: inline-block;vertical-align: middle;margin-left: 10px;"> <label style="font-size: 24px;color: #333333;">数据记录</label> </div> </div> <div class="right"> <!-- 菜单栏 --> <ul class="layui-nav" style="float: left;" id="layerDemo"> <li class="layui-nav-item"><a href="">计划安排</a></li> <li class="layui-nav-item"> <a href="">设置参数</a> <dl class="layui-nav-child"> <a data-method="notice" id="DRUser" >用户表</a> <a data-method="confirmTrans" id="DRMemberList">人员列表</a> <a data-method="setTop" id="DRUnitList">单位列表</a> </dl> </li> </ul> </div> </div> <div class="content"></div> <div class="footer"></div> </div> </div>
上面就是实际的做法,可以在空白的页面上设计好,比如上面的是最简单的上、中、下的界面布局,这个布局的细微部分(包含了LayUI的界面组件)都按照自己的想法随意定制页面,最后套上两个LayUI的DIV,方便对LayUI元素的引用操作。
4、界面元素可以随意定义事件和响应,设置了ID。
layui.use('layer', function () { //独立版的layer无需执行这一句 var $ = layui.jquery, layer = layui.layer; //独立版的layer无需执行这一句 $('#DRUserList').on('事件名', function () { layer.open({ type: 2 , title: '用户管理' //显示标题栏:['用户管理', 'font-size:18px;'] , closeBtn: 0 , area: ['870px', '700px'] // , shade: 0.3 , id: 'LAY_layuipro_DRUser' //设定一个id,防止重复弹出 , btn: ['关闭'] , btnAlign: 'c' , moveType: 1 //拖拽模式,0或者1 , content: 'DRUserList.html' , success: function (layero) { // var btn = layero.find('.layui-layer-btn'); // btn.find('.layui-layer-btn0').attr({ // href: 'http://www.xjyt.petrochina/' // , target: '_blank' // }); } }); });
5、在做记录的增、删、改后的表格的刷新,也可以增加刷新按钮,通过触发它的点击来实现更新。
注意:表格提交的方式需要留意,开始我以为是POST,始终分页不变换数据,换成GET就可以了。
$(".layui-laypage-btn")[0].click();
6、表格中的删除多行。
var checkStatus = table.checkStatus('currentTableId') , data = checkStatus.data; // layer.alert(JSON.stringify(data)); // console.log(JSON.stringify(data)); for(var i=0;i<data.length;i++){ $.ajax({ url:'DRUserDel.php', data:"C01="+data[i]['C01'], type:'POST', success:function (data) { $(".layui-laypage-btn")[0].click(); } }); // console.log(data[i]['C01']); }
这里偷懒了,其实还是按照ID值来删除的。
7、修改数据前,检查数据是否经过了改动。
Init_C01=GetQueryString("C01"); Init_C02=GetQueryString("C02"); Init_C03=GetQueryString("C03"); Init_C04=GetQueryString("C04"); Init_C05=GetQueryString("C05"); document.getElementById("CC01").value=Init_C01; document.getElementById("CC02").value=Init_C02; document.getElementById("CC03").value=Init_C03; document.getElementById("CC05").value=Init_C05; if(GetQueryString("C04")=='管理员'){ $('#CC04_A ').attr("checked", true); $('#CC04_B ').attr("checked", false); }else{ $('#CC04_A ').attr("checked", false); $('#CC04_B ').attr("checked", true); } form.render('radio'); //必须加上这一句 //监听提交 form.on('submit(saveBtn)', function (data) { var table = layui.table; //判断数据是否更改 var strUpdate=''; if(document.getElementById("CC02").value != Init_C02){ strUpdate=" C02='"+document.getElementById("CC02").value+"'"; } if(document.getElementById("CC03").value != Init_C03){ if(strUpdate==''){ strUpdate=" C03='"+document.getElementById("CC03").value+"'"; }else{ strUpdate=strUpdate+" , C03='"+document.getElementById("CC03").value+"'"; } } var strUserType=$('#UserType input[name="CC04"]:checked ').val(); if(!strUserType != Init_C04){ if(strUpdate==''){ strUpdate=" C04='"+strUserType+"'"; }else{ strUpdate=strUpdate+" , C04='"+strUserType+"'"; } } if(document.getElementById("CC05").value != Init_C05){ if(strUpdate==''){ strUpdate=" C05='"+document.getElementById("CC05").value+"'"; }else{ strUpdate=strUpdate+" , C05='"+document.getElementById("CC05").value+"'"; } } if(strUpdate !=''){ //提交更改 var jsonData=[];//准备一个空数组 var updateData=new Object();//准备对象 updateData.C01=Init_C01; updateData.Update=strUpdate; jsonData.push(updateData); var json_str=JSON.stringify(jsonData); $.ajax({ url:'DRUserUpdate.php', data:json_str, type:'POST', datetype:'json', success:function (data) { window.parent.location.reload(); } }); } var iframeIndex = parent.layer.getFrameIndex(window.name); parent.layer.close(iframeIndex); return false; });
没有改动就不提交,改动了就只提交改动后的字段。
radio的更新必须加上form.render('radio');
8、提交数据前的处理
//检查数据 var canContinue=true;//假定没有错误 var strFalse=""; var jsonData=[];//准备一个空数组 var updateData=new Object();//准备对象 updateData.strTable="druserlist"; updateData.strWhere="c01='"+document.getElementById("DC01").value+"'"; jsonData.push(updateData); var json_str=JSON.stringify(jsonData); $.ajax({//检查员工编号是否存在 url:'isExist.php', data:json_str, type:'POST', datetype:'json', async:false,//必须设置为同步 success:function (data) { console.log(data); if(data=='YES'){ canContinue=false; strFalse="员工编号已经存在!"; } } }); jsonData=[];//数组清空 updateData.strWhere="c02='"+document.getElementById("DC02").value+"'"; jsonData.push(updateData); var json_str=JSON.stringify(jsonData); $.ajax({//检查姓名是否重复 url:'isExist.php', data:json_str, type:'POST', datetype:'json', async:false,//必须设置为同步 success:function (data) { console.log(data); if(data=='YES'){ canContinue=false; strFalse="用户姓名已经存在!"; } } }); if(canContinue){ $.ajax({ url:'DRUserAdd.php', data:"C01="+data.DC01+"&C02="+data.DC02+"&C03="+data.DC03+"&C04="+data.DC04+"&C05="+data.DC05, type:'POST', success:function (data) { var iframeIndex = parent.layer.getFrameIndex(window.name); parent.layer.close(iframeIndex); window.parent.location.reload(); } }); }else{ layer.alert(strFalse); console.log(strFalse); }
9、php的操作
在php部分,可以统一处理,就是在前端合成SQL语句发到PHP接收处理就行了,不需要分增、删、改,这样程序就简单多了。
查询需要单独处理一下。
fetch_all() :抓取所有的结果行并且以关联数据,数值索引数组,或者两者皆有的方式返回结果集。
fetch_array() :以一个关联数组,数值索引数组,或者两者皆有的方式抓取一行结果。
fetch_object() :以对象返回结果集的当前行。
fetch_row() :以枚举数组方式返回一行结果
fetch_assoc(): 以一个关联数组方式抓取一行结果。
fetch_field_direct(): 以对象返回结果集中单字段的元数据。
fetch_field() :以对象返回结果集中的列信息。
fetch_fields() :以对象数组返回代表结果集中的列信息。在分页操作中,有些数据不方便跟踪,可以把数据写到临时文件中,这样就可以跟踪数据变化了。
后面再更新。
更多相关内容 -
layui+商品多规格.zip
2021-03-04 09:28:45基于layui sku 商品多规格功能,封装了三种方式,个人推荐使用layui+vue,里面有read文档,三中sku插件的截图说明 -
flask+layui+echarts实现前端动态图展示数据效果
2020-10-16 06:55:19主要介绍了flask+layui+echarts实现前端动态图展示数据效果,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 -
layui+php+mysql如何实现导入批量新增功能?
2022-04-27 11:13:16我需要把Excel的数据通过系统导入到数据库里,批量新增具体要怎么实现呢? 越简单越好! -
layui+php完成多文件上传(附代码)_WEB前端开发,layui,php,文件上传
2021-04-30 05:06:57结果: HTML代码:多文件挑选上传文件预览图:layui.use('upload', function() {var upload = layui.upload,$ = layui.jquery;var uploadInst = upload.render({elem: '#uploadId',accept: 'file', //指定许可上传时...结果:
HTML代码:
多文件
挑选上传文件
预览图:
layui.use('upload', function() {
var upload = layui.upload,
$ = layui.jquery;
var uploadInst = upload.render({
elem: '#uploadId',
accept: 'file', //指定许可上传时校验的文件范例,可选值有:images(图片)、file(一切文件)、video(视频)、audio(音频)
multiple: 'true',
url: 'http://localhost/guanwnag/php/up.php',
before: function(obj) {
//预读当地文件示例,不支持ie8
obj.preview(function(index, file, result) {
if ((file.type).indexOf("image") >= 0) {
$('#show').append('
')
} else {
$('#show').append(file.name)
}
// console.log(file);
});
},
done: function(res) {
layer.msg(res.msg, {
time: '5000',
tipsMore: true,
zIndex: '2'
});
},
allDone: function(obj) { //当文件悉数被提交后,才触发
$('.layui-word-aux').append("实行终了,文件总数:" + obj.total + "胜利:" + obj.successful + "个,失利:" + obj.aborted + "个");
console.log(obj.total); //获得总文件数
console.log(obj.successful); //要求胜利的文件数
console.log(obj.aborted); //要求失利的文件数
},
error: function() {
//要求非常
}
});
});
PHP代码:
header("Access-Control-Allow-Origin: *"); //处理跨域
header('Access-Control-Allow-Methods:post');// 相应范例
date_default_timezone_set('PRC');//猎取当前时候
//上传文件目次猎取
$month = date('Ym', time());
define('BASE_PATH', str_replace('\\', '/', realpath(dirname(__FILE__).'/'))."/");
$dir = BASE_PATH."upload/".$month."/";
//初始化返回数组
$arr = array(
'code' => 0,
'msg'=> '',
'data' =>array(
'src' => $dir . $_FILES["file"]["name"]
),
);
$file_info = $_FILES['file'];
$file_error = $file_info['error'];
if (!is_dir($dir)) {//推断目次是不是存在
mkdir($dir, 0777, true);//假如目次不存在则建立目次
};
$file = $dir.$_FILES["file"]["name"];
if (!file_exists($file)) {
if ($file_error == 0) {
if (move_uploaded_file($_FILES["file"]["tmp_name"], $dir. $_FILES["file"]["name"])) {
$arr['msg'] ="上传胜利";
} else {
$arr['msg'] = "上传失利";
}
} else {
switch ($file_error) {
case 1:
$arr['msg'] ='上传文件超过了PHP配置文件中upload_max_filesize选项的值';
break;
case 2:
$arr['msg'] ='超过了表单max_file_size限定的大小';
break;
case 3:
$arr['msg'] ='文件部份被上传';
break;
case 4:
$arr['msg'] ='没有挑选上传文件';
break;
case 6:
$arr['msg'] ='没有找到临时文件';
break;
case 7:
case 8:
$arr['msg'] = '体系毛病';
break;
}
}
} else {
$arr['code'] ="1";
$arr['msg'] = "当前目次中,文件".$file."已存在";
}
echo json_encode($arr);
更多layui学问请关注 layui运用教程 栏目。
以上就是layui+php完成多文件上传(附代码)的细致内容,更多请关注ki4网别的相干文章!
收藏 | 0
-
layui+php实现多文件上传的方法
2021-04-08 08:35:08layui+php实现多文件上传的方法发布时间:2020-05-18 15:57:23来源:亿速云阅读:118作者:小新今天小编给大家分享的是layui+php实现多文件上传的方法,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了...layui+php实现多文件上传的方法
发布时间:2020-05-18 15:57:23
来源:亿速云
阅读:118
作者:小新
今天小编给大家分享的是layui+php实现多文件上传的方法,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收获的哦。
效果:
HTML代码:
多文件
选择上传文件
预览图:
layui.use('upload', function() {
var upload = layui.upload,
$ = layui.jquery;
var uploadInst = upload.render({
elem: '#uploadId',
accept: 'file', //指定允许上传时校验的文件类型,可选值有:images(图片)、file(所有文件)、video(视频)、audio(音频)
multiple: 'true',
url: 'http://localhost/guanwnag/php/up.php',
before: function(obj) {
//预读本地文件示例,不支持ie8
obj.preview(function(index, file, result) {
if ((file.type).indexOf("image") >= 0) {
$('#show').append('
')
} else {
$('#show').append(file.name)
}
// console.log(file);
});
},
done: function(res) {
layer.msg(res.msg, {
time: '5000',
tipsMore: true,
zIndex: '2'
});
},
allDone: function(obj) { //当文件全部被提交后,才触发
$('.layui-word-aux').append("执行完毕,文件总数:" + obj.total + "成功:" + obj.successful + "个,失败:" + obj.aborted + "个");
console.log(obj.total); //得到总文件数
console.log(obj.successful); //请求成功的文件数
console.log(obj.aborted); //请求失败的文件数
},
error: function() {
//请求异常
}
});
});
PHP代码:<?php
header("Access-Control-Allow-Origin: *"); //解决跨域
header('Access-Control-Allow-Methods:post');// 响应类型
date_default_timezone_set('PRC');//获取当前时间
//上传文件目录获取
$month = date('Ym', time());
define('BASE_PATH', str_replace('\\', '/', realpath(dirname(__FILE__).'/'))."/");
$dir = BASE_PATH."upload/".$month."/";
//初始化返回数组
$arr = array(
'code' => 0,
'msg'=> '',
'data' =>array(
'src' => $dir . $_FILES["file"]["name"]
),
);
$file_info = $_FILES['file'];
$file_error = $file_info['error'];
if (!is_dir($dir)) {//判断目录是否存在
mkdir($dir, 0777, true);//如果目录不存在则创建目录
};
$file = $dir.$_FILES["file"]["name"];
if (!file_exists($file)) {
if ($file_error == 0) {
if (move_uploaded_file($_FILES["file"]["tmp_name"], $dir. $_FILES["file"]["name"])) {
$arr['msg'] ="上传成功";
} else {
$arr['msg'] = "上传失败";
}
} else {
switch ($file_error) {
case 1:
$arr['msg'] ='上传文件超过了PHP配置文件中upload_max_filesize选项的值';
break;
case 2:
$arr['msg'] ='超过了表单max_file_size限制的大小';
break;
case 3:
$arr['msg'] ='文件部分被上传';
break;
case 4:
$arr['msg'] ='没有选择上传文件';
break;
case 6:
$arr['msg'] ='没有找到临时文件';
break;
case 7:
case 8:
$arr['msg'] = '系统错误';
break;
}
}
} else {
$arr['code'] ="1";
$arr['msg'] = "当前目录中,文件".$file."已存在";
}
echo json_encode($arr);
以上就是layui+php实现多文件上传的方法的简略介绍,当然详细使用上面的不同还得要大家自己使用过才领会。如果想了解更多,欢迎关注亿速云行业资讯频道哦!
-
LayUi+PHP多图片上传
2019-07-09 17:14:20div class="layui-form-item"> <label class="layui-form-label"><font style="color: red;">*</font>保险代理从业人员执业证书</label> <div class="layui-input-block">...html部分 <div class="layui-form-item"> <label class="layui-form-label"><font style="color: red;">*</font>保险代理从业人员执业证书</label> <div class="layui-input-block"> <div class="layui-btn" id="insurance_agency_certificate_photo_upload" title=""> <i class="layui-icon"></i>执业证书 </div> </div> <div class="layui-input-block"> <ul id="insurance_agency_certificate_photo_list"></ul> <div id="insurance_agency_certificate_photo_hidden_input"> </div> </div> </div>
js部分
upload.render({ elem: '#insurance_agency_certificate_photo_upload' , url: 'upload-img?format=path' , multiple: true , size: 1024 * 1024 * 10 , before: function (obj) { var img_count = $("#insurance_agency_certificate_photo_hidden_input").find('input').length; if(img_count >= 3){ layer.msg('图最多上传3张', {icon: 2}); return false; }else{ //预读本地文件示例,不支持ie8 obj.preview(function (index, file, result) { $('#insurance_agency_certificate_photo_list').append('<li style="float: left"><img name="insurance_agency_certificate_photo_list" src="' + result + '"width="150" height="113"><div class="img_close">X</div></li>'); }); } } , done: function (res) { //上传完毕 console.log(res); if(res.code == 0){ var img_count = $("#insurance_agency_certificate_photo_hidden_input").find('input').length; if(img_count < 3){ var insurance_agency_certificate_photo_hidden_input = '<input type="hidden" id="insurance_agency_certificate_photo" name="insurance_agency_certificate_photo[]" value="'+res.data[0]+'">'; $("#insurance_agency_certificate_photo_hidden_input").append(insurance_agency_certificate_photo_hidden_input); } }else{ $('#insurance_agency_certificate_photo_list li:last').remove(); layer.msg('图片上传失败!ErrorMsg:'+res.msg, {icon: 2}); } } }); //监听删除封面图 $("#insurance_agency_certificate_photo_list").on("click", ".img_close", function(){ var index = $(this).parents('li').index(); //删除预览图片 $(this).parents('li').remove(); //删除隐藏表单 $("#insurance_agency_certificate_photo_hidden_input input").eq(index).remove(); });
php部分
public function actionUploadImg() { $request = \Yii::$app->request; if($request->isPost){ \Yii::$app->response->format = Response::FORMAT_JSON; //返回数据格式,默认返回url, 支持path参数,返回相对于网站根目录的路径 $format = $request->get('format', 'url'); //提交输入框名称 $fileInputName = $request->get('filename', 'file'); $file = UploadedFile::getInstanceByName($fileInputName); if ($file->size > 1024 * 1024 * 10) { return ['code' => 1, 'msg' => '图片最大不可超过10M']; } if (!in_array(strtolower($file->extension), array('gif', 'jpg', 'jpeg', 'png'))) { return ['code' => 1, 'msg' => '请上传标准图片文件, 支持gif,jpg,png和jpeg.']; } $relative_path = 'manager'.'/'.date('Y').'/'.date('m').'/'.date('d').'/'; $absolute_path = rtrim(\Yii::$app->params['upload_dir'], '/').'/'.$relative_path; if(!file_exists($absolute_path)){ try{ FileHelper::createDirectory($absolute_path, 0777, true); }catch (\Exception $e){ return ['code'=>1, 'msg' => '目录创建失败,'.$e->getMessage()]; } } //文件名 $filename = date('His').md5($file->getBaseName()).mt_rand(1000, 9999).'.'.$file->getExtension(); //保存文件 $file->saveAs($absolute_path.$filename); $data = ''; switch ($format){ case 'url': $data = rtrim(\Yii::$app->params['cdn_url_prefix'], '/').'/'.$relative_path.$filename; break; case 'path': $data = '/'.$relative_path.$filename; break; } return ['code'=>0, 'data' => [$data]]; } }
效果图:
-
layui+php实现多文件上传(附代码)
2020-12-19 18:21:06效果:HTML代码:多文件选择上传文件预览图:layui.use('upload', function() {var upload = layui.upload,$ = layui.jquery;var uploadInst = upload.render({elem: '#uploadId',accept: 'file', //指定允许上传时... -
layui+PHP文件上传
2021-04-18 17:27:22layui官方网站:http://www.layui.com/...一、下载layui部署到项目,在页面引入layui.css和layui.js。二、html代码图片上传图片三、js代码layui.use(['upload','jquery'],function () {$ = layui.jquer... -
layui+php文件上传
2021-03-25 10:55:51单独的文件上传html文件upload模块快速使用上传封面 layui.use('upload', function(){var upload = layui.upload;//执行实例var uploadInst = upload.render({elem:'#cover',url:'/admin/test/upload',accept:'file'... -
layui+PHP+mysql 制作自己的二级联动菜单代码
2021-01-27 04:30:24最近在学习layui,不得不说这个layui真的很不错。开发带来了很多方面之处。我们在开发中会常常用到联动菜单。但是layui的联动菜单,需要监听一级菜单的操作。要不是的话,还真不好搞。我也是看了好久好久的资料才学会... -
layui+php实现后台页面展示搜索分页排序删除
2021-06-20 12:13:15<html class="x-admin-sm"> <head> <meta charset="UTF-8"> <title>欢迎页面-X-admin2.2</title> <meta name="renderer" content="webkit"> <... &l.. -
layui+php多文件上传
2021-04-08 08:36:04HTML文件多文件选择上传文件预览图:php文件0,'msg'=> '','data' =>array('src' => $dir . $_FILES["file"]["name"]),);$file_info = $_FILES['file'];$file_error = $file_info['error'];if (!is_dir($dir... -
layui+php上传文件 的思路讲解
2019-11-29 15:48:41代码编辑软件看个人习惯,首先我们先写前端部分代码 1.laiyui官网:https://www.layui.com/ 下载代码包 2.把下载好的代码包放入新建好的的项目中 ...link rel="stylesheet" href="layui/css/layui.css"> <... -
layui+PHP上传图片
2020-07-10 17:31:12div class="layui-form-item"> <label class="layui-form-label">LOGO</label> <div class="layui-input-block"> <div class="layui-upload"> <div class="forms"> <input... -
ThinkPHP+LayUI后台管理系统.zip
2021-08-20 09:24:40后台管理系统,程序基于ThinkPHP 5开发,后台UI使用LayUI搭建 -
layui+Ajax+echarts+php实现数据可视化
2020-06-26 20:50:17使用layui和echarts实现数据可视化 -
layui + php 文件上传
2019-04-11 15:50:18HTML代码 <div class="layui-form-item" style="margin-left: 50px;display: none" id="app" > <input type="hidden" id="subjectFile" name="subject_file" value="" /> <b... -
Layui+PHP 文件上传
2019-01-03 10:37:51layui-form-item&quot; style=&quot;margin-left: 50px;&quot;&amp;gt; &amp;lt;input type=&quot;hidden&quot; id=&quot;subjectFile&am -
layui+cropper+php图片裁剪
2019-07-23 17:16:19base: '/static/cropper/' //layui自定义layui组件目录 }).use(['form','croppers'], function () { var $ = layui.jquery ,form = layui.form ,croppers = layui.croppers ,layer= layui.layer; var upload =... -
thinkphp5+layui后台系统(含数据库脚本).rar
2021-12-22 09:40:10thinkphp5+layui后台系统(含数据库脚本).rar -
thinkphp5+layui+GatewayWorker.zip 开源多客服聊天系统,支持多客服权限管理
2021-07-07 19:19:06thinkphp5+layui+GatewayWorker 目录指向public 后台: http://127.0.0.1/admin.php 账号密码 admin 123456 客户窗口: http://127.0.0.1/chat.php/index/index.html?toid=2 这里的toid 是后台添加客服的ID 客服后台... -
layui+thinkphp5.1实现分页(非动态表格)
2021-08-07 09:06:37框架:前段layui 后端thinkphp5.1js:layuilaypage.render({elem:'paging'//数据总数,count:{$total_num}//当前页面大小,limit:{$pageSize}//当前页,curr:{$page},jump:function(obj,frist){if(!frist){window.... -
基于Layui+form组件的省市区级联下拉框选择.zip
2019-06-16 09:36:12基于Layui+form组件的省市区级联下拉框选择,需要的朋友可以下载,亲测蛮好用 -
thinkphp5+layui+GatewayWorker开源多客服系统, 支持多客服 权限管理
2019-04-10 16:03:24thinkphp5+layui+GatewayWorke 启动 以debug(调试)方式启动 php start.php start 以daemon(守护进程)方式启动 php start.php start -d 停止 php start.php stop 重启 php start.php restart Linux不会... -
Layui + PHP 多文件上传实例
2018-08-09 17:29:24Layui + PHP 多文件上传Demo,欢迎指正 效果: 前端部分: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>...