|
|
@@ -19,8 +19,14 @@ import zhCn from 'element-plus/es/locale/lang/zh-cn'
|
|
|
|
|
|
// 定义组件对象
|
|
|
const components = {
|
|
|
- ElDatePicker, ElTimePicker, HcTableFormUpload, ElRadioGroup,
|
|
|
- HcFormSelectSearch, HcFormSelectSearch2, HcFormCheckboxGroup, HcEchart,
|
|
|
+ ElDatePicker,
|
|
|
+ ElTimePicker,
|
|
|
+ HcTableFormUpload,
|
|
|
+ ElRadioGroup,
|
|
|
+ HcFormSelectSearch,
|
|
|
+ HcFormSelectSearch2,
|
|
|
+ HcFormCheckboxGroup,
|
|
|
+ HcEchart,
|
|
|
}
|
|
|
|
|
|
// 定义键盘事件常量
|
|
|
@@ -52,11 +58,47 @@ export default class HTableForm {
|
|
|
* @param {Function} options.onChartRefs - 图表引用回调
|
|
|
* @returns {Object} 返回创建的Vue应用和VM实例
|
|
|
*/
|
|
|
- static createForm({ template, tableForm, keys, appId, pid, onRight, onBlur, onLeftClick, onFormDataChange, onChartRefs }) {
|
|
|
+ static createForm({
|
|
|
+ template,
|
|
|
+ tableForm,
|
|
|
+ keys,
|
|
|
+ appId,
|
|
|
+ pid,
|
|
|
+ onRight,
|
|
|
+ onBlur,
|
|
|
+ onLeftClick,
|
|
|
+ onFormDataChange,
|
|
|
+ onChartRefs,
|
|
|
+ }) {
|
|
|
if (!template || !tableForm || !appId) {
|
|
|
throw new Error('渲染失败')
|
|
|
}
|
|
|
|
|
|
+ // 1. 先统一转义引号,防止模板里混有 \"
|
|
|
+ template = template.replace(/\\"/g, '"')
|
|
|
+
|
|
|
+ // 2. 替换 @mouseup.right → @mouseup-right1,并把最后一个参数 $event 改成 value
|
|
|
+ template = template
|
|
|
+ // 情况 A:双引号
|
|
|
+ .replace(
|
|
|
+ /<hc-form-checkbox-group([^>]*)@mouseup\.right="RightClick\(([^,]+,[^,]+,[^,]+,[^,]+,[^,]+,[^,]+,)\$event\)"([^>]*)>/gi,
|
|
|
+ '<hc-form-checkbox-group$1@mouseup-right1="(value)=>RightClick1($2value)"$3>',
|
|
|
+ )
|
|
|
+ // 情况 B:单引号
|
|
|
+ .replace(
|
|
|
+ /<hc-form-checkbox-group([^>]*)@mouseup\.right='RightClick\(([^,]+,[^,]+,[^,]+,[^,]+,[^,]+,[^,]+,)\$event\)'([^>]*)>/gi,
|
|
|
+ '<hc-form-checkbox-group$1@mouseup-right1="(value)=>RightClick1($2value)"$3>',
|
|
|
+ )
|
|
|
+ // 情况 A:双引号
|
|
|
+ .replace(
|
|
|
+ /<el-date-picker([^>]*)@mouseup\.right="RightClick\(([^,]+,[^,]+,[^,]+,[^,]+,[^,]+,[^,]+,)\$event\)"([^>]*)>/gi,
|
|
|
+ '<el-date-picker$1@mouseup-right1="(value)=>RightClick1($2value)"$3>',
|
|
|
+ )
|
|
|
+ // 情况 B:单引号
|
|
|
+ .replace(
|
|
|
+ /<el-date-picker([^>]*)@mouseup\.right='RightClick\(([^,]+,[^,]+,[^,]+,[^,]+,[^,]+,[^,]+,)\$event\)'([^>]*)>/gi,
|
|
|
+ '<el-date-picker$1@mouseup-right1="(value)=>RightClick1($2value)"$3>',
|
|
|
+ )
|
|
|
const app = createApp({
|
|
|
components,
|
|
|
data() {
|
|
|
@@ -94,13 +136,25 @@ export default class HTableForm {
|
|
|
setTimeout(() => {
|
|
|
console.log('11111右键菜单:', event.target)
|
|
|
|
|
|
- const KeyName = event?.target?.getAttribute('keyname') || event?.target?.getAttribute('id') || ''
|
|
|
- if (onRight) {
|
|
|
+ const KeyName
|
|
|
+ = event?.target?.getAttribute('keyname')
|
|
|
+ || event?.target?.getAttribute('id')
|
|
|
+ || ''
|
|
|
+ if (onRight && KeyName.includes('key')) {
|
|
|
event.preventDefault()
|
|
|
onRight(event, KeyName)
|
|
|
}
|
|
|
}, 100)
|
|
|
},
|
|
|
+ RightClick1(a, b, c, d, e, f, val) {
|
|
|
+ setTimeout(() => {
|
|
|
+ console.log('22222右键菜单:', val)
|
|
|
+ if (onRight) {
|
|
|
+ val.e.preventDefault()
|
|
|
+ onRight(val.e, val.keyname)
|
|
|
+ }
|
|
|
+ }, 100)
|
|
|
+ },
|
|
|
// 获取信息(待实现)
|
|
|
getInformation() {
|
|
|
// 实现获取信息的逻辑
|
|
|
@@ -119,14 +173,23 @@ export default class HTableForm {
|
|
|
},
|
|
|
// 正则表达式验证
|
|
|
getRegularExpression(event, reg, msg, a, b, leng, type, c, d) {
|
|
|
- const KeyName = event?.target?.getAttribute('keyname') || ''
|
|
|
+ const KeyName
|
|
|
+ = event?.target?.getAttribute('keyname') || ''
|
|
|
if (onBlur) {
|
|
|
- onBlur(event, KeyName, reg, this.formData[KeyName], msg, leng, type)
|
|
|
+ onBlur(
|
|
|
+ event,
|
|
|
+ KeyName,
|
|
|
+ reg,
|
|
|
+ this.formData[KeyName],
|
|
|
+ msg,
|
|
|
+ leng,
|
|
|
+ type,
|
|
|
+ )
|
|
|
}
|
|
|
},
|
|
|
// 远程表单变化处理
|
|
|
formRemoteChange(data) {
|
|
|
- Object.keys(data).forEach(key => {
|
|
|
+ Object.keys(data).forEach((key) => {
|
|
|
this.formData[key] = data[key]
|
|
|
})
|
|
|
},
|
|
|
@@ -152,7 +215,12 @@ export default class HTableForm {
|
|
|
},
|
|
|
// 日期键盘事件处理
|
|
|
dateKeydown({ type, name }) {
|
|
|
- HTableForm.setKeyupData({ target: { id: name } }, type, keys, pid)
|
|
|
+ HTableForm.setKeyupData(
|
|
|
+ { target: { id: name } },
|
|
|
+ type,
|
|
|
+ keys,
|
|
|
+ pid,
|
|
|
+ )
|
|
|
},
|
|
|
// 输入框左键点击处理
|
|
|
inputLeftClick(event, key) {
|
|
|
@@ -209,15 +277,19 @@ export default class HTableForm {
|
|
|
*/
|
|
|
static setByClassKeyup(keys, pid = '') {
|
|
|
try {
|
|
|
- const poppers = document.querySelectorAll('.hc-table-form-date-picker')
|
|
|
- poppers.forEach(item => {
|
|
|
+ const poppers = document.querySelectorAll(
|
|
|
+ '.hc-table-form-date-picker',
|
|
|
+ )
|
|
|
+ poppers.forEach((item) => {
|
|
|
let key = ''
|
|
|
const ids = item.getAttribute('class').split('-form-id-')
|
|
|
if (ids.length >= 1) {
|
|
|
key = ids[1]
|
|
|
}
|
|
|
if (ids) {
|
|
|
- const panels = item.querySelectorAll('.el-picker-panel__content')
|
|
|
+ const panels = item.querySelectorAll(
|
|
|
+ '.el-picker-panel__content',
|
|
|
+ )
|
|
|
this.setElementsEvent(panels, key, keys, pid)
|
|
|
}
|
|
|
})
|
|
|
@@ -236,25 +308,49 @@ export default class HTableForm {
|
|
|
static setElementsEvent(elements, key, keys, pid = '') {
|
|
|
if (elements.length > 0) {
|
|
|
const _this = this
|
|
|
- elements[0].addEventListener('keydown', e => {
|
|
|
- e.stopPropagation()
|
|
|
- switch (e.key) {
|
|
|
- case ARROW_UP:
|
|
|
- _this.setKeyupData({ target: { id: key } }, 'up', keys, pid)
|
|
|
- break
|
|
|
- case ARROW_DOWN:
|
|
|
- _this.setKeyupData({ target: { id: key } }, 'down', keys, pid)
|
|
|
- break
|
|
|
- case ARROW_LEFT:
|
|
|
- _this.setKeyupData({ target: { id: key } }, 'left', keys, pid)
|
|
|
- break
|
|
|
- case ARROW_RIGHT:
|
|
|
- _this.setKeyupData({ target: { id: key } }, 'right', keys, pid)
|
|
|
- break
|
|
|
- }
|
|
|
- }, {
|
|
|
- capture: true,
|
|
|
- })
|
|
|
+ elements[0].addEventListener(
|
|
|
+ 'keydown',
|
|
|
+ (e) => {
|
|
|
+ e.stopPropagation()
|
|
|
+ switch (e.key) {
|
|
|
+ case ARROW_UP:
|
|
|
+ _this.setKeyupData(
|
|
|
+ { target: { id: key } },
|
|
|
+ 'up',
|
|
|
+ keys,
|
|
|
+ pid,
|
|
|
+ )
|
|
|
+ break
|
|
|
+ case ARROW_DOWN:
|
|
|
+ _this.setKeyupData(
|
|
|
+ { target: { id: key } },
|
|
|
+ 'down',
|
|
|
+ keys,
|
|
|
+ pid,
|
|
|
+ )
|
|
|
+ break
|
|
|
+ case ARROW_LEFT:
|
|
|
+ _this.setKeyupData(
|
|
|
+ { target: { id: key } },
|
|
|
+ 'left',
|
|
|
+ keys,
|
|
|
+ pid,
|
|
|
+ )
|
|
|
+ break
|
|
|
+ case ARROW_RIGHT:
|
|
|
+ _this.setKeyupData(
|
|
|
+ { target: { id: key } },
|
|
|
+ 'right',
|
|
|
+ keys,
|
|
|
+ pid,
|
|
|
+ )
|
|
|
+ break
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ capture: true,
|
|
|
+ },
|
|
|
+ )
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -268,10 +364,11 @@ export default class HTableForm {
|
|
|
static setKeyupData({ target }, type, keys, pid = '') {
|
|
|
const key = target.id
|
|
|
if (key && type && isArray(keys)) {
|
|
|
- let left = -1, top = -1
|
|
|
+ let left = -1,
|
|
|
+ top = -1
|
|
|
for (let i = 0; i < keys.length; i++) {
|
|
|
if (isArray(keys[i])) {
|
|
|
- const index = keys[i].findIndex(id => id === key)
|
|
|
+ const index = keys[i].findIndex((id) => id === key)
|
|
|
if (index !== -1) {
|
|
|
left = index
|
|
|
top = i
|
|
|
@@ -350,7 +447,12 @@ export default class HTableForm {
|
|
|
* @param {string} pid - 父级ID
|
|
|
* @param {boolean} add - 是否添加样式
|
|
|
*/
|
|
|
- static async setFormStyle(key, name = 'hc-red-border', pid = '', add = false) {
|
|
|
+ static async setFormStyle(
|
|
|
+ key,
|
|
|
+ name = 'hc-red-border',
|
|
|
+ pid = '',
|
|
|
+ add = false,
|
|
|
+ ) {
|
|
|
const dom = await this.getQuerySelector(key, pid)
|
|
|
if (!dom) return
|
|
|
|
|
|
@@ -411,7 +513,11 @@ export default class HTableForm {
|
|
|
const handleKeyDown = (event) => {
|
|
|
if (!this.vEnableBulk) return
|
|
|
const { key, ctrlKey, metaKey } = event
|
|
|
- const isCtrl = window.isMac ? metaKey : window.isWin ? ctrlKey : false
|
|
|
+ const isCtrl = window.isMac
|
|
|
+ ? metaKey
|
|
|
+ : window.isWin
|
|
|
+ ? ctrlKey
|
|
|
+ : false
|
|
|
if (isCtrl) {
|
|
|
if (onCtrlDown && key === window?.isCtrl) {
|
|
|
onCtrlDown(event)
|
|
|
@@ -426,7 +532,11 @@ export default class HTableForm {
|
|
|
const handleKeyUp = (event) => {
|
|
|
if (!this.vEnableBulk) return
|
|
|
const { key, ctrlKey, metaKey } = event
|
|
|
- const isCtrl = window.isMac ? metaKey : window.isWin ? ctrlKey : false
|
|
|
+ const isCtrl = window.isMac
|
|
|
+ ? metaKey
|
|
|
+ : window.isWin
|
|
|
+ ? ctrlKey
|
|
|
+ : false
|
|
|
if (!isCtrl && key === window?.isCtrl && onCtrlUp) {
|
|
|
onCtrlUp(event)
|
|
|
}
|