---
title: 页面组件
description: 页面上使用的组件
published: true
date: 2021-11-01T03:38:24.581Z
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 '';
}
// 按钮组
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
```
# 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名称
使用layui
```js
// 初始化健康码图片上传
function initHealthCodeUploadFile() {
var files = $('#healthCode').val();
initFileList('healthCode', files, function(fileName) {
var viewer = new Viewer(document.getElementById(fileName +'FileBox'), {navbar: false});
viewerObj[fileName] = viewer;
});
// 这部分注意,与上面代码不同
function initUpload() {
upload.render({
elem: '#healthCodeUploadFile',
url: restAjax.path('app/file/upload-image-release/{userId}', [userId]),
field: 'image',
done: function(res) {
var dataset = this.item[0].dataset;
var name = dataset.name;
var files = $('#'+ name).val();
if(files.length > 0) {
files += ',';
}
files += res.data;
initFileList(name, files, function(fileName) {
viewerObj[fileName].update();
});
},
error: function() {
dialog.msg('图片上传异常')
}
});
}
initUpload();
form.on('button(healthCodeRemoveFile)', 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();
// 这里需要重新关联
initUpload();
});
});
}
```
# 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',
closeBtn: 0,
onClose: function() {
var selectedUsers = top.dialog.dialogData.selectedDepartmentUsers;
// 这里写处理逻辑
if(selectedUsers && selectedUsers.length > 0) {}
}
})
```
说明:
1. `top.dialog.dialogData.selectedUserIds` 的值为 **下划线** 分割的ID
2. 返回的列表中可以获取:userId,userName
# 11. 选择地区
```html
```
```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
# 12.列表下拉选择
位置:`` 里
引入:`var form = layui.form`
1. 固定
```html
```
2. 动态
引入:`var laytpl = layui.laytpl`
```html
```
```javascript
function initQuestionTypeSelect() {
top.restAjax.get(top.restAjax.path('api/data/listbyparentid/a7d1ab3d-fbd2-48ca-bfb8-353cad9f3eba', []), {}, null, function(code, data, args) {
laytpl(document.getElementById('questionTypeSelectTemplate').innerHTML).render(data, function(html) {
document.getElementById('questionTypeSelectTemplateBox').innerHTML = html;
});
form.render('select', 'questionTypeSelectTemplateBox');
}, function(code, data) {
top.dialog.msg(data.msg);
});
}
```
3. 下拉选择事件
```javascript
form.on('select(typeFilter)', function(data) {
$('#choiceType').val('')
form.render('select');
if(data.value === 'type1') {
} else {
}
});
```
# 13.url中query参数集合对象
```javascript
var params = top.restAjax.params(window.location.href);
var xxx = params.xxx;
```
# 14.列表选择
> 这里只是示例,具体的参数、变量需根据实际情况修改
{.is-warning}
html:列表页面
```html
```
```javascript
layui.config({
base: 'assets/layuiadmin/'
}).extend({
index: 'lib/index'
}).use(['index', 'table', 'laydate', 'common'], function() {
var $ = layui.$;
var $win = $(window);
var table = layui.table;
var admin = layui.admin;
var common = layui.common;
var selectType = top.restAjax.params(window.location.href).selectType;
selectType = selectType ? selectType : 'radio'
var tableUrl = 'api/user/listpageusersimple';
var oldSelectedUserList = top.dialog.dialogData.oldSelectedUserList ? top.dialog.dialogData.oldSelectedGridList : [];
// 清空上次选择
top.dialog.dialogData.newSelectedUserList = [];
var newSelectedUserList = [];
var tableData = [];
// 初始化选择列表
function initNewSelectedUserList() {
for(var i = 0, item; item = oldSelectedUserList[i++];) {
newSelectedUserList.push(item);
}
}
initNewSelectedUserList();
// 初始化表格
function initTable() {
$.extend(table, {config: {checkName: 'checked'}});
table.render({
elem: '#dataTable',
id: 'dataTable',
url: top.restAjax.path(tableUrl, []),
width: admin.screen() > 1 ? '100%' : '',
height: $win.height() - 50,
limit: 20,
limits: [20, 40, 60, 80, 100, 200],
request: {
pageName: 'page',
limitName: 'rows'
},
cols: [
[
{type: selectType, fixed: 'left'},
{field:'rowNum', width:80, title: '序号', fixed: 'left', align:'center', templet: '{{d.LAY_INDEX}}'},
{field: 'userUsername', width: 150, title: '用户名', align:'center',
templet: function(row) {
var rowData = row[this.field];
if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') {
return '-';
}
return rowData;
}
},
{field: 'userName', width: 150, title: '昵称', align:'center',
templet: function(row) {
var rowData = row[this.field];
if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') {
return '-';
}
return rowData;
}
},
{field: 'userPhone', width: 220, title: '用户手机', align:'center',
templet: function(row) {
var rowData = row[this.field];
if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') {
return '-';
}
return rowData;
}
},
{field: 'userEmail', width: 220, title: '用户邮箱', align:'center',
templet: function(row) {
var rowData = row[this.field];
if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') {
return '-';
}
return rowData;
}
}
]
],
page: true,
parseData: function(data) {
for(var i = 0, item; item = data.rows[i++];) {
if(!newSelectedUserList) {
item.checked = false;
continue;
}
var isSelected = false;
for(var j = 0, jItem; jItem = newSelectedUserList[j++];) {
if(item.userId === jItem.userId) {
isSelected = true;
break;
}
}
if(isSelected) {
item.checked = true;
} else {
item.checked = false;
}
}
tableData = data.rows;
return {
'code': 0,
'msg': '',
'count': data.total,
'data': data.rows
};
}
});
}
// 重载表格
function reloadTable(currentPage) {
table.reload('dataTable', {
url: top.restAjax.path(tableUrl, []),
where: {
keywords: $('#keywords').val(),
},
page: {
curr: currentPage
},
height: $win.height() - 50,
});
}
initTable();
function isUserSelected(userId) {
for(var i = 0, item; item = newSelectedUserList[i++];) {
if(userId == item.userId) {
return true;
}
}
return false;
}
function addUserSelected(userItem) {
if(isUserSelected(userItem.userId)) {
return;
}
newSelectedUserList.push({
userId: userItem.userId,
userUsername: userItem.userUsername,
userName: userItem.userName,
userPhone: userItem.userPhone,
userEmail: userItem.userEmail
})
}
function removeUserSelected(userItem) {
for(var i = 0, item; item = newSelectedUserList[i++];) {
if(userItem.userId == item.userId) {
newSelectedUserList.splice(--i, 1);
i--;
return;
}
}
}
table.on('checkbox(dataTable)', function(obj) {
if(obj.type === 'all') {
if(obj.checked) {
// 添加全部
for(var i = 0, item; item = tableData[i++];) {
addUserSelected(item);
}
} else {
// 删除全部
for(var i = 0, item; item = tableData[i++];) {
removeUserSelected(item);
}
}
} else {
if(obj.checked) {
addUserSelected(obj.data);
} else {
removeUserSelected(obj.data);
}
}
});
table.on('radio(dataTable)', function(obj) {
newSelectedUserList.splice(0, newSelectedUserList.length);
addUserSelected(obj.data);
});
$(document).on('click', '#search', function() {
reloadTable(1);
});
$(document).on('click', '#confirm', function() {
top.dialog.dialogData.newSelectedUserList = newSelectedUserList;
top.dialog.closeBox();
});
});
```
调用方式:其他页面
```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 = [];
}
});
```