wetrade-design
Version:
一款多语言支持Vue3的UI框架
219 lines (218 loc) • 10.3 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _vue = require("vue");
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _addEventListener = _interopRequireDefault(require("../../vc-util/Dom/addEventListener"));
var _raf = _interopRequireDefault(require("../../_util/raf"));
var _context = require("../../table/context");
var _supportsPassive = _interopRequireDefault(require("../../_util/supportsPassive"));
var _ResizeContext = require("../context/ResizeContext");
var events = {
mouse: {
start: 'mousedown',
move: 'mousemove',
stop: 'mouseup'
},
touch: {
start: 'touchstart',
move: 'touchmove',
stop: 'touchend'
}
};
var defaultMinWidth = 50;
var _default = (0, _vue.defineComponent)({
compatConfig: {
MODE: 3
},
name: 'DragHandle',
props: {
prefixCls: String,
width: {
type: Number,
default: defaultMinWidth
},
minWidth: {
type: Number,
default: defaultMinWidth
},
maxWidth: {
type: Number,
default: Infinity
},
column: {
type: Object,
default: undefined
},
resizeColumn: {
type: Function
}
},
setup: function setup(props) {
var startX = 0;
var moveEvent = {
remove: function remove() {}
};
var stopEvent = {
remove: function remove() {}
};
var removeEvents = function removeEvents() {
moveEvent.remove();
stopEvent.remove();
};
(0, _vue.onUnmounted)(function () {
removeEvents();
});
(0, _vue.watchEffect)(function () {
// devWarning(!isNaN(props.width), 'Table', 'width must be a number when use resizable');
});
var resizeColumnMoveRef = (0, _vue.inject)(_ResizeContext.ResizeColumnMoveRefKey);
var hasData = (0, _vue.inject)(_ResizeContext.HasDataKey);
var fullTableRef = (0, _vue.inject)(_ResizeContext.FullTableRefKey);
var resizeColumnStartRef = (0, _vue.inject)(_ResizeContext.ResizeColumnStartRefKey);
var isResizingHandle = (0, _vue.inject)(_ResizeContext.ResizeColumnStatusKey);
var _useInjectInitScroll = (0, _ResizeContext.useInjectInitScroll)(),
onInitTableScroll = _useInjectInitScroll.onInitTableScroll;
var resizeHandleRef = (0, _vue.ref)();
var _useInjectTableContex = (0, _context.useInjectTableContext)(),
onResizeColumn = _useInjectTableContex.onResizeColumn;
var minWidth = (0, _vue.computed)(function () {
return typeof props.minWidth === 'number' && !isNaN(props.minWidth) ? props.minWidth : defaultMinWidth;
});
var maxWidth = (0, _vue.computed)(function () {
return typeof props.maxWidth === 'number' && !isNaN(props.maxWidth) ? props.maxWidth : Infinity;
});
var instance = (0, _vue.getCurrentInstance)();
var baseWidth = 0;
var dragging = (0, _vue.ref)(false);
var rafId;
var rafId2;
var updateWidth = function updateWidth(e) {
var pageX = 0;
if (e.touches) {
if (e.touches.length) {
// touchmove
pageX = e.touches[0].pageX;
} else {
// touchend
pageX = e.changedTouches[0].pageX;
}
} else {
pageX = e.pageX;
}
var tmpDeltaX = startX - pageX;
var w = Math.max(baseWidth - tmpDeltaX, minWidth.value);
w = Math.min(w, maxWidth.value);
_raf.default.cancel(rafId);
props.resizeColumn(w);
rafId = (0, _raf.default)(function () {
onResizeColumn(w, props.column.__originColumn__);
});
_raf.default.cancel(rafId2);
rafId2 = (0, _raf.default)(function () {
onInitTableScroll && onInitTableScroll();
});
};
var handleMove = function handleMove(e) {
var _resizeHandleRef$valu, _resizeHandleRef$valu2;
// updateWidth(e);
if (!resizeColumnMoveRef.value || !fullTableRef.value) {
return;
}
resizeColumnMoveRef.value.style.display = 'inherit';
var pageX = 0;
if (e.touches) {
pageX = e.touches.length ? e.touches[0].pageX : e.changedTouches[0].pageX;
} else {
pageX = e.pageX;
}
var tmpDeltaX = startX - pageX;
var w = Math.max(baseWidth - tmpDeltaX, minWidth.value);
w = Math.min(w, maxWidth.value);
var fullTableRefLeft = fullTableRef.value.getBoundingClientRect().left;
var startLeft = ((_resizeHandleRef$valu = resizeHandleRef.value) === null || _resizeHandleRef$valu === void 0 ? void 0 : (_resizeHandleRef$valu2 = _resizeHandleRef$valu.parentNode) === null || _resizeHandleRef$valu2 === void 0 ? void 0 : _resizeHandleRef$valu2.getBoundingClientRect().left) - fullTableRefLeft;
// 更新拖拽线位置
if (minWidth.value < w && w < maxWidth.value) {
resizeColumnMoveRef.value.style.left = "".concat(startLeft + w, "px");
} else if (w >= maxWidth.value) {
resizeColumnMoveRef.value.style.left = "".concat(startLeft + maxWidth.value - 2, "px");
} else {
resizeColumnMoveRef.value.style.left = "".concat(startLeft + minWidth.value - 2, "px");
}
};
var handleStop = function handleStop(e) {
dragging.value = false;
isResizingHandle.value = false;
resizeColumnMoveRef.value && (resizeColumnMoveRef.value.style.display = 'none');
resizeColumnStartRef.value && (resizeColumnStartRef.value.style.display = 'none');
updateWidth(e);
removeEvents();
};
var handleStart = function handleStart(e, eventsFor) {
dragging.value = true;
isResizingHandle.value = true;
removeEvents();
baseWidth = instance.vnode.el.parentNode.getBoundingClientRect().width;
if (e instanceof MouseEvent && e.which !== 1) {
return;
}
if (e.stopPropagation) e.stopPropagation();
startX = e.touches ? e.touches[0].pageX : e.pageX;
moveEvent = (0, _addEventListener.default)(document.documentElement, eventsFor.move, handleMove);
stopEvent = (0, _addEventListener.default)(document.documentElement, eventsFor.stop, handleStop);
};
var handleDown = function handleDown(e) {
e.stopPropagation();
e.preventDefault();
if (resizeColumnStartRef.value && resizeColumnMoveRef.value) {
var _fullTableRef$value, _fullTableRef$value2;
resizeColumnStartRef.value.style.left = "".concat(e.target.getBoundingClientRect().left - fullTableRef.value.getBoundingClientRect().left + e.target.clientWidth / 2 - 1, "px");
var headerEls = (_fullTableRef$value = fullTableRef.value) === null || _fullTableRef$value === void 0 ? void 0 : _fullTableRef$value.querySelectorAll(".".concat(props.prefixCls, "-header"));
var tbodyEls = (_fullTableRef$value2 = fullTableRef.value) === null || _fullTableRef$value2 === void 0 ? void 0 : _fullTableRef$value2.querySelectorAll(".".concat(props.prefixCls, "-tbody"));
// 无数据时拖拽的引导线高度仅表头高
if (!hasData.value && headerEls !== null && headerEls !== void 0 && headerEls.length) {
var _headerEls$, _headerEls$2;
resizeColumnStartRef.value.style.height = "".concat((_headerEls$ = headerEls[0]) === null || _headerEls$ === void 0 ? void 0 : _headerEls$.clientHeight, "px");
resizeColumnMoveRef.value.style.height = "".concat((_headerEls$2 = headerEls[0]) === null || _headerEls$2 === void 0 ? void 0 : _headerEls$2.clientHeight, "px");
} else {
var _headerEls$3, _tbodyEls$, _headerEls$4, _tbodyEls$2, _fullTableRef$value3, _headerEls$5, _tbodyEls$3, _fullTableRef$value4;
// 有数据时拖拽的引导线高度仅为真是表格高度,最高为列表可视高度
var flag = (headerEls === null || headerEls === void 0 ? void 0 : headerEls.length) && (tbodyEls === null || tbodyEls === void 0 ? void 0 : tbodyEls.length) && ((_headerEls$3 = headerEls[0]) === null || _headerEls$3 === void 0 ? void 0 : _headerEls$3.clientHeight) + ((_tbodyEls$ = tbodyEls[0]) === null || _tbodyEls$ === void 0 ? void 0 : _tbodyEls$.clientHeight) < fullTableRef.value.scrollHeight;
resizeColumnStartRef.value.style.height = flag ? "".concat(((_headerEls$4 = headerEls[0]) === null || _headerEls$4 === void 0 ? void 0 : _headerEls$4.clientHeight) + ((_tbodyEls$2 = tbodyEls[0]) === null || _tbodyEls$2 === void 0 ? void 0 : _tbodyEls$2.clientHeight), "px") : "".concat((_fullTableRef$value3 = fullTableRef.value) === null || _fullTableRef$value3 === void 0 ? void 0 : _fullTableRef$value3.clientHeight, "px");
resizeColumnMoveRef.value.style.height = flag ? "".concat(((_headerEls$5 = headerEls[0]) === null || _headerEls$5 === void 0 ? void 0 : _headerEls$5.clientHeight) + ((_tbodyEls$3 = tbodyEls[0]) === null || _tbodyEls$3 === void 0 ? void 0 : _tbodyEls$3.clientHeight), "px") : "".concat((_fullTableRef$value4 = fullTableRef.value) === null || _fullTableRef$value4 === void 0 ? void 0 : _fullTableRef$value4.clientHeight, "px");
}
resizeColumnStartRef.value.style.display = 'inherit';
}
handleStart(e, events.mouse);
};
var handleTouchDown = function handleTouchDown(e) {
e.stopPropagation();
e.preventDefault();
handleStart(e, events.touch);
};
var handleClick = function handleClick(e) {
e.stopPropagation();
e.preventDefault();
};
return function () {
var prefixCls = props.prefixCls;
var touchEvents = (0, _defineProperty2.default)({}, _supportsPassive.default ? 'onTouchstartPassive' : 'onTouchstart', function (e) {
return handleTouchDown(e);
});
return (0, _vue.createVNode)("div", (0, _objectSpread2.default)((0, _objectSpread2.default)({
"class": "".concat(prefixCls, "-resize-handle ").concat(dragging.value ? 'dragging' : ''),
"ref": resizeHandleRef,
"onMousedown": handleDown
}, touchEvents), {}, {
"onClick": handleClick
}), [(0, _vue.createVNode)("div", {
"class": "".concat(prefixCls, "-resize-handle-line")
}, null)]);
};
}
});
exports.default = _default;