layui弹框表单提交后关闭

时间: 2023-09-22 15:06:58 AIGC 浏览: 218
在layui中,弹框表单提交后可以通过以下步骤实现关闭: 1. 监听表单提交事件,例如: ``` form.on('submit(form-submit)', function(data){ // 表单提交后的处理逻辑 // ... // 关闭弹框 layer.closeAll('page'); }); ``` 这里的 `form-submit` 是表单的 lay-filter 属性值,用于绑定表单提交事件。 2. 在表单提交成功后,调用 `layer.closeAll('page')` 方法关闭弹框。 完整的代码示例: ``` // 监听表单提交事件 form.on('submit(form-submit)', function(data){ // 表单提交后的处理逻辑 // ... // 关闭弹框 layer.closeAll('page'); }); // 显示弹框 layer.open({ type: 1, title: '弹框标题', content: $('#form-container'), }); ``` 其中,`#form-container` 是包含表单的 HTML 元素的选择器。
相关问题

layui 弹框里面的按钮

layui是一个轻量级的前端 UI 框架,它提供了简洁易用的 API 来创建和定制弹框(laybox)。layui的弹框通常包含一个或多个按钮,这些按钮可以根据需求设置不同的功能,例如确认、取消、提交等。以下是一些常见的按钮及其用途: 1. **确定按钮**(ok 或 confirm):用户点击后执行确定操作,一般用于确认对话框或表单提交前的确认操作。 2. **取消按钮**(cancel 或 close):用户点击后关闭弹框,不执行任何默认操作。 3. **提交按钮**(submit 或 save):在表单相关的弹框中,用于提交表单数据到服务器。 4. **加载按钮**(loading 或 process):显示加载状态,当数据正在处理或加载时,让用户知道操作正在进行。 5. **自定义按钮**:开发者还可以根据应用需求自定义按钮类型和回调函数,例如执行某个特定的操作或者跳转到其他页面。 每个按钮可以通过配置对象来定义,包括文本、图标、样式、事件处理函数等。使用layui时,可以通过`laybox.open`方法打开弹框,并在配置对象中指定按钮选项。例如: ```javascript layui.use('laybox', function () { var laybox = layui.laybox; laybox.open({ type: 1, // 弹框类型,1表示普通对话框 title: '提示信息', content: '这是一段内容...', btn: ['确定', '取消'], // 定义按钮数组 btnAlign: 'c', // 按钮对齐方式,如'c'居中 skin: 'layui-layer-rim', // 自定义样式 btnClose: true, // 是否允许点击遮罩关闭 done: function (index, layero, obj) { // 确定按钮的回调 console.log(obj.index); // 获取点击的按钮索引 }, cancel: function (index, layero, obj) { // 取消按钮回调 //... } }); }); ```

layui弹框,填入内容后返回父页面

layui是一个轻量级的前端UI框架,它提供了一套简单易用的API用于创建各种弹窗(dialog)。在layui中,你可以使用`layer.open()`函数打开一个弹框,并通过设置回调函数来处理用户填写的内容。 下面是一个简单的例子,展示如何打开一个带表单的弹框,用户输入后点击确认按钮,数据会通过回调传回父页面: ```javascript // 弹出带表单的layui弹框 layer.open({ type: 2, // 2代表iframe层 title: '请输入信息', shadeClose: true, // 点击遮罩关闭 area: ['50%', 'auto'], // 自适应宽高 content: '<form id="myForm"><input type="text" name="info"></form>', // 弹框内HTML内容 btn: ['确定', '取消'], // 取消按钮 success: function(index) { // 当弹框加载成功时执行 $('#myForm').on('submit', function(e) { // 监听表单提交事件 e.preventDefault(); // 阻止默认提交行为 var info = $('input[name="info"]').val(); // 获取输入值 if (info) { // 提交数据并关闭弹框,这里只是一个示例,实际场景下你需要将数据发送到服务器或父页面 layer.close(index); parent.layer.msg('信息已保存:' + info); // 在父窗口显示消息 } }); } }); // 在这里,parent表示当前弹框所在的父页面,`layer`对象可以访问到父页面的`layer`实例 ```
阅读全文

相关推荐

以之前对话中的收费项目管理为模版,修改该代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>收费项目明细管理</title> <meta name="renderer" content="webkit"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> <style> .x-nav { padding: 0 20px; position: relative; z-index: 99; border-bottom: 1px solid #e5e5e5; line-height: 60px; } .x-body { padding: 20px; } .layui-table td, .layui-table th { padding: 9px 15px; } .td-manage a { margin: 0 5px; } .dialog-mask { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.5); z-index: 999; display: flex; justify-content: center; align-items: center; } .dialog-content { background: #fff; padding: 20px; border-radius: 5px; width: 800px; max-height: 90vh; overflow-y: auto; } .x-red { color: red; } </style> </head> <body> 首页 收费管理 收费项目明细列表 刷新 添加收费项目明细 ID 所属小区 收费项目 应收金额(¥) 实收金额(¥) 缴费时间 操作 {{ item.id }} {{ item.x_id}} {{ item.m_id }} {{ item. e_amount}} {{ item.a_amount }} {{ item.pay_Time }} {{ dialogTitle }} <form class="layui-form layui-form-pane"> <input type="hidden" v-model="formData.id"> <label class="layui-form-label"> *所属小区 </label> <input type="text" v-model="formData.x_id" placeholder="请输入所属小区编号" class="layui-input" lay-verify="required"> <label class="layui-form-label"> *收费项目编号 </label> <input type="text" v-model="formData.m_id" placeholder="请输入项目编号" class="layui-input" lay-verify="required"> <label class="layui-form-label"> *应付费用 </label> <input type="text" v-model="formData.e_amount" placeholder="请输入应付金额" class="layui-input" lay-verify="required"> <label class="layui-form-label"> *实付费用 </label> <input type="text" v-model="formData.a_amount" placeholder="请输入实付金额" class="layui-input" lay-verify="required"> <label class="layui-form-label"> *支付时间 </label> <input class="layui-input" v-model="formData.pay_Time" placeholder="点击选择日期" id="checkInDate" lay-verify="required"> <button class="layui-btn layui-btn-primary" type="button" @click="dialogVisible = false">取消</button> <button class="layui-btn" type="button" @click="submitForm">确定</button> </form> <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script> <script src="https://www.layuicdn.com/layui-v2.6.8/layui.js"></script> <script> // 获取收费明细数据(与原逻辑一致) function getDetailData() { const data = localStorage.getItem('detailData'); const defaultData = [ { id: '3', x_id: '林科大小区', m_id: '厕所广告位1', e_amount: 500, a_amount: 500,pay_Time: '2020-01-05' }, { id: '2', x_id: '林科大小区', m_id: '垃圾桶', e_amount: 50, a_amount: 50,pay_Time: '2020-01-05' }, { id: '1', x_id: '林科大万府', m_id: '停车位', e_amount: 500, a_amount: 500,pay_Time: '2020-01-05' } ]; try { return data ? JSON.parse(data) : defaultData; } catch (error) { console.error('localStorage数据解析失败,使用默认数据', error); return defaultData; } } new Vue({ el: '#app', data: { proList: getDetailData(), dialogVisible: false, dialogTitle: '编辑收费项目', currentIndex: -1, formData: { id: '', x_id: '', m_id: '', a_amount:'', e_amount: '', pay_Time: '' } }, mounted() { this.initLayui(); }, methods: { initLayui() { layui.use(['form', 'laydate', 'layer'], () => { window.layer = layui.layer; // 预加载laydate模块(关键:为弹框初始化做准备) this.laydate = layui.laydate; layui.form.render(); }); }, refresh() { this.detailList = getDetailData(); layer.msg('刷新成功', {icon: 1}); }, // editItem(index) { // const item = this.detailList[index]; // window.open(pro_detail_edit.html?id=${item.id}, '_blank'); // }, editItem(index) { this.dialogTitle = '编辑收费项目'; this.currentIndex = index; this.formData = JSON.parse(JSON.stringify(this.detailList[index])); this.dialogVisible = true; // 关键修改:弹框显示后初始化日期选择器 this.$nextTick(() => { // 重新渲染日期选择器并设置当前值 this.laydate.render({ elem: '#checkInDate', // 绑定输入框的id max: '2099-12-31', value: this.formData.pay_Time, // 显示当前记录的创建时间 done: (value) => { this.formData.pay_Time = value; // 选择日期后更新数据 } }); }); }, deleteItem(index) { const _this = this; layer.confirm('确定要删除这条记录吗?', function(){ _this.detailList.splice(index, 1); localStorage.setItem('detailData', JSON.stringify(_this.detailList)); _this.detailList = [..._this.detailList]; layer.msg('删除成功', {icon: 1}); }); }, submitForm() { if (!this.validateForm()) return; this.proList.splice(this.currentIndex, 1, this.formData); localStorage.setItem('proData', JSON.stringify(this.detailList)); this.dialogVisible = false; this.detailList = [...this.detailList]; layer.msg('编辑成功', {icon: 1}); }, validateForm() { if (!this.formData.x_id) { layer.msg('请输入所属小区', {icon: 5}); return false; } if (!this.formData.m_id) { layer.msg('请输入项目编号', {icon: 5}); return false; } if (!this.formData.a_amount) { layer.msg('请输入应付金额', {icon: 5}); return false; } if (!this.formData.e_amount) { layer.msg('请输入实付金额', {icon: 5}); return false; } if (!this.formData.m_id) { layer.msg('项目名称不能为空', {icon: 5}); return false; } if (!this.formData.pay_Time) { layer.msg('请选择创建时间', {icon: 5}); return false; } return true; }, } } ); </script> </body> </html>

ftl文件 <!DOCTYPE html> <html lang="en"> <#include "/common/taglibs.ftl"> <head> <meta charset="UTF-8"> <meta name="apple-mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-status-bar-style" content="black"> <title>农村居住区</title> <script src="${ctx}/plugins/jquery-3.3.1.min.js"></script> <script src="${ctx}/plugins/vue/vue.js"></script> <script src="${ctx}/plugins/layui/layui.js"></script> <script src="${ctx}/plugins/common/custom_layui.js"></script> <script src="${ctx}/plugins/nightMap/api.js"></script> <script src="${ctx}/plugins/nightMap/heatmap_min.js"></script> <script src="${ctx}/plugins/nightMap/mapv.js"></script> <script src="${ctx}/plugins/nightMap/haidian.js"></script> <script src="${ctx}/aiplatform/js/verifyList.js"></script> <style> .left-nav-ul .streetManage { border-left: 2px #2080E7 solid; } .left-nav-ul .streetManage a { color: #2080E7; background-image: url(${ctx}/othersSys/images/icon-lajilou2.svg); } .layui-table-box th, .layui-table-box td { text-align: center; } .layui-table-cell { height: auto; line-height: auto; } #addMap { width: 100%; } .administrativeNumber{ width: 100%; height: 50px; line-height: 50px; background-color: #e6f7ff; border: 1px solid #c3e0eb; padding-left: 10px; } </style> </head> <body class="body"> <iframe src="${ctx}/service/allNav" style="position: fixed;left: 0;top: 0;width: 18rem;height: 100%;" allowfullscreen allow="autoplay; fullscreen"></iframe> <#-- <#include "/infoSys/nav2.ftl">--> <#include "/infoSys/header.ftl">
{{config.title}} <form class="layui-form search-form" onkeypress="return event.keyCode != 13;"> <label class="layui-form-label first-label">{{item.title}}:</label> <select :name="item.prop" :id="item.prop" v-model="searchData[item.prop]" style="width:150px;height:30px" :lay-filter="'form_'+item.prop"> <option v-for="sItem in item.option" :value="sItem.value" >{{sItem.label}}</option> </select> <input type="text" :id="item.prop" :name="item.prop" v-model="searchData[item.prop]" :placeholder="请输入+item.title" autocomplete="off" class="layui-input"/> <#--阻止回车触发提交--> <select lay-verify="" type="hidden"> </select> <#-- <button type="button" class="layui-btn layui-btn-normal" id="taste_button" lay-submit="record"--> <#-- lay-filter="record">语音--> <#-- </button>--> <#-- <button type="button" class="layui-btn layui-btn-normal" id="start_button" class="start-button"--> <#-- style="display: none">停止--> <#-- </button>--> <button type="button" class="layui-btn layui-btn-normal" lay-submit="" lay-filter="formSearch">查询 </button> <button type="reset" lay-submit lay-filter="formReset" class="layui-btn layui-btn-primary">重置</button> </form> <#-- 行政村总数:{{ count }}--> 新建 <#-- <#-- class="moreUpload">导入--> 导入 <#-- <#-- href="../../../excel/model_street_export.xlsx" download="街镇模板">模板下载--> 导出 <#-- 打印--> <#-- 新建--> <#-- 导入--> <#-- 模板下载--> <#-- 导出--> <#-- 打印-->
<form class="layui-form" lay-filter="information" id="information" style="display:none;padding:35px 30px"> <label class="layui-form-label">* {{item.title}}</label> <select :name="item.prop" :id="item.prop" style="width:150px;height:30px"> <option v-for="sItem in item.option" :value="sItem.value">{{sItem.label}}</option> </select> 自定义内容 <input type="text" :name="item.prop" autocomplete="off" :lay-verify="item.rule" class="layui-input"/> <button type="button" v-show="type!=='look'" class="layui-btn layui-btn-lg layui-btn-normal" lay-submit="" lay-filter="up">提交 </button> <button type="button" class="layui-btn layui-btn-lg layui-btn-normal" onclick="layer.closeAll()">取消 </button> </form> <button type="button" class="layui-btn layui-btn-normal" id="choice">选择文件</button> <button type="button" class="layui-btn" id="checkFile">校验</button> <button type="button" class="layui-btn" id="startUpload" @click="fnUploadFile">开始上传</button> 操作步骤: 1.选择需要上传的文件 2.选择完成后点击“校验”按钮 3.校验通过后点击“确认上传” <script> var menusButtonList = '${Session.buttonList?default("")}'; menusButtonList = menusButtonList ? JSON.parse(menusButtonList) : [] $(document).on("keypress", "form", function (event) { return event.keyCode != 13; }) </script> <script src="${ctx}/infoSys/js/public.js"></script> <script src="${ctx}/infoSys/js/countryPlanning/list.js"></script> <script src="${ctx}/infoSys/js/add-map.js"></script> <script src="${ctx}/plugins/rtasr/hmac-sha256.js"></script> <script src="${ctx}/plugins/rtasr/HmacSHA1.js"></script> <script src="${ctx}/plugins/rtasr/md5.js"></script> <script src="${ctx}/plugins/rtasr/enc-base64-min.js"></script> <script src="${ctx}/plugins/rtasr/index.js"></script> <script src="${ctx}/infoSys/js/navPublic.js"></script> </body> </html> js文件 const script = document.createElement('script'); script.src = ${ctx}/infoSys/js/commonJs/formConfig.js; // 替换为实际的JavaScript文件路径 document.head.appendChild(script); script.onload = function() { // 此处可以执行其他操作 const config = countryPlanningCfg var vues = new Vue({ el: '#app', // mixins: [myMixins], // components:{ // upload // }, watch:{ 'searchData.streetName':function (n,o){ this.loadCommunityData(n) } }, computed:{ config:()=>{ return config } }, data: { navList:[],//nav模块 paramList:{},//nav模块-url tableHead: config.tableHead, streetList: [], communityList: [], menuBtn: [], btnJson: config.btnJson, isHaveHandle: false, searchListFlag: false, searchLi: [], printQuery: '', cheakliat: "", // searchData:{}, name: '', imgShow: false, type: '', url: '', uploadFile: new FormData(), uploadsVar: '', count:0, searchData: { name: '', commName: '', streetName: '', }, }, mounted: function () { // this.getNav() this.menuListBtn() this.table(); this.loadStreetData() // 绑定街道下拉框 change 事件 const streetSelect = document.getElementById('streetName'); if (streetSelect) { streetSelect.addEventListener('change', this.onStreetChange); } layui.use('form', () => { const form = layui.form form.render('select') // 页面加载时初始化所有下拉框 }) const self = this layui.use(['form'], function () { layui.form.on('select(form_streetName)', function (data) { self.searchData.streetName = data.value }) }) // this.selcetInit(); }, methods: { selectChange(prop){ console.log(prop,'prop') }, // 加载街道数据 loadStreetData() { const self = this $.ajax({ url: ctx + '/service/region/list', type: 'GET', data: { grade: 3 // 街道等级为3 }, success: function (res) { console.log(res,'resss') if (res.code === 0) { const streetOptions = res.data.map(item => ({ label: item.name, value: item.coding, coding: item.coding })) console.log('街道数据加载完成:', streetOptions) // 更新街道下拉选项 const streetItem = self.config.searchForm.find(i => i.prop === 'streetName'); if (streetItem) streetItem.option = streetOptions; // 更新搜索表单和编辑表单中的街道下拉选项 self.$set( self.config.searchForm.find(item => item.prop === 'streetName'), 'option', streetOptions ) console.log(self.config.searchForm,'self.config.searchForm') self.$set( self.config.form.find(item => item.prop === 'streetName'), 'option', streetOptions ) self.$forceUpdate() self.$nextTick(() => { setTimeout(() => { layui.form.render('select') }, 100) }) } else { console.error('加载街道数据失败:', res.msg) } }, error: function (xhr, status, error) { console.error('请求失败:', error) } }) }, // 根据街道编码加载社区数据 loadCommunityData(streetCoding) { const self = this; $.ajax({ url: ctx + '/service/region/list', type: 'GET', data: { grade: 4, // 社区等级为4 coding: streetCoding // 传入街道编码 }, success: function (res) { if (res.code === 0) { const commOptions = res.data.map(item => ({ label: item.name, value: item.id })); // 更新社区下拉选项 const commItem = self.config.searchForm.find(i => i.prop === 'commName'); if (commItem) { commItem.option = commOptions; } // 更新搜索表单和编辑表单中的社区下拉选项 const searchCommItem = self.config.searchForm.find(item => item.prop === 'commName'); const formCommItem = self.config.form.find(item => item.prop === 'commName'); if (searchCommItem) { searchCommItem.option.splice(0); // 清空旧数据 searchCommItem.option.push(...commOptions); } if (formCommItem) { formCommItem.option.splice(0); formCommItem.option.push(...commOptions); } self.$forceUpdate() self.$nextTick(() => { layui.form.render('select'); // 重新渲染下拉框 }); } }, error: function (xhr, status, error) { console.error('请求失败:', error); } }); }, // 监听街道选择变化 onStreetChange(event) { console.log('111',event) const streetValue = event.target.value; // 获取选中的街道值 const selectedStreet = this.config.searchForm .find(item => item.prop === 'streetName')?.option .find(item => item.value === streetValue); if (selectedStreet && selectedStreet.coding) { this.loadCommunityData(selectedStreet.coding); // 加载社区数据 } else { // 清空社区下拉框 const communityItem = this.config.searchForm.find(item => item.prop === 'commName'); if (communityItem) communityItem.option = []; const communityFormItem = this.config.form.find(item => item.prop === 'commName'); if (communityFormItem) communityFormItem.option = []; } self.$forceUpdate() this.$nextTick(() => { layui.form.render('select'); // 重新渲染下拉框 }); }, menuListBtn() { this.$nextTick(() => { let arr = [] menusButtonList.forEach((e) => { if (e.menuId == menusIds) { this.menuBtn.push(e) if (e.attrType == 1) { arr.push(e) } } }) console.log(this.menuBtn) this.menuBtn.forEach((e) => { if (e.buttonClass == 'add') { vues.btnJson.add = true } else if (e.buttonClass == 'moreUpload') { vues.btnJson.moreUpload = true } else if (e.buttonClass == 'download') { vues.btnJson.download = true } else if (e.buttonClass == 'export') { vues.btnJson.export = true } else if (e.buttonClass == 'print') { vues.btnJson.print = true } }) if (arr.length == 0) { this.isHaveHandle = true; this.tableHead[0].pop(); } }) }, //显示大图片 showBigImage(e) { layer.open({ type: 1, title: false, closeBtn: 0, shadeClose: true, //点击阴影关闭 area: [$(e).width + 'px', $(e).height + 'px'], //宽高 content: "" }); }, //打印 prints() { var v = document.createElement("div"); let self = this; $.ajax({ url: ctx + config.list, data: {limit: 999999, page: 1, ...self.searchData}, success: function (res) { if (res.code == 0) { if (res.data.length) { // <head></head> let str = '<html><body><head><style>tr,td{padding:3px}.layui-table {width: 100%;background-color: #fff;color: #666;margin: 10px 0;}.layui-table-cell {height: 28px;line-height: 28px;padding: 0 15px;position: relative;box-sizing: border-box}.layui-table-cell{top: -1px;padding: 0}.layui-table-cell .layui-table-link {color: #01AAED}</style></head>'; str += ''; str += ''; config.tableHead[0].forEach(item=>{ str += ${item.title} }) str += ''; str += ''; str += ''; for (var i = 0; i < res.data.length; i++) { str += '<tr class="layui-table" >'; config.tableHead[0].forEach(item=>{ if(item.type == 'numbers'){ str += ${i+1}; } str += ${res.data[i][item.prop] ? res.data[i][item.prop]:'-'} }) str += ''; } str += ''; str += '</body></html>'; var h = window.open("打印窗口", "_blank"); h.document.write(str + $(v).prop("outerHTML")); h.document.close(); console.log(h) h.print(); h.close(); } else { layerObj.failMsg("该条件下暂无数据,无法打印!"); } } ; } }); }, //list table: function () { var self = this; //默认list var dataUrl = ctx + config.url.list; const tableHeadArr = self.tableHead[0].map(item=>{ let templet = null if(item.templet){ templet = item.templet }else if(item.title=='操作'){ templet =function (res){ var btn = ""; btn += '详情'; return btn; } }else{ templet =function (res) { return !res[item.prop] ? '-' : res[item.prop]; } } return { ...item, templet:templet } }) layerObj.tableList([tableHeadArr], 'allTable', dataUrl, 'tool(allTable)', function (res, curr, count) { self.count = count }, function (e) { let id = e.data.id; //查看 if (e.event === "look") { self.alertFun(id, 'look',e.data) } //编辑 if (e.event === "edit") { self.alertFun(id, 'edit') } // 删除 if (e.event === 'delete') { layer.confirm('是否删除?', { btn: ['确定', '取消'] //可以无限个按钮 }, function (index, layero) { layerObj.ajaxSend( 'get', ctx + ${config.url.delete}?id= + id, 'json', {}, function (data) { if (data.code === 1) { layer.alert(data.msg); } else { self.table(); } } ); layer.close(index); }, function (index) { layer.close(index); }); } }, "allTable"); //搜索 layui.use(['form', 'table', 'upload'], function () { var form = layui.form; var table = layui.table; var upload = layui.upload; form.on("submit(formSearch)", function (data) { table.reload("allTable", { headers: self.tableHead, url: dataUrl, page: {curr: 1}, where: data.field, done: function () { } }, 'data'); }); // 重置 form.on("submit(formReset)", function (data) { self.condition = null table.reload("allTable", { headers: self.tableHead, url: dataUrl, page: {curr: 1}, where: self.condition, done: function () { } }, 'data'); }); //导出 form.on("submit(export)", function (data) { var name = $('input[name="name"]').val(); var cs = ctx + ${config.url.export}?name= + name; window.open(cs); }); //上传附件 var uploadInst = upload.render({ elem: '#uploadBtn' , url: ctx + '/service/upload/minio/uploadAttach' , accept: 'file' //普通文件 , choose: function (obj) { obj.preview(function (index, file, result) { self.fileName = file.name; $('#attachUrl').html(file.name); }) } , done: function (res) { if (res.code > 0) { self.filePath = res.data.filePath self.imgShow = true $('#attachUrl').on('click', function () { window.location.href = ctx + '/service/upload/minio/downloadReplaceFileName?filename=' + $('#attachUrl').text() + '&fileUrlName=' + res.data.fileName }) layer.msg('上传成功'); }else { layer.msg(res.msg); } } }); }); }, //添加和编辑弹窗 alertFun(myid, type,data) { var self = this; self.type = type document.getElementById("information").reset(); self.imgShow = false $('#image').val(""); $("#roleIds,#roleNames").val(""); var titleName; var postUrl = ''; if (type == 'edit') { titleName = "编辑"; postUrl = ctx + config.url.edit } else if (type == 'add'){ titleName = "新建"; postUrl = ctx + config.url.add }else{ titleName = "查看"; } $('#imageWrapper').html('<input type="hidden" name="image" id="image" />') layui.use(['form', 'layer', 'upload', 'laydate'], function () { let form = layui.form; let layer = layui.layer; let upload = layui.upload; let laydate = layui.laydate; var myLayer = layer.open({ title: titleName + "菜单", type: 1, area: ["900px", "700px"], content: $("#information"), success: function () { if (myid && config.url.detail) { //回显 $.ajax({ url: ctx + ${config.url.detail}?id= + myid, success: function (res) { const obj = {} config.form.forEach((item,index)=>{ obj[item.prop] = res.data[item.prop] ? res.data[item.prop] : '' }) form.val("information",obj); //文件 var image = res.data.image; self.filePath = image if (image && image != "") { self.imgShow = image ? true : false; $('#attachUrl').html(image.split('_')[image.split('_').length - 1]); $('#attachUrl').on('click', function () { window.location.href = ctx + '/service/upload/minio/downloadReplaceFileName?filename=' + $('#attachUrl').text() + '&fileUrlName=' + image }) } self.$nextTick(() => { form.render() }) } }); }else if(!config.url.detail){ const obj = {} config.form.forEach((item,index)=>{ obj[item.prop] = data[item.prop] ? data[item.prop] : '' }) form.val("information",obj); } else { form.val("information", {}); $('#attachUrl').html(''); self.imgShow = false; self.$nextTick(() => { form.render() }) } form.on('submit(up)', function (data) { let paramObj = data.field; paramObj.pid = self.pid; paramObj.imageUrl = self.filePath; if (myid) { paramObj.id = myid; } layerObj.commonAjax('POST', postUrl, "json", paramObj, function (data) { if (data.code == 0) { layer.closeAll(); layerObj.successMsg("保存成功!"); self.table(); } else { layerObj.failMsg(data.msg); } }); }); // 校验 form.verify(config.formVerify) } }); }); }, //点击搜索列表 queryBtn: function () { var self = this; self.searchListFlag = true; $.ajax({ url: ctx + '/service/baiduMap/get/suggestion', type: 'post', data: { "keyword": self.printQuery, "region": "北京市", "pageSize": 20, "pageNum": 1 }, success: function (res) { if (res.data.results) { self.searchLi = res.data.results; } } }); }, //确认选择li chooseLi: function (item) { var self = this; self.searchListFlag = false; var lng = item.location.longitude, lat = item.location.latitude; addPointFun(lng, lat); $(".longitudeLatitude").val(lng + "," + lat); $(".longitude").val(lng); $(".latitude").val(lat); self.printQuery = item.address; $(".detailAddress").val(item.address); bm.centerAndZoom(new BMap.Point(lng, lat), 14); }, // 页面初始化 pageInit() { var self = this; layui.use(['form', 'upload', 'layer'], function () { var upload = layui.upload; self.uploadsVar = upload.render({ elem: '#choice', accept: 'file', acceptMime: 'application/vnd.ms-excel, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', exts: 'xlsx|xls', //只允许上传excel文件, auto: false, bindAction: '#checkFile' }); }) }, // 上传弹框 uploads() { $('#choiceWrapper').html('<button type="button" class="layui-btn layui-btn-normal" id="choice">选择文件</button>'); this.uploadsVar = ''; $('.layui-upload-choose').html(''); $('#checkFileWrapper').html('<button type="button" class="layui-btn" id="checkFile">校验</button>'); this.pageInit() this.$nextTick(() => { $('#startUpload').css('display', 'none') }) let self = this layui.use(['form', 'upload', 'layer'], function () { let form = layui.form; let layer = layui.layer; var upload = layui.upload; var checkurl = '' var myLayer = layer.open({ title: '上传文件', type: 1, area: ["680px", "250px"], content: $("#UploadFile"), success: function (res) { // 校验接口 checkurl = ctx + '/service/base/street/checkExcelUpload' self.uploadsVar.reload({ elem: '#choice', accept: 'file', acceptMime: 'application/vnd.ms-excel, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', exts: 'xlsx|xls', //只允许上传excel文件, url: checkurl, auto: false, bindAction: '#checkFile', choose: (obj) => { $('#startUpload').css('display', 'none') self.uploadFile = new FormData(); var files = obj.pushFile(); var firstProp; var count = 0; // 获取第一个属性 for (var key in files) { if (files.hasOwnProperty(key)) { firstProp = key; break; } } // 统计文件数 for (var k in files) { count++; } if (count > 1) { delete files[firstProp]; } //预读本地文件,如果是多文件,则会遍历。(不支持ie8/9) obj.preview(function (index, file, result) { self.uploadFile.append('file', file); }); }, done: function (res, index) { if (res.code == 0) { layer.msg(res.msg); $('#startUpload').css('display', 'inline-block') } else { layer.alert(res.msg); $('#startUpload').css('display', 'none') } } }); } , end: () => { $('#startUpload').css('display', 'none') } }) }) }, // 上传 fnUploadFile() { var self = this layui.use(['layer'], function () { var layer = layui.layer; // 上传接口 var url = '' url = ctx + config.url.import let key = self.uploadFile.getAll('file')[0]; $.ajax({ url: url, method: 'post', data: self.uploadFile, contentType: false, processData: false, dataType: "json", async: false, success: (res) => { if (res.code == 0) { layer.msg(res.msg); setTimeout(() => { layer.closeAll(); self.table(); }, 2500); } else { layer.alert(res.msg); } }, fail: (res) => { layer.alert(res.msg); } }) }) }, //nav-获取列表 getNav(){ let self = this let url = document.location.toString() let urlObj = url.split('?') let paramObj let paramList = {}//url参数集合 if(urlObj.length >0){ paramObj = urlObj[1].split('&') paramObj.forEach((val,index)=>{ let arrList = val.split('=') Object.defineProperty(paramList,arrList[0],{value:arrList[1]}) // paramList.arrList[0] = arrList[1] }) } self.paramList = paramList //获取菜单列表并渲染 $.ajax({ url:ctx + "/service/authorityMenu/listByMenuId?menuId="+paramList.pid, type:"get", success:function (res) { console.log('菜单请求返回值',res) if(res.code == 0){ //修改数据内容 渲染nav选中项 res.data.forEach((val,index)=>{ if(val.childMenus.length>0){ val.childMenus.forEach((value)=>{ value.select = false; if(value.id == self.paramList.cid||value.id == self.paramList.cPid){ value.select = true; } value.childMenus }) } }) self.navList = res.data } } }) }, //nav-页面跳转 toUrl(items){ console.log(items) if(items.url.indexOf('?') != -1){ window.location.href = ctx + items.url+'&pid='+this.paramList.pid+'&cid='+items.id+'&cPid='+items.pid }else{ window.location.href = ctx + items.url+'?pid='+this.paramList.pid+'&cid='+items.id+'&cPid='+items.pid } }, //nav-渲染nav选中项 changeNavState(items){ items.select = !items.select }, //时间戳转日期函数 DateFormat(sjc) { var date = new Date(sjc); var y = date.getFullYear(); var m = date.getMonth() + 1; m = m < 10 ? '0' + m : m; var d = date.getDate(); d = d < 10 ? ("0" + d) : d; var h = date.getHours(); h = h < 10 ? ("0" + h) : h; var min = date.getMinutes(); min = min < 10 ? ("0" + min) : min; var s = date.getSeconds(); s = s < 10 ? ("0" + s) : s; var str = y + "-" + m + "-" + d + " " + h + ":" + min + ":" + s; return str; }, }, }) }; 点击街镇和社区下拉选择后进行查询选择的数据

最新推荐

recommend-type

使用layui前端框架弹出form表单以及提交的示例

在本文中,我们将深入探讨如何使用layui前端框架来弹出form表单并进行数据提交。layui是一款基于HTML5和CSS3的轻量级前端组件库,它提供了丰富的UI组件和强大的交互功能,使得Web开发更加便捷高效。下面,我们就按照...
recommend-type

layui 图片上传+表单提交+ Spring MVC的实例

在本实例中,我们主要探讨了如何利用Layui库进行图片上传,同时结合表单提交和Spring MVC框架实现后端处理。Layui是一个轻量级的前端组件库,提供了丰富的UI组件,包括上传功能。以下是具体的知识点: 1. **Layui...
recommend-type

layui弹出层按钮提交iframe表单的方法

在本文中,我们将深入探讨如何使用layui框架在弹出层中通过按钮提交iframe表单的方法。layui是一款轻量级的前端UI框架,它提供了丰富的组件和便捷的操作方式,包括弹出层(layer)和表单处理等。在某些场景下,我们...
recommend-type

layui清空,重置表单数据的实例

在网页开发中,经常需要处理用户输入的数据,例如在用户完成表单提交后清空表单,以便用户可以重新填写。layui 是一个流行的前端组件库,提供了丰富的UI元素和便捷的表单处理功能。本篇将详细介绍如何在layui中实现...
recommend-type

layui 对弹窗 form表单赋值的实现方法

在本文中,我们将深入探讨如何使用layui框架在弹窗中为form表单赋值,特别是在点击编辑按钮后实现数据回显到子页面表单内的功能。layui是一个优秀的前端UI框架,提供丰富的组件和便捷的API,包括弹窗、表单等,使得...
recommend-type

RaspberryMatic与Docker整合:CCU2固件容器化操作指南

### Docker与CCU2固件整合 #### 知识点1:Docker容器技术 Docker是一种开源的容器化平台,它允许开发者将应用及其依赖打包到一个可移植的容器中,该容器可以在任何支持Docker的机器上运行。Docker容器和传统的虚拟机不同,它不需要完整的操作系统镜像,而是利用宿主机的操作系统内核,实现了轻量级的隔离,启动速度快,资源消耗低。 #### 知识点2:CCU2固件与OpenHAB CCU2(CCU代表Comet Control Unit)固件通常用在HomeMatic智能家居自动化系统中,它负责管理和控制HomeMatic的设备。CCU2运行的是一个基于Linux的自定义系统,专门优化用于与HomeMatic硬件和软件通信。当把CCU2固件用于Docker容器时,意味着你可以在任何支持Docker的设备上,通过容器化的方式部署和运行CCU2环境,从而支持HomeMatic设备的控制。 #### 知识点3:RaspberryMatic RaspberryMatic是为树莓派量身打造的一个项目,它允许用户在树莓派上运行CCU2固件。项目提供了一整套的HomeMatic体验,包括备份功能、Dutty-Cycle、LAN GW等。RaspberryMatic的一个显著优点是支持多种架构,包括x86_64/amd64、ARM和ARM64。 #### 知识点4:Docker容器部署脚本 "docker-ccu"项目提供了一套脚本,这些脚本能够自动化创建一个Docker容器来运行CCU2固件。通常这类脚本命名为`deploy.sh`,开发者或者最终用户可以通过运行这些脚本来快速部署和启动Docker容器,而无需手动配置和启动容器的每一个步骤。 #### 知识点5:数据备份与迁移 在使用Docker容器进行部署时,用户可能需要在不同环境下迁移数据或者保留原有数据。脚本中提到了数据保留的问题,如果用户之前使用的是其他方式部署,比如非Docker方式或者使用了特定的docker卷或者容器名称,那么在调用`deploy.sh`脚本部署时,需要对设置进行相应的调整,以保证数据的完整性。 #### 知识点6:仓库维护与开源社区 项目维护者提到了不再计划继续更新该存储库,并提出了将仓库设置为只读模式的想法。这在开源社区中是比较常见的情况,尤其是在维护者有新的兴趣点或者由于个人时间限制时。在此情况下,开源项目可以通过社区协作来继续维护,或者寻求其他维护者的接手。 #### 知识点7:Shell脚本编写 由于项目中提到了一个叫做`deploy.sh`的脚本文件,这说明脚本是用Shell语言编写的。Shell脚本非常适合于执行自动化任务,比如配置环境、启动服务、管理文件系统等,因此在自动化部署或系统管理中经常被使用。了解Shell脚本编写,对于自动化管理Docker容器等任务至关重要。 #### 知识点8:社区支持和反馈 项目维护者在描述中提到,如果在一个月内没有收到任何关于将官方CCU作为容器使用的反馈,将会把仓库设置为只读模式。这表明了开源社区中项目的发展很大程度上依赖于社区成员的反馈和支持。因此,了解如何与开源项目互动,提交问题、建议和补丁,是参与开源社区的重要途径。 #### 知识点9:固件概念与兼容性 CCU2固件特别设计用于某些特定硬件,但通过Docker化的方式,开发者可以跨平台运行CCU2固件,这增加了固件的兼容性。Docker的隔离性允许用户在一个通用的软件层面上运行原本可能受限于特定硬件的固件,从而扩展了固件的应用场景。 #### 知识点10:操作系统架构支持 项目支持包括x86_64/amd64、ARM和ARM64在内的多种架构,说明了Docker容器在不同硬件平台上的高度可移植性。这一特点使得开发者可以在各种硬件上部署相同的环境,简化了跨平台应用的开发和部署。 #### 结语 该文档提供了一个关于如何将特定固件整合入Docker容器的方案,并说明了项目维护者对于未来发展的规划。这些内容不仅对有志于尝试或扩展该项目的个人有指导意义,同时也展示了开源社区协作以及Docker技术在部署和管理复杂系统环境中的重要性和便利性。
recommend-type

手把手封装SDK:C#如何高效集成汉印D35BT打印功能

# 摘要 本文围绕C# SDK封装与汉印D35BT打印机集成的技术实践展开,系统阐述了SDK封装的理论基础、架构设计及面向对象设计原则的应用。文章分析了汉印D35BT打印机的通信协议与API调用方式,并详细介绍了在C#中实现蓝牙设备交互与数据发送的方法。通过核心打印功能的类封装、异步任务处理机制的设计,提升了SDK的易用性与扩展性。结合WinForm项目示例验证功能完整性后,进一步探讨了SDK的性能优化策略、测试方法及发布流程,构建了从设计、实现到部署的完整技术路径。 # 关键字 SDK封装;蓝牙通信;面向对象设计;异步打印;API调用;NuGet包发布 参考资源链接:[C#开
recommend-type

VM虚拟机ubuntu桥接主机无线网络

### 配置 VMware Ubuntu 桥接模式连接无线网络 在 VMware 中配置 Ubuntu 虚拟机通过桥接模式连接主机的无线网络,需要确保虚拟机与主机处于同一网络段,并能够通过主机的无线网卡直接访问外部网络。以下是详细的配置步骤: #### VMware 设置桥接模式 1. **以管理员权限运行 VMware**,进入 **编辑 > 虚拟网络编辑器**。 2. 在 **虚拟网络编辑器** 界面中,找到 **VMnet0(桥接模式)** 的设置部分。 3. 在 **“桥接到”** 的下拉菜单中,选择主机的无线网卡设备。 4. 勾选 **“自动设置桥接”** 选项,确保 VMwar
recommend-type

Ruby on Rails跳蚤市场应用开发详解

根据提供的文件信息,我们可以从中提炼出以下知识点: ### 标题知识点 - **freemarket_sample_72h** - 标题暗示这是一份关于名为“freemarket”的跳蚤市场应用程序的72小时开发样例或原型。 - 样例名称“freemarket_sample_72h”可能用于内部标识或者版本控制,表明该样本是在有限的时间内(即72小时内)完成的。 ### 描述知识点 - **网站结构** - 首页:应用程序的入口点,通常包含总体介绍和导航链接。 - 产品页面:展示产品的列表或者详细信息。 - 展览页:可能指专门展示某些特殊产品或促销产品的页面。 - 应用信息:关于应用程序的基本信息,如版本号、开发团队、联系方式等。 - 应用概述:对应用程序功能和目标用户群体的简介。 - **用户账户信息** - 测试账号:为开发者或测试者提供的虚拟用户账号信息,以便进行应用程序的内部测试。 - 购买者信息:提供了邮箱地址、密码以及购买卡信息,是进行交易和购买所必需的。 - 卖家信息:提供了卖家的邮箱地址和密码,用于登录卖家账户进行产品上架和管理。 - **功能列表** - 新用户注册:允许新用户创建账户。 - 登录功能:用户可以使用凭证登录应用程序。 - 产品列表功能:展示所有可购买的产品。 - 产品购买功能:用户可以购买产品,涉及到支付信息的处理。 - 产品类别注册和显示:允许用户查看不同的产品分类。 - 产品详细信息显示:展示每个产品的详细信息,如描述、价格等。 - 编辑和删除列出的产品:赋予管理员或卖家权利更新或移除产品信息。 - **开发环境** - Ruby 2.5.1:这是Ruby编程语言的一个版本。 - Ruby on Rails 5.4.2:这是一个使用Ruby语言编写的开源Web应用框架。 - MySQL 14.14:这是一个流行的开源关系型数据库管理系统。 - Github:一个用于代码托管和版本控制的平台。 - AWS:亚马逊提供的云服务平台,包括EC2(弹性计算云)和S3(简单存储服务)。 - Capistrano:是一个开源的自动化部署工具,常用于Ruby on Rails项目。 - **开发周期和工作时间** - 开发时间:约4周,说明了项目从开始到完成所需的时间。 - 每天平均工作时间:大约9小时,表明项目的紧凑和开发团队的努力。 - 开发系统人数:4,指出了参与该项目的开发人员数量。 - 敏捷类型:可能指的是一种开发过程,强调快速迭代和响应变化。 ### 标签知识点 - **Ruby** - 这个标签直接指向了Ruby编程语言,说明该应用程序是使用Ruby开发的。 ### 压缩包子文件的文件名称列表知识点 - **freemarket_sample_72h-master** - 这是源代码压缩包的文件名称,指示了一个版本控制中的主分支(master)。 通过这些信息,我们可以了解到该应用程序是一个在线跳蚤市场,它允许用户注册、登录、查看和购买产品,并且提供了产品管理功能。项目采用Ruby语言和Ruby on Rails框架开发,并使用了多种技术和平台,如MySQL数据库、Github、AWS云服务以及Capistrano部署工具。项目开发遵循敏捷开发原则,并在一个紧凑的时间表中完成。
recommend-type

【C#条码打印实战技巧】:汉印D35BT数据格式转换全攻略

# 摘要 本文围绕C#语言实现条码打印的技术方案展开,重点以汉印D35BT打印机为实践对象,系统性地讲解了条码打印中数据格式的基本原理与处理方法。文章分析了条码打印的数据流向、通信协议与命令集结构,探讨了在C#开发环境下实现数据格式转换、命令封装与容错机制的关键技术。通过完整的打印流程实现、性能优化策略以及常见问题排查方法的介绍,帮助开发者构建高效稳定的条码打印应用。同时,文章还展望了条码打印技术在多协议支持、云服务集成与企业级系统对接方面的拓展方向。 # 关键字 条码打印;数据格式;C#开发;通信协议;命令封装;容错机制 参考资源链接:[C#开发汉印D35BT条码打印机源代码