--- title: 页面组件 description: 页面上使用的组件 published: true date: 2021-09-09T09:30:27.823Z tags: wg-basic editor: markdown dateCreated: 2021-09-08T06:41:19.351Z --- # 1. 表单下拉列表 ```html
``` # 2. 表单下拉联动 ```html
``` 初始化 ```javascript // 统一渲染方法 function initSelectRadioCheckboxTemplate(templateId, templateBoxId, data, callback) { laytpl(document.getElementById(templateId).innerHTML).render(data, function(html) { document.getElementById(templateBoxId).innerHTML = html; }); form.render('select', templateBoxId); if(callback) { callback(); } } // 初始化1级区域下拉选择 function initArea1Select(selectValue) { top.restAjax.get(top.restAjax.path('api/datadictionary/listdictionarybyparentid/81583ade-5466-49aa-b7b6-c643c131ea34', []), { }, null, function(code, data, args) { initSelectRadioCheckboxTemplate('area1SelectTemplate', 'area1SelectTemplateBox', data, function() { var selectObj = {}; selectObj['area1'] = selectValue; form.val('dataForm', selectObj); }); }, function(code, data) { top.dialog.msg(data.msg); }); } // 初始化2级区域下拉选择 function initArea2Select(area1, selectValue) { if(!area1) { initSelectRadioCheckboxTemplate('area2SelectTemplate', 'area2SelectTemplateBox', [], function() { var selectObj = {}; selectObj['area2'] = selectValue; form.val('dataForm', selectObj); }); return; } top.restAjax.get(top.restAjax.path('api/datadictionary/listdictionarybyparentid/{area1}', [area1]), { }, null, function(code, data, args) { initSelectRadioCheckboxTemplate('area2SelectTemplate', 'area2SelectTemplateBox', data, function() { var selectObj = {}; selectObj['area2'] = selectValue; form.val('dataForm', selectObj); }); }, function(code, data) { top.dialog.msg(data.msg); }); } ``` 赋值初始化 ```javascript initArea1Select(data['area1']); initArea2Select(data['area1'], data['area2']); ``` 联动 ```javascript // area1 选择事件,多级联动继续添加 form.on('select(area1)', function(data) { initArea2Select(data.value); }); ``` # 3. 表单单选 ```html
``` # 4. 表单多选 ```html
``` 处理多选结果 ```javascript var authorizedGrantTypes = top.restAjax.checkBoxToString(formData.field, 'authorizedGrantTypes'); formData.field.authorizedGrantTypes = authorizedGrantTypes; ``` 赋值多选结果 ```javascript var authorizedGrantTypes = data.authorizedGrantTypes.split(','); var formObj = {}; for(var i = 0, item = authorizedGrantTypes[i]; item = authorizedGrantTypes[i++];) { formObj['authorizedGrantTypes['+ item +']'] = true; form.val('dataForm', formObj); } form.render(null, 'dataForm'); ``` # 5. 表单下拉、单选、复选统一处理 ```javascript // 初始化选择框、单选、复选模板 function initSelectRadioCheckboxTemplate(templateId, templateBoxId, data, callback) { laytpl(document.getElementById(templateId).innerHTML).render(data, function(html) { document.getElementById(templateBoxId).innerHTML = html; }); form.render('select', templateBoxId); if(callback) { callback(); } } ``` # 6. viewer,具体是用参考官方API ```html ``` # 7. 列表按钮 ```javascript // 列表模板 templet: function(item) { return ''; } // 事件处理 table.on('tool(dataTable)', function(obj) { var layEvent = obj.event; var data = obj.data; if(layEvent === 'resetPasswordEvent') { top.dialog.open({ url: top.restAjax.path('route/system/user/update-rest-password.html?userId={userId}', [data.userId]), title: '【'+ data.userName +'】重置密码', width: '320px', height: '280px', onClose: function() { reloadTable(); } }); } }); ``` # 8. 选择人员(表格) ```javascript top.dialog.dialogData.oldSelectedUserList = [{userId:''}]; top.dialog.open({ url: 'route/common/listselectuser?selectType=checkbox(radio)', title: '选择用户', width: '1000px', height: '500px', onClose: function() { var newSelectedUserList = top.dialog.dialogData.newSelectedUserList; if(newSelectedUserList.length != 0) { // newSelectedUserList[0].userId; // newSelectedUserList[0].userName; } top.dialog.dialogData.oldSelectedUserList = [];    } }); ``` # 9. 文件上传(图片示例) 依赖 ```html ``` 表单代码 ```html
``` js代码 ```js var viewerObj = {}; function refreshDownloadTemplet(fileName, file) { var dataRander = {}; dataRander[fileName] = file; laytpl(document.getElementById(fileName +'FileDownload').innerHTML).render(dataRander, function(html) { document.getElementById(fileName +'FileBox').innerHTML = html; }); } // 初始化文件列表 function initFileList(fileName, ids, callback) { var dataForm = {}; dataForm[fileName] = ids; form.val('dataForm', dataForm); if(!ids) { refreshDownloadTemplet(fileName, []); if(callback) { callback(fileName, []); } return; } top.restAjax.get(top.restAjax.path('api/file/listfilebyfileid', []), { ids: ids }, null, function(code, data) { refreshDownloadTemplet(fileName, data); if(callback) { callback(fileName, data); } }, function(code, data) { top.dialog.msg(data.msg); }); } function initFactoryGateUploadFile() { var files = $('#factoryGate').val(); initFileList('factoryGate', files, function(fileName) { var viewer = new Viewer(document.getElementById(fileName +'FileBox'), {navbar: false}); viewerObj[fileName] = viewer; }); form.on('button(factoryGateUploadFile)', function(obj) { var name = this.dataset.name; var explain = this.dataset.explain; top.dialog.file({ type: 'image', title: '上传'+ explain, width: '400px', height: '420px', maxFileCount: '1', onClose: function() { var uploadFileArray = top.dialog.dialogData.uploadFileArray; if(typeof(uploadFileArray) != 'undefined' && uploadFileArray.length > 0) { var files = $('#'+ name).val(); for(var j = 0, file = uploadFileArray[j]; file = uploadFileArray[j++];) { if(files.length > 0) { files += ','; } files += file.data; } initFileList(name, files, function(fileName) { viewerObj[fileName].update(); }); } } }); }); form.on('button(factoryGateRemoveFile)', function(obj) { var name = this.dataset.name; var id = this.dataset.id; var files = $('#'+ name).val().replace(id, ''); files = files.replace(/\,+/g, ','); if(files.charAt(0) == ',') { files = files.substring(1); } if(files.charAt(files.length - 1) == ',') { files = files.substring(0, files.length - 1); } initFileList(name, files, function(fileName) { viewerObj[fileName].update(); }); }); } ``` 代码以厂区图片为例,实际只需要替换对应的内容即可:模板名称、模板BOX名称 # 10. 选择用户 ```javascript top.dialog.dialogData.selectedUserIds = $('#selectedUserIds').val(); top.dialog.open({ url: top.restAjax.path('route/department/user/select-user', []), title: '选择用户', width: '500px', height: '500px', onClose: function() { var selectedUsers = top.dialog.dialogData.selectedDepartmentUsers; // 这里写处理逻辑 if(selectedUsers && selectedUsers.length > 0) {} } }) ``` 说明: 1. `top.dialog.dialogData.selectedUserIds` 的值为 **下划线** 分割的ID 2. 返回的列表中可以获取:userId,userName # 11. 选择地区 ```javascript top.dialog.open({ title: '选择地区', url: top.restAjax.path('route/area/get-select?areaName={areaName}', [encodeURI($('#areaName').val())]), width: '600px', height: '225px', onClose: function() { var selectedAreaArray = top.dialog.dialogData.selectedAreaArray; var areaCode = ''; var areaName = ''; if(selectedAreaArray.length > 0) { areaCode = selectedAreaArray[selectedAreaArray.length - 1].areaCode; for(var i = 0, item; item = selectedAreaArray[i++];) { if(areaName) { areaName += ','; } areaName += item.areaName; } } $('#areaCode').val(areaCode); $('#areaName').val(areaName); } }) ``` 说明: 1. 打开页面时的参数 **areaName** 用于回显,可以不传。 2. 返回的列表中可以获取:areaId,areaName,areaCode