nimble-ui
Version:
73 lines (71 loc) • 2.8 kB
JavaScript
/* eslint-disable no-unused-vars */
/**
* 数据联动过滤器(需要修改则返回对应的字段即可)
* @param {Object} back 映射的对象
* @param {Object} back.lists 当前显示的lists
* @param {Object} back.initMap 初始化项的map
* @param {Array<Object>} back.selectList 选中项列表
* @param {Object} back.activeIndexMap 选中index的map
* @param {Object} back.data 当前选中项的数据(只读)
* @param {Number} back.index 当前所属的列表所在lists的索引(只读)
* @param {String} back.prefix 前缀(只读)
* @param {String} back.suffix 后缀(只读)
* @param {Boolean} back.isInit 是否为初始化
* @param {Object} options 初始化的时候的选项
* @returns {Object}
*/
export default function cityFilterLinkage(back, options) { // 联动设置
back = back || {};
let _props = options;
let res = {};
let _checkData = back.data;
let _initList = (_props && _props.defaultValue) || [];
let index = back.index || 0;
let defIndex = 0;
let _lists = back.lists || [];
if (back.isInit && index === 0 && _initList.length > 0 && _initList[0] !== _checkData.ProviceName) {
defIndex = getActiveIndex(index, _lists);
}
if (defIndex > 0) { // 设置第一列默认选中项
res.activeIndexMap = Object.assign({}, back.activeIndexMap);
res.activeIndexMap[index] = defIndex;
} else {
let nextIndex = index + 1;
res.lists = _lists.slice(0);
if (nextIndex < res.lists.length) {
res.lists[nextIndex] = (_checkData && (_checkData.CityList || _checkData.AreaList)) || [];
if (!back.initMap[nextIndex]) {
res.initMap = Object.assign({}, back.initMap);
res.initMap[nextIndex] = true;
let _activeIndex = getActiveIndex(nextIndex, res.lists);
if (_activeIndex > 0) {
res.activeIndexMap = Object.assign({}, back.activeIndexMap);
res.activeIndexMap[nextIndex] = _activeIndex;
}
}
}
}
return res;
/**
* 获取索引号
*
* @param {*} _index 当前列表的索引
* @param {Array} list 列表
* @returns {Number}
*/
function getActiveIndex(_index, list) {
let defName = _initList && _initList[_index];
if (defName && list && list.length > 0) {
let activeIndex = list[_index].findIndex((item) => {
switch (_index + '') {
case '0':
return item.ProviceName === defName;
case '1':
case '2':
return item.CtiyName === defName;
}
});
return activeIndex;
}
}
}