163 lines
6.3 KiB
JavaScript
163 lines
6.3 KiB
JavaScript
layui.define(['form', 'common', 'ajax'], function (exports) {
|
||
let $ = layui.$;
|
||
let form = layui.form;
|
||
let layer = layui.layer;
|
||
let common = layui.common;
|
||
let ajax = layui.ajax;
|
||
|
||
/**
|
||
* 通用
|
||
* @param opt
|
||
*/
|
||
function dataDynamic(opt) {
|
||
let url = opt.url;
|
||
let name = opt.name;
|
||
let valueKey = opt.valueKey ? opt.valueKey : '';
|
||
let nameKey = opt.nameKey ? opt.nameKey : '';
|
||
let where = opt.where ? opt.where : {};
|
||
// 请求得到的列表Key,格式'a.b.c'
|
||
let dataListKey = opt.dataListKey ? opt.dataListKey : '';
|
||
let formFilter = opt.formFilter;
|
||
let checkedValue = opt.checkedValue;
|
||
let required = typeof (opt.required) !== 'undefined' && opt.required !== null ? opt.required : false;
|
||
let checkboxDatasetKeyArray = opt.checkboxDatasetKeyArray && $.isArray(opt.checkboxDatasetKeyArray) ? opt.checkboxDatasetKeyArray : [];
|
||
let onInit = opt.onInit && $.isFunction(opt.onInit) ? opt.onInit : null;
|
||
let onCheck = opt.onCheck && $.isFunction(opt.onCheck) ? opt.onCheck : null;
|
||
let elemContainer = $(`#${name}Container`);
|
||
|
||
/**
|
||
* 初始化容器
|
||
*/
|
||
function initContainer() {
|
||
elemContainer.empty();
|
||
ajax.get(url, where, null, function (code, data) {
|
||
let checkboxArray = [];
|
||
let dataList = data;
|
||
if (dataListKey) {
|
||
let dataListKeyArray = dataListKey.split('.');
|
||
$.each(dataListKeyArray, function (i, key) {
|
||
dataList = dataList[key];
|
||
})
|
||
}
|
||
$.each(dataList, function (i, item) {
|
||
let value = valueKey ? item[valueKey] : item;
|
||
let title = nameKey ? item[nameKey] : item;
|
||
let checkboxDatasetArray = [];
|
||
$.each(checkboxDatasetKeyArray, function (j, checkboxDatasetKey) {
|
||
let checkboxDatasetValue = item[checkboxDatasetKey];
|
||
if (!checkboxDatasetValue) {
|
||
return;
|
||
}
|
||
checkboxDatasetArray.push(`data-${common.camelCase2lineCase(checkboxDatasetKey)}="${checkboxDatasetValue}"`);
|
||
});
|
||
checkboxArray.push(`<input type="checkbox" name="${name}" title="${title}" value="${value}" ${checkboxDatasetArray.join(' ')} lay-filter="${name}Checkbox" lay-skin="primary" ${required ? 'lay-verify="required"' : ''} ${(checkedValue && checkedValue === value) ? 'checked' : ''}>`);
|
||
});
|
||
elemContainer.append(checkboxArray.join(''));
|
||
// 赋值
|
||
if (checkedValue) {
|
||
let formData = {};
|
||
formData[`${name}`] = checkedValue;
|
||
form.val(formFilter, formData);
|
||
onInit ? onInit(checkedValue) : null;
|
||
}
|
||
form.render('checkbox', formFilter);
|
||
}, function (code, data) {
|
||
layer.msg(data.msg);
|
||
});
|
||
}
|
||
|
||
/**
|
||
* 添加事件
|
||
*/
|
||
function addEvent() {
|
||
form.on(`checkbox(${name}Checkbox)`, function (data) {
|
||
onCheck ? onCheck(data) : null;
|
||
});
|
||
}
|
||
|
||
initContainer();
|
||
addEvent();
|
||
}
|
||
|
||
/**
|
||
* 静态数据
|
||
* @param opt
|
||
*/
|
||
function dataStatic(opt) {
|
||
let name = opt.name;
|
||
let checkboxs = opt.checkboxs && $.isArray(opt.checkboxs) ? opt.checkboxs : [];
|
||
let formFilter = opt.formFilter;
|
||
let checkedValue = opt.checkedValue;
|
||
let required = typeof (opt.required) !== 'undefined' && opt.required !== null ? opt.required : false;
|
||
let onInit = opt.onInit && $.isFunction(opt.onInit) ? opt.onInit : null;
|
||
let onCheck = opt.onCheck && $.isFunction(opt.onCheck) ? opt.onCheck : null;
|
||
let elemContainer = $(`#${name}Container`);
|
||
|
||
/**
|
||
* 初始化容器
|
||
*/
|
||
function initContainer() {
|
||
elemContainer.empty();
|
||
let checkboxArray = [];
|
||
$.each(checkboxs, function (i, checkbox) {
|
||
let value = checkbox['value'];
|
||
let title = checkbox['title'];
|
||
let checkboxDatasetArray = [];
|
||
for (let key in checkbox) {
|
||
if (key === 'value' || key === 'title') {
|
||
continue;
|
||
}
|
||
checkboxDatasetArray.push(`data-${common.camelCase2lineCase(key)}="${checkbox[key]}"`);
|
||
}
|
||
checkboxArray.push(`<input type="checkbox" name="${name}" title="${title}" value="${value}" ${checkboxDatasetArray.join(' ')} lay-filter="${name}Checkbox" lay-skin="primary" ${required ? 'lay-verify="required"' : ''} ${(checkedValue && checkedValue === value) ? 'checked' : ''}>`);
|
||
});
|
||
elemContainer.append(checkboxArray.join(''));
|
||
// 赋值
|
||
if (checkedValue) {
|
||
let formData = {};
|
||
formData[`${name}`] = checkedValue;
|
||
form.val(formFilter, formData);
|
||
onInit ? onInit(checkedValue) : null;
|
||
}
|
||
form.render('checkbox', formFilter);
|
||
}
|
||
|
||
/**
|
||
* 添加事件
|
||
*/
|
||
function addEvent() {
|
||
form.on(`checkbox(${name}Checkbox)`, function (data) {
|
||
onCheck ? onCheck(data) : null;
|
||
});
|
||
}
|
||
|
||
initContainer();
|
||
addEvent();
|
||
}
|
||
|
||
/**
|
||
* 数据字典
|
||
* @param opt
|
||
*/
|
||
function dataDictionary(opt) {
|
||
dataDynamic({
|
||
url: ajax.path('api/data/list/parent-id/{parentId}', [opt.parentId]),
|
||
name: opt.name,
|
||
required: opt.required,
|
||
formFilter: opt.formFilter,
|
||
valueKey: 'dataId',
|
||
nameKey: 'dataName',
|
||
checkedValue: opt.checkedValue,
|
||
checkboxDatasetKeyArray: opt.checkboxDatasetKeyArray,
|
||
where: opt.where,
|
||
onInit: opt.onInit,
|
||
onCheck: opt.onCheck
|
||
})
|
||
}
|
||
|
||
exports('checkbox', {
|
||
dataDynamic: dataDynamic,
|
||
dataStatic: dataStatic,
|
||
dataDictionary: dataDictionary
|
||
});
|
||
}); |