Files
lilishop-ui/seller/src/views/shop/hotzone/directives/addItem.js
田香琪 ec948b5496 feat: 增强组件功能与样式优化
- 在多个组件中添加了新的属性和方法以提升功能性,如在卡片组件中引入 _ActiveTab 属性以管理活动标签。
- 优化了商品详情和商户页面的收藏逻辑,确保在未登录状态下引导用户登录。
- 更新了轮播组件的路由解析逻辑,增强了用户体验。
- 改进了投诉列表和收藏列表的样式,提升了响应式布局和可读性。
- 在全局配置中添加了对开发环境的错误处理,提升了调试体验。
2026-06-25 16:52:46 +08:00

102 lines
2.9 KiB
JavaScript

import _ from '../utils'
export default {
mounted(el, binding) {
const handleMouseDown = (e) => {
const ctx = binding.instance
if (!ctx) return
e && e.preventDefault()
let itemInfo = {
top: _.getDistanceY(e, el),
left: _.getDistanceX(e, el),
width: 0,
height: 0,
}
const container = _.getOffset(el)
const setting = {
topPer: _.decimalPoint(itemInfo.top / container.height),
leftPer: _.decimalPoint(itemInfo.left / container.width),
widthPer: 0,
heightPer: 0,
}
let preX = _.getPageX(e)
let preY = _.getPageY(e)
ctx.addItem(setting)
window.addEventListener('mousemove', handleChange, { passive: false })
window.addEventListener('mouseup', handleMouseUp, { passive: false })
function handleChange(e) {
e && e.preventDefault()
const moveX = _.getPageX(e) - preX
const moveY = _.getPageY(e) - preY
preX = _.getPageX(e)
preY = _.getPageY(e)
const minLimit = 0
const styleInfo = _.dealBR(itemInfo, moveX, moveY, minLimit)
itemInfo = _.dealEdgeValue(itemInfo, styleInfo, container, ctx.zones)
Object.assign(el.lastElementChild.style, {
top: `${itemInfo.top}px`,
left: `${itemInfo.left}px`,
width: `${itemInfo.width}px`,
height: `${itemInfo.height}px`,
})
}
function handleMouseUp() {
const perInfo = {
topPer: _.decimalPoint(itemInfo.top / container.height),
leftPer: _.decimalPoint(itemInfo.left / container.width),
widthPer: _.decimalPoint(itemInfo.width / container.width),
heightPer: _.decimalPoint(itemInfo.height / container.height),
img: '',
link: '',
type: '',
title: '',
}
if (ctx.isOverRange()) {
ctx.overRange()
} else if (container.height < _.MIN_LIMIT && itemInfo.width > _.MIN_LIMIT) {
ctx.changeItem(
Object.assign(perInfo, {
topPer: 0,
heightPer: 1,
}),
true
)
} else if (container.width < _.MIN_LIMIT && itemInfo.height > _.MIN_LIMIT) {
ctx.changeItem(
Object.assign(perInfo, {
leftper: 0,
widthPer: 1,
}),
true
)
} else if (itemInfo.width > _.MIN_LIMIT && itemInfo.height > _.MIN_LIMIT) {
ctx.changeItem(perInfo, true)
} else {
ctx.eraseItem()
}
window.removeEventListener('mousemove', handleChange)
window.removeEventListener('mouseup', handleMouseUp)
}
}
el.__hotzoneAddDestroy = () => el.removeEventListener('mousedown', handleMouseDown)
el.addEventListener('mousedown', handleMouseDown, { passive: false })
},
beforeUnmount(el) {
el.__hotzoneAddDestroy?.()
},
}