vue-ant-patterns
Version:
vue-ant-patterns
1,194 lines (1,021 loc) • 39.7 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.defaultProps = undefined;
var _babelHelperVueJsxMergeProps = require('babel-helper-vue-jsx-merge-props');
var _babelHelperVueJsxMergeProps2 = _interopRequireDefault(_babelHelperVueJsxMergeProps);
var _defineProperty2 = require('babel-runtime/helpers/defineProperty');
var _defineProperty3 = _interopRequireDefault(_defineProperty2);
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray');
var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
var _dSwitchTree = require('../../lib/d-switch-tree');
var _dSwitchTree2 = _interopRequireDefault(_dSwitchTree);
var _dContainer = require('../../lib/d-container');
var _dContainer2 = _interopRequireDefault(_dContainer);
var _classnames = require('classnames');
var _classnames2 = _interopRequireDefault(_classnames);
var _antDesignVue = require('ant-design-vue');
var _propsUtil = require('ant-design-vue/lib/_util/props-util');
var _utils = require('../../lib/_utils');
var _extend = require('extend');
var _extend2 = _interopRequireDefault(_extend);
var _moment = require('moment');
var _moment2 = _interopRequireDefault(_moment);
var _request = require('../_biz-utils/request');
var _request2 = _interopRequireDefault(_request);
var _treeHeader = require('./treeHeader');
var _treeHeader2 = _interopRequireDefault(_treeHeader);
var _action = require('./action');
var _action2 = _interopRequireDefault(_action);
var _search = require('./search');
var _search2 = _interopRequireDefault(_search);
var _drag = require('./drag');
var _drag2 = _interopRequireDefault(_drag);
var _utils2 = require('./utils');
var _defaultProps = require('./defaultProps');
var _defaultProps2 = _interopRequireDefault(_defaultProps);
var _bizUtils = require('../_biz-utils');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var Horizontal = _dContainer2['default'].Horizontal,
Vertical = _dContainer2['default'].Vertical;
var noop = function noop() {};
var nowDate = null;
var BTree = {
name: 'BTree',
mixins: [_search2['default'], _drag2['default'], _action2['default']],
props: (0, _extends3['default'])({}, _defaultProps2['default']),
model: {
prop: 'selectedKeys',
event: 'selectChange'
},
// 不需要响应的数据
noResponseData: {},
// 查询过子节点的父节点缓存
loadedCache: {},
vOpenKeysCache: [],
created: function created() {
var _$props = this.$props,
rel = _$props.rel,
dataSource = _$props.dataSource,
dimensionOptions = _$props.dimensionOptions;
if (dataSource) {
this.treeData = (0, _utils.listToTree)(dataSource, {}, { rel: rel });
return;
}
},
destroyed: function destroyed() {
this.resetState();
},
computed: {},
data: function data() {
var _$props2 = this.$props,
defaultOpenKeys = _$props2.defaultOpenKeys,
openKeys = _$props2.openKeys,
defaultSelectedKeys = _$props2.defaultSelectedKeys,
selectedKeys = _$props2.selectedKeys,
dateOptions = _$props2.dateOptions,
checkedKeys = _$props2.checkedKeys,
rel = _$props2.rel,
dimensionOptions = _$props2.dimensionOptions;
var treeData = this.treeData;
var vOpenKeys = [];
var vSelectedKeys = [];
var vCheckedKeys = [];
var vDateUnix = 0;
var format = '';
var dateFormat = '';
var isRequestSuccess = treeData && treeData.length;
var getSubDispatchInitialEvent = true;
var nowDate = (0, _moment2['default'])(Date.now()).startOf('day');
var vDateVal = (0, _moment2['default'])(new Date()).startOf('day');
var dateDisabled = false;
var dimensionDisabled = false;
var dimensionValue = '';
// const rootNode = isRequestSuccess ? treeData[0] : [];
if ((0, _propsUtil.hasProp)(this, 'defaultOpenKeys')) {
vOpenKeys = defaultOpenKeys;
}
if ((0, _propsUtil.hasProp)(this, 'openKeys')) {
vOpenKeys = [].concat((0, _toConsumableArray3['default'])(new Set([].concat((0, _toConsumableArray3['default'])(vOpenKeys), (0, _toConsumableArray3['default'])(openKeys)))));
}
// else if (isRequestSuccess) {
// vOpenKeys = [rootNode[rel[0]]];
// this.$emit('update:openKeys', vOpenKeys);
// }
if ((0, _propsUtil.hasProp)(this, 'defaultSelectedKeys')) {
vSelectedKeys = defaultSelectedKeys;
}
if ((0, _propsUtil.hasProp)(this, 'selectedKeys')) {
vSelectedKeys = [].concat((0, _toConsumableArray3['default'])(new Set([].concat((0, _toConsumableArray3['default'])(vSelectedKeys), (0, _toConsumableArray3['default'])(selectedKeys)))));
}
// else if (isRequestSuccess) {
// vSelectedKeys = [rootNode[rel[0]]];
// this.$emit('selectChange', vSelectedKeys);
// }
if ((0, _propsUtil.hasProp)(this, 'checkedKeys')) {
vCheckedKeys = checkedKeys;
}
if (dimensionOptions) {
var dimensionOps = (0, _extend2['default'])(true, {}, dimensionOps, dimensionOptions);
if (dimensionOps.hasOwnProperty('disabled')) {
dimensionDisabled = dimensionOps.disabled;
}
if (dimensionOptions.hasOwnProperty('defaultValue')) {
dimensionValue = dimensionOptions.defaultValue;
}
}
if (!dimensionValue) {
dimensionValue = _defaultProps.dimensionDefaultOps.defaultValue;
}
if (dateOptions) {
var dateOps = (0, _extend2['default'])(true, {}, _defaultProps.dateDefault, dateOptions);
var onlyDate = dateOps.onlyDate,
dateVal = dateOps.value,
dateType = dateOps.type,
dateDefauleValue = dateOps.defaultValue;
if (dateOps.hasOwnProperty('disabled')) {
dateDisabled = dateOps.disabled;
}
if (dateOps.format) {
format = dateOps.format;
}
dateFormat = (0, _bizUtils.getCache)('dateFormat');
if (!dateFormat && format) {
(0, _bizUtils.setForName)(format, 'dateFormat');
}
if (dateDefauleValue) {
vDateVal = (0, _moment2['default'])(dateDefauleValue);
} else if (dateVal && dateVal !== 'now') {
vDateVal = (0, _moment2['default'])(dateVal);
}
vDateUnix = vDateVal.valueOf();
}
if (!vDateUnix) {
vDateUnix = nowDate.valueOf();
}
var vLoad = undefined;
if ((0, _propsUtil.hasProp)(this, 'loadData')) {
if (typeof loadData === 'boolean' && loadData === true) {
vLoad = this.getCategoryItemChildren;
} else if (typeof loadData === 'boolean' && loadData === false) {
vLoad = undefined;
}
} else {
vLoad = this.getCategoryItemChildren;
}
/**
* vOpenKeys 展开项 与 loadData 异步加载子节点处理函数, 任一项为假
* 则认为不需要异步加载子节点
* 异步加载子节点前置条件为, 展开项 `vOpenKeys` 与 加载方法 `loadData`
* 在之后的触发 initialEvent 中, 会使用他来判断触发事件时机
*/
if (!vOpenKeys || !vOpenKeys.length || !vLoad) {
getSubDispatchInitialEvent = false;
}
return {
locale: 'zh-cn',
listData: [],
treeData: [],
nowDate: nowDate,
format: format || dateFormat || 'YYYY-MM-DD',
// tree 请求节点数据缓存
dataMap: {},
// 通过 list 转成 符合树结构的 list
// treeData: [],
vSelectedKeys: vSelectedKeys,
// tree 展开项
vOpenKeys: vOpenKeys,
// checked
vCheckedKeys: vCheckedKeys,
// 日期
vDateVal: vDateVal,
vDateUnix: vDateUnix,
// 用于控制日期控件开启关闭
dataPickerOpen: false,
// 是否加载数据
// isAsyncLoading: false,
// 维度列表
dimensionData: [],
// 维度默认选中
dimensionValue: dimensionValue,
vLoadData: vLoad,
getSubDispatchInitialEvent: getSubDispatchInitialEvent,
init: true,
dateDisabled: dateDisabled,
dimensionDisabled: dimensionDisabled,
filterValue: ''
};
},
watch: {
selectedKeys: function selectedKeys(_selectedKeys) {
this.vSelectedKeys = _selectedKeys;
},
openKeys: function openKeys(_openKeys) {
this.vOpenKeys = _openKeys;
},
vSelectedKeys: function vSelectedKeys(selectedKeys) {
this.$emit('selectChange', selectedKeys);
},
vOpenKeys: function vOpenKeys(expandedKeys) {
this.$emit('update:openKeys', expandedKeys);
},
checkedKeys: function checkedKeys(_checkedKeys) {
this.vCheckedKeys = _checkedKeys;
},
vCheckedKeys: function vCheckedKeys(checkedKeys) {
this.$emit('update:checkedKeys', checkedKeys);
},
listData: function listData(_listData) {
var rel = this.$props.rel;
this.treeData = (0, _utils.listToTree)(_listData, [], { rel: rel });
}
},
mounted: function mounted() {
var _this = this;
var dimensionOptions = this.$props.dimensionOptions;
this.resetOptions();
if (!dimensionOptions) {
this.getTreeRoot().then(function () {
_this.initialEventHandler();
});
}
},
methods: {
getListData: function getListData() {
return (0, _utils.treeToList)(this.treeData);
},
getTreeSub: function () {
var _ref = (0, _asyncToGenerator3['default'])( /*#__PURE__*/_regenerator2['default'].mark(function _callee(queryParamsObj) {
return _regenerator2['default'].wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return (0, _request2['default'])(queryParamsObj);
case 2:
return _context.abrupt('return', _context.sent);
case 3:
case 'end':
return _context.stop();
}
}
}, _callee, this);
}));
function getTreeSub(_x) {
return _ref.apply(this, arguments);
}
return getTreeSub;
}(),
getTreeRoot: function () {
var _ref2 = (0, _asyncToGenerator3['default'])( /*#__PURE__*/_regenerator2['default'].mark(function _callee2() {
var _$props3, rel, requestParam, renderKey, defaultSelectedKeys, selectedKeys, vSelectedKeys, queryParam, res, resData, code, msg, data;
return _regenerator2['default'].wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
_$props3 = this.$props, rel = _$props3.rel, requestParam = _$props3.requestParam, renderKey = _$props3.renderKey, defaultSelectedKeys = _$props3.defaultSelectedKeys, selectedKeys = _$props3.selectedKeys;
vSelectedKeys = this.vSelectedKeys;
queryParam = (0, _extend2['default'])({}, requestParam);
if ((0, _utils.isEmptyObj)(requestParam)) {
queryParam = paramObj;
}
// 后台提供的获取根节点, 与子节点 api 为不同的接口
// 需要联调时调整
// if (queryParamsObj) {
// queryParam.data = queryParamsObj;
// if (queryParamsObj.eventKey) {s
// // eventK = queryParamsObj.eventKey;
// delete queryParamsObj.eventKey;
// }
// } else {
queryParam.data = this.getRequestParams();
// }
_context2.next = 7;
return (0, _request2['default'])(queryParam);
case 7:
res = _context2.sent;
resData = res.data;
code = resData.code, msg = resData.msg, data = resData.data;
/**
* 初步分析, 返回数据中 下的几个属性含义
* hasCheckbox: false, 复选框
* loadable: true, 有子节点, 可加载
* selectable: true, 可选择
*/
if (code === 200) {
this.listData = this.setTreeData(data);
if (data && data.length && (!this.vOpenKeys || !this.vOpenKeys.length)) {
this.vOpenKeys = [].concat((0, _toConsumableArray3['default'])(new Set([].concat((0, _toConsumableArray3['default'])(this.vOpenKeys), [(0, _utils.relationHandler)(rel[0], data[0])]))));
// if (!vSelectedKeys.length) {
// this.vSelectedKeys = [relationHandler(rel[0], data[0])];
// }
// this.$emit('selectChange', vSelectedKeys);
}
} else {
this.$message.error(msg);
}
return _context2.abrupt('return', resData);
case 12:
case 'end':
return _context2.stop();
}
}
}, _callee2, this);
}));
function getTreeRoot() {
return _ref2.apply(this, arguments);
}
return getTreeRoot;
}(),
getDimension: function () {
var _ref3 = (0, _asyncToGenerator3['default'])( /*#__PURE__*/_regenerator2['default'].mark(function _callee3() {
var dimensionOptions, dimensionOps, defaultValue, url, method, reqParams, res;
return _regenerator2['default'].wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
dimensionOptions = this.$props.dimensionOptions;
dimensionOps = (0, _extend2['default'])(true, {}, dimensionOps, dimensionOptions);
defaultValue = dimensionOps.defaultValue, url = dimensionOps.url, method = dimensionOps.method;
this.dimensionValue = defaultValue;
this.$root.isLoading = true;
reqParams = {
url: url,
method: method
};
_context3.next = 8;
return (0, _request2['default'])(reqParams);
case 8:
res = _context3.sent;
return _context3.abrupt('return', res);
case 10:
case 'end':
return _context3.stop();
}
}
}, _callee3, this);
}));
function getDimension() {
return _ref3.apply(this, arguments);
}
return getDimension;
}(),
updateOpenKeys: function updateOpenKeys(expandedKeys) {
this.$emit('update:openKeys', expandedKeys);
},
// 收起展开
onExpand: function onExpand(args) {
var expandedKeys = args.expandedKeys;
this.vOpenKeys = [].concat((0, _toConsumableArray3['default'])(expandedKeys));
this.$emit('expand', args);
},
// 选择
onSelect: function onSelect(args) {
var curK = args.key;
this.vSelectedKeys = args.selectedKeys;
var rel = this.$props.rel;
var listData = this.listData;
// const selectKs = Array.isArray(args.selectedKeys) ? args.selectedKeys : [args.selectedKeys]
var item = listData.find(function (it) {
var k = (0, _utils.relationHandler)(rel[0], it);
return curK === k;
});
var items = listData.map(function (it) {
var k = (0, _utils.relationHandler)(rel[0], it);
return args.selectedKeys.includes(k) ? it : null;
}).filter(function (T) {
return T;
});
this.$emit('select', args, (0, _extend2['default'])(true, {}, item || {}), (0, _extend2['default'])(true, [], items || []));
},
// 在多选时有效
// 反选
onDeselect: function onDeselect(args) {
this.vSelectedKeys = args.selectedKeys;
this.$emit('select', args);
},
onCheckChange: function onCheckChange(_ref4) {
var checkedKeys = _ref4.checkedKeys,
checked = _ref4.checked,
checkedNodes = _ref4.checkedNodes,
event = _ref4.event,
nativeEvent = _ref4.nativeEvent,
node = _ref4.node;
var rel = this.$props.rel;
var listData = this.listData;
var dataRef = node.dataRef;
/**
* 获取当前选中的 key
*/
var curSelectKey = (0, _utils.relationHandler)(rel[0], dataRef);
var item = listData.find(function (it) {
var k = (0, _utils.relationHandler)(rel[0], it);
return curSelectKey === k;
});
var items = listData.map(function (it) {
var k = (0, _utils.relationHandler)(rel[0], it);
return checkedKeys.includes(k) ? it : null;
}).filter(function (T) {
return T;
});
this.$emit('check', { checkedKeys: checkedKeys, checked: checked, checkedNodes: checkedNodes, event: event, nativeEvent: nativeEvent, node: node }, (0, _extend2['default'])(true, {}, item || {}), (0, _extend2['default'])(true, [], items || []));
},
onUpdateCheckChange: function onUpdateCheckChange(checkedKeys) {
this.vCheckedKeys = checkedKeys;
},
/**
* 获取查询参数
* 查询参数包括
* 维度 dimensionId
* 日期 queryDate
*
* 组装成对象
*
* 暂时来看查询根节点数据不需要传递其他参数
* 也就是 查询根数据时不会有 eventKey 出现
* @param {vNode} treeNode
*/
getRequestParams: function getRequestParams() {
var treeNode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var isSub = arguments[1];
var dataRef = treeNode.dataRef,
eventKey = treeNode.eventKey;
var _$props4 = this.$props,
componentType = _$props4.componentType,
requestParam = _$props4.requestParam,
dateOptions = _$props4.dateOptions,
dimensionOptions = _$props4.dimensionOptions,
searchOptions = _$props4.searchOptions;
var dimensionValue = this.dimensionValue,
vDateVal = this.vDateVal,
vDateUnix = this.vDateUnix;
var requestData = {};
if (componentType === 'tree') {
if (dateOptions) {
// 时间戳
requestData.queryDate = vDateUnix;
}
if (dimensionOptions) {
requestData.dimensionId = dimensionValue;
}
}
if (isSub) {
return requestData;
}
requestData = (0, _extend2['default'])((0, _extends3['default'])({}, requestData), requestParam.data);
return requestData;
},
setTreeData: function setTreeData() {
var _this2 = this;
var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var prentId = arguments[1];
var map = {};
var arrData = data.map(function (it) {
return _this2.setTreeItemData(it, prentId);
});
// this.$options.noResponseData = {
// ...this.$options.noResponseData,
// ...map,
// };
return arrData;
},
setTreeItemData: function setTreeItemData(item, prentId) {
var _mp;
var _$props5 = this.$props,
rel = _$props5.rel,
renderKey = _$props5.renderKey;
var map = {};
var _item$data = item.data,
loadable = _item$data.loadable,
hasCheckbox = _item$data.hasCheckbox,
selectable = _item$data.selectable,
disabled = _item$data.disabled,
data = _item$data.data;
// 获取关键信息
var vPid = prentId || (0, _utils.relationHandler)(rel[1], item);
var id = (0, _utils.relationHandler)(rel[0], item);
var name = (0, _utils.relationHandler)(renderKey, item);
// 缓存
map[id] = item;
// 简化数据
var obj = {
// 叶子节点
isLeaf: loadable === undefined ? false : !loadable,
// 允许选中
selectable: selectable,
disabled: disabled,
// 复选框
// 官方文档没有 treeNode checkable 的说明, 实际是支持 `checkable` 属性的
checkable: hasCheckbox
};
var key = rel[0];
var pid = rel[1];
// 简化数据, 从元数据中读取数据, 并重新组装
var mp = (_mp = {}, (0, _defineProperty3['default'])(_mp, name, renderKey), (0, _defineProperty3['default'])(_mp, id, key), (0, _defineProperty3['default'])(_mp, '-1', pid), _mp);
if (vPid) {
mp[vPid] = pid;
delete mp['-1'];
}
Object.keys(mp).map(function (k) {
obj = (0, _extends3['default'])({}, (0, _utils.relationSetHandler)(mp[k], k, obj));
});
return (0, _extend2['default'])(true, {}, item, obj);
},
/**
* 异步加载子节点
* @param {当前选择的节点} treeNode;
*/
getCategoryItemChildren: function getCategoryItemChildren(treeNode) {
var _this3 = this;
var _$props6 = this.$props,
isAsyncLoad = _$props6.isAsyncLoad,
requestSubParam = _$props6.requestSubParam,
rel = _$props6.rel,
renderKey = _$props6.renderKey;
/**
* reqData 外部传进来的对象
*/
// const { data: reqData = {} } = requestSubParam;
return new Promise(function (resolve) {
var _reqKeys;
/**
* 不需要异步加载
*/
if (!isAsyncLoad) {
resolve();
return;
}
var dataRef = treeNode.dataRef,
eventKey = treeNode.eventKey;
var _$options = _this3.$options,
loadedCache = _$options.loadedCache,
noResponseData = _$options.noResponseData;
var findItem = _this3.listData.find(function (it) {
var k = (0, _utils.relationHandler)(rel[0], it);
return eventKey === k;
});
/**
* 通过缓存判断是否需要查询
* 这种方式比较稳妥
*/
if (loadedCache[eventKey]) {
/**
* 保持与真实请求格式一致
*/
return resolve({
data: {
code: 200,
data: noResponseData[eventKey]
}
});
}
/**
* 缓存, 不需要响应的数据
*/
var noResponseDataCur = noResponseData[eventKey] || {};
// if (noResponseData) {
// delete noResponseData.property;
// delete noResponseData.children;
// }
/**
* 返回个带 rel[0] 指定层次的 key
*/
// const req = relationSetHandler(rel[0], eventKey, {});
/**
* 取出几个关键 key, 用于请求数据
*/
var reqKeys = (_reqKeys = {}, (0, _defineProperty3['default'])(_reqKeys, (0, _utils.relationGetKeyName)(rel[0]), (0, _utils.relationHandler)(rel[0], findItem)), (0, _defineProperty3['default'])(_reqKeys, (0, _utils.relationGetKeyName)(rel[1]), (0, _utils.relationHandler)(rel[1], findItem)), _reqKeys);
// console.log(reqKeys);
// const requestData = {
// ...requestSubParam,
// data: {
// /**
// * 有些接口需要的字段都不明确, 只能都穿出去
// */
// ...(findItem ? findItem.data : {}),
// ...reqKeys,
// ...this.getRequestParams(treeNode),
// ...reqData,
// // ...req.data,
// },
// };
/*
20210-04-25
当前需求: 查询子节点时不需要携带 requestParam 的内容, 其中包含了维度 日期等属性
只需携带 requestSubParam
疑惑: *** 下边代码调用了 getRequestParams, 其中携带了 requestParam
不知道基于什么原因, 在此记录下当前不明确的问题, 便于后续有问题时排查
当前解决方式:
给 this.getRequestParams 方法 第二个参数, 判断是否子节点
如果是查询子节点的话, 不需要合并 requestParam.data 的内容
*/
var requestData = (0, _extend2['default'])(true, requestSubParam, {
data: (0, _extends3['default'])({}, findItem ? findItem.data : {}, reqKeys, _this3.getRequestParams(treeNode, true))
});
return _this3.getTreeSub(requestData).then(function (res) {
var resData = res.data;
var code = resData.code,
msg = resData.msg,
data = resData.data;
if (code !== 200) return Promise.reject(msg);
_this3.$options.loadedCache[eventKey] = true;
_this3.$options.noResponseData[eventKey] = data;
var oldList = (0, _utils.treeToList)(_this3.treeData);
var arrData = _this3.setTreeData(data, eventKey);
// const newList = oldList.concat(this.setTreeData(data, eventKey));
var tmp = [].concat((0, _toConsumableArray3['default'])(_this3.listData), (0, _toConsumableArray3['default'])(arrData));
var _uniq = (0, _utils2.uniq)(tmp, rel[0]),
list = _uniq.list;
// 下边两步缺一不可
treeNode.dataRef.children = [].concat((0, _toConsumableArray3['default'])(data));
_this3.listData = [].concat((0, _toConsumableArray3['default'])(list));
resolve(res);
if (_this3.init) {
_this3.init = false;
_this3.$nextTick(function () {
_this3.$emit('initialSubLoaded', {
dimension: _this3.dimensionValue,
date: _this3.vDateUnix,
treeData: (0, _extend2['default'])(true, [], _this3.listData)
});
});
}
return res;
})['catch'](function (e) {
console.error(e);
_this3.$message.error(e);
return Promise.reject(e);
});
});
},
renderTree: function renderTree() {
var _this4 = this;
var h = this.$createElement;
var treeData = this.treeData,
vOpenKeys = this.vOpenKeys,
vSelectedKeys = this.vSelectedKeys,
vLoadData = this.vLoadData,
vCheckedKeys = this.vCheckedKeys,
$listeners = this.$listeners,
$scopedSlots = this.$scopedSlots,
$slots = this.$slots,
filterValue = this.filterValue;
var _$props7 = this.$props,
componentType = _$props7.componentType,
type = _$props7.type,
width = _$props7.width,
defaultOpenKeys = _$props7.defaultOpenKeys,
defaultSelectedKeys = _$props7.defaultSelectedKeys,
checkable = _$props7.checkable,
checkStrictly = _$props7.checkStrictly,
disabled = _$props7.disabled,
draggable = _$props7.draggable,
rel = _$props7.rel,
multiple = _$props7.multiple,
renderKey = _$props7.renderKey,
treeFilter = _$props7.treeFilter;
// const treeData = this.toTree();
// const rootNode = treeData[0];
// var defOpenk = vOpenKeys; //rootNode ? [rootNode[rel[0]]] : vOpenKeys;
var eventObj = {
select: this.onSelect,
expand: this.onExpand,
openChange: this.onExpand,
'update:openKeys': this.updateOpenKeys
};
var treeOnly = {
loadData: vLoadData,
checkStrictly: checkStrictly,
checkable: checkable,
disabled: disabled,
draggable: draggable,
filterValue: filterValue,
treeFilter: treeFilter
};
if (componentType === 'tree') {
delete eventObj.openChange;
} else {
if (multiple) {
eventObj.deselect = this.onDeselect;
}
delete eventObj.expand;
}
var propsObj = {
props: {
componentType: componentType,
type: type,
defaultOpenKeys: defaultOpenKeys,
defaultSelectedKeys: defaultSelectedKeys,
dataSource: treeData,
width: width,
multiple: multiple,
selectedKeys: vSelectedKeys,
openKeys: vOpenKeys,
renderKey: renderKey,
rel: rel
},
on: (0, _extends3['default'])({}, $listeners, eventObj),
ref: 'swTree'
};
if ((0, _propsUtil.hasProp)(this, 'openKeys')) {
delete propsObj.props.defaultOpenKeys;
}
if ((0, _propsUtil.hasProp)(this, 'selectedKeys')) {
delete propsObj.props.defaultSelectedKeys;
}
if (componentType === 'tree') {
propsObj.props = (0, _extends3['default'])({}, propsObj.props, treeOnly);
if (checkable) {
propsObj.props.checkedKeys = vCheckedKeys;
}
propsObj.on = (0, _extends3['default'])({}, propsObj.on, {
'update:checkedKeys': this.onUpdateCheckChange,
check: this.onCheckChange,
dragenter: this.onDragenter,
drop: this.onDrop,
dragstart: function dragstart(o) {
_this4.$options.vOpenKeysCache = _this4.vOpenKeys;
_this4.$emit('dragstart', o);
},
dragend: function dragend(o) {
_this4.vOpenKeys = [].concat((0, _toConsumableArray3['default'])(_this4.$options.vOpenKeysCache));
_this4.$options.vOpenKeysCache = [];
_this4.$emit('dragend', o);
}
});
if (treeFilter) {
propsObj.scopedSlots = (0, _extends3['default'])({}, $scopedSlots);
}
}
return h(_dSwitchTree2['default'], propsObj);
},
/**
* 渲染日期
* 根据是否传入 prop 来判断是否显示
* 日期默认值为当前日期
* 日期变化, 查询 tree 数据
*/
renderDate: function renderDate() {
var _this5 = this;
var h = this.$createElement;
var dateOptions = this.$props.dateOptions;
if (!dateOptions) return null;
var dateOps = (0, _extend2['default'])(true, {}, _defaultProps.dateDefault, dateOptions);
var type = dateOps.type,
value = dateOps.value,
_dateOps$props = dateOps.props,
props = _dateOps$props === undefined ? {} : _dateOps$props;
var vDateVal = this.vDateVal,
dataPickerOpen = this.dataPickerOpen,
format = this.format,
dateDisabled = this.dateDisabled;
// const isRangePicker = type === 'rangePicker';
// const isNow = value === 'now';
var dateProps = {
props: (0, _extends3['default'])({
open: dataPickerOpen,
format: format,
value: vDateVal,
defaultValue: vDateVal
}, props, {
allowClear: false,
disabled: dateDisabled
}),
'class': 'margin-bottom-xs',
on: {
change: function change(date, dateString) {
var isClear = date === null && dateString === '';
if (_moment2['default'].isMoment(date)) {
_this5.vDateUnix = date.valueOf();
} else if (isClear) {
_this5.vDateUnix = nowDate.valueOf();
}
_this5.vDateVal = isClear ? nowDate : date;
if (isClear) return;
_this5.resetState();
_this5.getTreeRoot().then(function () {
_this5.initialEventHandler();
});
_this5.$emit('dateChange', { date: date, dateString: dateString });
},
openChange: function openChange(status) {
_this5.dataPickerOpen = status;
}
}
};
return h(_antDesignVue.DatePicker, (0, _babelHelperVueJsxMergeProps2['default'])([dateProps, { 'class': 'margin-bottom-xs', ref: 'dataPieker' }]));
},
/**
* 渲染header
* 包括
* 选择维度
* 搜索
*/
renderHeader: function renderHeader() {
var _this6 = this;
var h = this.$createElement;
var _$props8 = this.$props,
dimensionOptions = _$props8.dimensionOptions,
searchOptions = _$props8.searchOptions,
componentType = _$props8.componentType,
searchSelectOptions = _$props8.searchSelectOptions,
rel = _$props8.rel,
renderKey = _$props8.renderKey,
treeFilter = _$props8.treeFilter;
if (componentType === 'menu') return null;
if (!searchOptions && !dimensionOptions && !treeFilter) return;
var vDateUnix = this.vDateUnix,
dimensionDisabled = this.dimensionDisabled;
var dOps = dimensionOptions ? (0, _extend2['default'])(true, {}, _defaultProps.dimensionDefaultOps, dimensionOptions) : null;
var sOps = searchOptions ? (0, _extend2['default'])(true, {}, _defaultProps.searchDefaultOps, searchOptions) : null;
var treeHeadProps = {
props: {
dimensionOptions: dOps,
searchOptions: sOps,
searchSelectOptions: searchSelectOptions,
queryDate: vDateUnix,
renderKey: renderKey,
rel: rel,
dimensionDisabled: dimensionDisabled,
treeFilter: treeFilter
},
on: {
dimensionChange: function dimensionChange(_ref5) {
var value = _ref5.value,
selectData = _ref5.selectData;
_this6.dimensionValue = value;
_this6.resetState();
_this6.getTreeRoot().then(function () {
_this6.initialEventHandler();
});
_this6.$emit('dimensionChange', { value: value, selectData: selectData });
},
searchSelect: function searchSelect(_ref6) {
var key = _ref6.key,
itemData = _ref6.itemData;
/**
* 在搜索结果中选中节点
* 需要获取到所有父级节点
* 并合并入已有的数据中
* 查询子节点, 也需要查询日期,
*
* itemData : { hid, name }
*
*/
_this6.searchSelect(key, itemData);
},
search: function search(_ref7) {
var data = _ref7.data;
_this6.$emit('search', { data: data });
},
dimensionLoad: function dimensionLoad(data) {
if (dimensionOptions) {
_this6.dimensionData = data;
if (dimensionOptions.defaultValue) {
_this6.dimensionValue = dimensionOptions.defaultValue;
} else if (data && data.length) {
_this6.dimensionValue = data[0][dOps.keyName];
}
_this6.getTreeRoot().then(function () {
_this6.initialEventHandler();
});
_this6.$emit('dimensionLoad', _this6.dimensionValue);
}
},
treeFilter: function treeFilter(e) {
var rel = _this6.$props.rel;
var treeData = _this6.treeData,
listData = _this6.listData,
vOpenKeys = _this6.vOpenKeys;
var value = e.target.value;
var list = _this6.getListData();
var getParentKey = function getParentKey(key) {
var pts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
var parents = pts;
// let vPid = '';
var findParent = list.find(function (item) {
var vPid = (0, _utils.relationHandler)(rel[1], item);
var vId = (0, _utils.relationHandler)(rel[0], item);
if (vId === key) {
parents.push(vId);
return item;
}
});
if (findParent) {
var pid = (0, _utils.relationHandler)(rel[1], findParent);
getParentKey(pid, parents);
}
return parents;
};
var arr = list.map(function (item) {
var id = (0, _utils.relationHandler)(rel[0], item);
var pid = (0, _utils.relationHandler)(rel[1], item);
var title = (0, _utils.relationHandler)(renderKey, item);
if (title.indexOf(value) > -1) {
var ids = pid ? getParentKey(pid) : [id];
return ids;
}
return null;
}).filter(function (T) {
return T;
});
var expandedKeys = [];
arr.map(function (item) {
if (Array.isArray(item)) {
item.map(function (it) {
expandedKeys.push(it);
});
} else {
expandedKeys.push(item);
}
});
expandedKeys = [].concat((0, _toConsumableArray3['default'])(new Set([].concat((0, _toConsumableArray3['default'])(expandedKeys), (0, _toConsumableArray3['default'])(vOpenKeys)))));
(0, _extends3['default'])(_this6, {
vOpenKeys: [].concat((0, _toConsumableArray3['default'])(expandedKeys)),
filterValue: value
});
_this6.$emit('onSyncFilterValue', value);
}
}
};
return h(_treeHeader2['default'], treeHeadProps);
},
initialEventHandler: function initialEventHandler() {
this.$emit('initialEvent', {
dimension: this.dimensionValue,
date: this.vDateUnix,
treeData: (0, _extend2['default'])(true, [], this.listData)
});
},
resetOptions: function resetOptions() {
this.$options.loadedCache = {};
this.$options.noResponseData = {};
this.$options.vOpenKeysCache = [];
},
/**
* 重置状态, 与缓存
* 切换日期, 与维度, 重置根数据, 与缓存, 包括 选中项与展开项
*/
resetState: function resetState() {
this.resetOptions();
this.vSelectedKeys = [];
this.vOpenKeys = [];
this.vCheckedKeys = [];
this.listData = [];
this.init = true;
},
resetAllData: function resetAllData() {
var _this7 = this;
this.resetState();
this.getTreeRoot().then(function () {
_this7.initialEventHandler();
});
},
getAllState: function getAllState() {
return {
dimension: this.dimensionValue,
date: this.vDateUnix,
treeData: this.listData
};
},
reloadTreeData: function reloadTreeData() {
this.resetAllData();
},
closeDatePickerModal: function closeDatePickerModal() {},
/**
* 设置 维度, 日期启用禁用
* controlName date dimension
*/
setDisable: function setDisable(controlName, isDisable) {
this[controlName + 'Disabled'] = isDisable;
}
},
render: function render() {
var h = arguments[0];
var treeData = this.treeData;
var prefixCls = this.$props.prefixCls;
var treeRootProps = {
'class': (0, _classnames2['default'])((0, _defineProperty3['default'])({}, prefixCls, 1)),
props: {
grow: true
}
};
return h(
Vertical,
treeRootProps,
[this.renderDate(), this.renderHeader(), treeData && treeData.length ? this.renderTree() : null]
);
}
};
BTree.install = function (Vue) {
Vue.component(BTree.name, BTree);
};
exports['default'] = BTree;
exports.defaultProps = _defaultProps2['default'];