mirror of
https://github.com/vform666/variant-form3-vite.git
synced 2025-03-15 07:04:36 +08:00
1. 新增必填校验自定义提示属性requiredHint; 2. 当容器被设置隐藏时,同步清除容器内所有字段的校验规则; 3. 设计器、渲染器新增两个API方法:getFieldWidgets()、getContainerWidgets(); 4. field-list-api属性允许传递请求头信息; 5. 修复异步请求时setFormData()函数可能失效的问题; 6. 修复其他部分bug。
99 lines
2.8 KiB
JavaScript
99 lines
2.8 KiB
JavaScript
|
||
function _broadcast(componentName, eventName, params) {
|
||
this.$children.forEach(function (child) {
|
||
let name = child.$options.componentName;
|
||
if (name === componentName) {
|
||
//child.$emit.apply(child, [eventName].concat(params));
|
||
if (!!child.emit$) {
|
||
child.emit$.call(child, eventName, params)
|
||
}
|
||
} else {
|
||
_broadcast.apply(child, [componentName, eventName].concat([params]));
|
||
}
|
||
});
|
||
}
|
||
|
||
export default {
|
||
data() {
|
||
return {
|
||
vfEvents: {}
|
||
}
|
||
},
|
||
|
||
methods: {
|
||
emit$(eventName, data) {
|
||
if (this.vfEvents[eventName]) {
|
||
this.vfEvents[eventName].forEach((fn) => {
|
||
fn(data);
|
||
});
|
||
}
|
||
},
|
||
|
||
on$(eventName, fn) {
|
||
this.vfEvents[eventName] = this.vfEvents[eventName] || [];
|
||
this.vfEvents[eventName].push(fn);
|
||
},
|
||
|
||
off$(eventName, fn) {
|
||
if (this.vfEvents[eventName]) {
|
||
if ((fn === undefined) || (fn === null)) {
|
||
this.vfEvents[eventName].length = 0
|
||
return
|
||
}
|
||
|
||
for (let i = 0; i < this.vfEvents[eventName].length; i++) {
|
||
if (this.vfEvents[eventName][i] === fn) {
|
||
this.vfEvents[eventName].splice(i, 1)
|
||
break
|
||
}
|
||
}
|
||
}
|
||
},
|
||
|
||
dispatch: function dispatch(componentName, eventName, params) {
|
||
//debugger
|
||
let parent = this.$parent || this.$root;
|
||
let name = parent.$options.componentName;
|
||
|
||
while (parent && (!name || name !== componentName)) {
|
||
parent = parent.$parent;
|
||
|
||
if (parent) {
|
||
name = parent.$options.componentName;
|
||
}
|
||
}
|
||
if (parent) {
|
||
//parent.$emit.apply(parent, [eventName].concat(params));
|
||
if (!!parent.emit$) {
|
||
parent.emit$.call(parent, eventName, params)
|
||
}
|
||
}
|
||
},
|
||
|
||
broadcast: function broadcast(componentName, eventName, params) {
|
||
/* Vue3移除了$children属性,_broadcast方法已不能使用!! */
|
||
//_broadcast.call(this, componentName, eventName, params);
|
||
|
||
if (!!this.widgetRefList) { //FormRender只需遍历自身的widgetRefList属性
|
||
Object.keys(this.widgetRefList).forEach(refName => {
|
||
let cmpName = this.widgetRefList[refName].$options.componentName
|
||
if (cmpName === componentName) {
|
||
let foundRef = this.widgetRefList[refName]
|
||
foundRef.emit$.call(foundRef, eventName, params)
|
||
}
|
||
})
|
||
}
|
||
|
||
if (!!this.refList) { //其他组件遍历inject的refList属性
|
||
Object.keys(this.refList).forEach(refName => {
|
||
let cmpName = this.refList[refName].$options.componentName
|
||
if (cmpName === componentName) {
|
||
let foundRef = this.refList[refName]
|
||
foundRef.emit$.call(foundRef, eventName, params)
|
||
}
|
||
})
|
||
}
|
||
}
|
||
}
|
||
};
|