cloud-web-corejs 1.0.54-dev.801 → 1.0.54-dev.803
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/components/baseArea/index.vue +82 -27
- package/src/components/table/tableForm.vue +16 -5
- package/src/components/table/tableFormMixin.js +35 -7
- package/src/components/wf/content.vue +9 -1
- package/src/components/wf/wfActionDropdown.vue +32 -5
- package/src/components/wf/wfActionItems.js +22 -2
- package/src/components/wf/wfUtil.js +34 -10
- package/src/components/xform/form-designer/designer.js +6 -1
- package/src/components/xform/form-designer/form-widget/container-widget/data-table-widget.vue +9 -3
- package/src/components/xform/form-designer/form-widget/field-widget/date-range-widget.vue +3 -2
- package/src/components/xform/form-designer/form-widget/field-widget/date-widget.vue +3 -12
- package/src/components/xform/form-designer/form-widget/field-widget/mixins/date-limit-mixin.js +2 -46
- package/src/components/xform/form-designer/form-widget/field-widget/mixins/relative-default-mixin.js +107 -0
- package/src/components/xform/form-designer/form-widget/field-widget/mixins/relativeDateUtil.js +321 -0
- package/src/components/xform/form-designer/form-widget/field-widget/mixins/time-limit-mixin.js +2 -17
- package/src/components/xform/form-designer/form-widget/field-widget/time-range-widget.vue +3 -2
- package/src/components/xform/form-designer/form-widget/field-widget/time-widget.vue +3 -12
- package/src/components/xform/form-designer/setting-panel/property-editor/field-date/date-defaultValue-editor.vue +35 -36
- package/src/components/xform/form-designer/setting-panel/property-editor/field-date-range/date-range-defaultValue-editor.vue +35 -18
- package/src/components/xform/form-designer/setting-panel/property-editor/field-time/time-defaultValue-editor.vue +34 -36
- package/src/components/xform/form-designer/setting-panel/property-editor/field-time-range/time-range-defaultValue-editor.vue +35 -18
- package/src/components/xform/form-designer/setting-panel/property-editor/fixedQuery-editor.vue +39 -0
- package/src/components/xform/form-designer/setting-panel/property-editor/relative-default-block.vue +369 -0
- package/src/components/xform/form-designer/setting-panel/propertyRegister.js +1 -0
- package/src/components/xform/form-designer/widget-panel/widgetsConfig.js +34 -2
- package/src/components/xform/form-render/container-item/data-table-mixin.js +116 -74
- package/src/components/xform/lang/en-US.js +3 -0
- package/src/components/xform/lang/zh-CN.js +3 -0
- package/src/components/xform/utils/fixedQueryUtil.js +93 -0
- package/src/views/user/home/wjl/content.vue +1206 -0
- package/src/views/user/menu/voc_list.vue +686 -0
- package/src/views/user/role/edit.vue +32 -9
- package/src/views/user/role/list.vue +142 -67
- package/src/views/user/role/voc_edit.vue +282 -0
- package/src/views/user/wf/wf_manage/list.vue +17 -1
|
@@ -27,6 +27,7 @@ import {
|
|
|
27
27
|
resolveColumnRequiredFlag,
|
|
28
28
|
} from "../../../../components/xform/utils/tableColumnHelper";
|
|
29
29
|
import { mergeQueryParam } from "../../../../components/xform/utils/queryParamUtil";
|
|
30
|
+
import { isFixedQueryWidget } from "../../../../components/xform/utils/fixedQueryUtil";
|
|
30
31
|
import { isUrlValueColumn } from "../../../../components/xform/utils/attachmentValueUtil";
|
|
31
32
|
import {
|
|
32
33
|
EXPORT_TYPE,
|
|
@@ -1581,17 +1582,21 @@ modules = {
|
|
|
1581
1582
|
* @param {Object} options 可覆盖默认重置行为。
|
|
1582
1583
|
*/
|
|
1583
1584
|
resetForm(options) {
|
|
1584
|
-
let formData = this.formModel;
|
|
1585
1585
|
let ignoreFields = options?.ignoreFields || [];
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
|
|
1586
|
+
// 与 getSearchFormData 同口径递归各类容器:查询字段放进栅格/标签页等容器后
|
|
1587
|
+
// 一样要被清空,容器节点本身跳过。
|
|
1588
|
+
loopHandleWidget(this.widget.widgetList, (subWidget) => {
|
|
1589
|
+
if (subWidget.category === "container") return;
|
|
1590
|
+
let widgetName = subWidget.options.name;
|
|
1591
|
+
// 固定查询条件与调用方传的 ignoreFields 取并集,一并跳过
|
|
1592
|
+
if (ignoreFields.includes(widgetName) || isFixedQueryWidget(subWidget)) {
|
|
1593
|
+
return;
|
|
1594
|
+
}
|
|
1595
|
+
let widgetRef = this.getWidgetRef(widgetName);
|
|
1596
|
+
if (!widgetRef) return;
|
|
1597
|
+
if (widgetRef.setValue) widgetRef.setValue(null);
|
|
1598
|
+
if (this.isVabsearchFlagWidget(subWidget) && widgetRef.setShowValue) {
|
|
1599
|
+
widgetRef.setShowValue(null);
|
|
1595
1600
|
}
|
|
1596
1601
|
});
|
|
1597
1602
|
},
|
|
@@ -1683,17 +1688,22 @@ modules = {
|
|
|
1683
1688
|
getSearchCondition: function () {
|
|
1684
1689
|
let extraAccessData = this.extraAccessData || {};
|
|
1685
1690
|
let searchFormData = this.getSearchFormData();
|
|
1686
|
-
let defaultData = {};
|
|
1687
1691
|
|
|
1688
1692
|
// let globalReqData = baseRefUtil.getReportGlobalMap();//全局请求参数
|
|
1689
|
-
let tableCondition = this.getTableCondition();
|
|
1693
|
+
let tableCondition = this.getTableCondition() || {};
|
|
1690
1694
|
let conditions = {
|
|
1691
|
-
...defaultData,
|
|
1692
1695
|
...tableCondition,
|
|
1693
1696
|
...searchFormData,
|
|
1694
1697
|
...extraAccessData,
|
|
1695
1698
|
// ...globalReqData
|
|
1696
1699
|
};
|
|
1700
|
+
// tableCondition 的 condition 此前恒被 searchFormData 顶掉(getSearchFormData
|
|
1701
|
+
// 一定返回 condition 数组),等于这个通道只能传平铺参数。改为与宿主 queryParam
|
|
1702
|
+
// 同一套追加合并规则:同 field 以 tableCondition 为准。整体优先级
|
|
1703
|
+
// 查询区用户输入 < tableCondition < 宿主 queryParam(后者在 ajax.query 里合并)。
|
|
1704
|
+
if (tableCondition.condition) {
|
|
1705
|
+
mergeQueryParam(conditions, { condition: tableCondition.condition });
|
|
1706
|
+
}
|
|
1697
1707
|
return conditions;
|
|
1698
1708
|
},
|
|
1699
1709
|
/**
|
|
@@ -2120,6 +2130,10 @@ modules = {
|
|
|
2120
2130
|
let type = item.type ?? null;
|
|
2121
2131
|
// let widgetType = item.widgetType ?? widgetType;
|
|
2122
2132
|
// let isRange = item.isRange || false;
|
|
2133
|
+
// 固定查询条件:lockValue 让公共表格层跳过写值(刷新/还原/确定都不清它),
|
|
2134
|
+
// fixed 复用公共层已有语义,让个性化 json 回灌时不挪位置、不改常用。
|
|
2135
|
+
// 两者分开的原因见 utils/fixedQueryUtil.js 文件头。
|
|
2136
|
+
let fixedQuery = isFixedQueryWidget(widget);
|
|
2123
2137
|
searchColumns.push({
|
|
2124
2138
|
title: this.getI18nLabel(options.label),
|
|
2125
2139
|
field: this.getFieldKeyName(widget),
|
|
@@ -2128,6 +2142,11 @@ modules = {
|
|
|
2128
2142
|
// isRange,
|
|
2129
2143
|
common: true,
|
|
2130
2144
|
disabled: options.disabled,
|
|
2145
|
+
// hidden 的字段仍要留在 searchColumns(它照样往上送条件),
|
|
2146
|
+
// 只是不进「查询条件设置」弹框的列表,见 table/tableFormMixin.js
|
|
2147
|
+
hidden: !!options.hidden,
|
|
2148
|
+
lockValue: fixedQuery,
|
|
2149
|
+
fixed: fixedQuery,
|
|
2131
2150
|
defaultValueEnabled: !!type,
|
|
2132
2151
|
slot: options.name,
|
|
2133
2152
|
widget: widget,
|
|
@@ -2608,67 +2627,72 @@ modules = {
|
|
|
2608
2627
|
let scriptCode = this.getScriptCode();
|
|
2609
2628
|
let $grid = this.getGridTable();
|
|
2610
2629
|
let originOption = $grid.params.originOption;
|
|
2611
|
-
|
|
2630
|
+
// 组装请求参数。必须等 tableFormStop 闸门放开后才求值,所以整体包成
|
|
2631
|
+
// 函数、由 toDo 调用:查询区默认值的写入(tableForm 的 handleSyncFun)
|
|
2632
|
+
// 与搜索控件实例化都发生在闸门释放之后,提前取参只会拿到一份空条件——
|
|
2633
|
+
// 「查询条件设置」存的默认值、控件 options.defaultValue、控件 created
|
|
2634
|
+
// 里赋的值,首查一律带不上。口径与 components/table/index.js 的通用表格
|
|
2635
|
+
// 一致(那边 param() 本就写在 toDo 内)。
|
|
2636
|
+
const buildReqData = () => {
|
|
2637
|
+
let formData = {};
|
|
2638
|
+
|
|
2639
|
+
// 明细·选择导出已按勾选行 id 精确定位,再叠加主表搜索条件既无意义、又可能
|
|
2640
|
+
// 与明细口径的字段名冲突造成双重过滤,故只有它排除搜索条件;
|
|
2641
|
+
// 明细·条件导出与主表条件导出一样,必须带上搜索条件。
|
|
2642
|
+
if (
|
|
2643
|
+
customParam?.exportParam?.type !== EXPORT_TYPE.ITEM_SELECTED
|
|
2644
|
+
) {
|
|
2645
|
+
formData = tableOption.param ? tableOption.param() || {} : {};
|
|
2646
|
+
}
|
|
2647
|
+
const queryParams = Object.assign({}, formData);
|
|
2648
|
+
|
|
2649
|
+
// 处理排序条件
|
|
2650
|
+
/*if (sorts) {
|
|
2651
|
+
const firstSort = sorts[0];
|
|
2652
|
+
if (firstSort) {
|
|
2653
|
+
queryParams.sort = firstSort.property;
|
|
2654
|
+
queryParams.order = firstSort.order;
|
|
2655
|
+
}
|
|
2656
|
+
}*/
|
|
2612
2657
|
|
|
2613
|
-
|
|
2614
|
-
|
|
2615
|
-
|
|
2616
|
-
|
|
2617
|
-
|
|
2618
|
-
) {
|
|
2619
|
-
formData = tableOption.param ? tableOption.param() || {} : {};
|
|
2620
|
-
}
|
|
2621
|
-
const queryParams = Object.assign({}, formData);
|
|
2622
|
-
|
|
2623
|
-
// 处理排序条件
|
|
2624
|
-
/*if (sorts) {
|
|
2625
|
-
const firstSort = sorts[0];
|
|
2626
|
-
if (firstSort) {
|
|
2627
|
-
queryParams.sort = firstSort.property;
|
|
2628
|
-
queryParams.order = firstSort.order;
|
|
2658
|
+
// 处理筛选条件
|
|
2659
|
+
if (filters) {
|
|
2660
|
+
filters.forEach(({ property, values }) => {
|
|
2661
|
+
queryParams[property] = values.join(",");
|
|
2662
|
+
});
|
|
2629
2663
|
}
|
|
2630
|
-
}*/
|
|
2631
2664
|
|
|
2632
|
-
|
|
2633
|
-
|
|
2634
|
-
|
|
2635
|
-
|
|
2636
|
-
});
|
|
2637
|
-
}
|
|
2665
|
+
if (page.pageSize !== undefined) {
|
|
2666
|
+
queryParams["size"] = page.pageSize;
|
|
2667
|
+
queryParams["current"] = page.currentPage;
|
|
2668
|
+
}
|
|
2638
2669
|
|
|
2639
|
-
|
|
2640
|
-
|
|
2641
|
-
|
|
2642
|
-
|
|
2670
|
+
let isQueryAllPage = getTableStateValue($grid, "isQueryAllPage");
|
|
2671
|
+
/* if (isQueryAllPage === false) {
|
|
2672
|
+
queryParams.searchCount = false;
|
|
2673
|
+
} */
|
|
2674
|
+
queryParams.searchCount = isQueryAllPage !== false;
|
|
2675
|
+
Object.assign(queryParams, param);
|
|
2676
|
+
|
|
2677
|
+
// 宿主(选择弹框/表单弹框/表单抽屉)注入的查询参数:condition 追加合并,
|
|
2678
|
+
// 其余键平铺覆盖,见 utils/queryParamUtil.js
|
|
2679
|
+
if (that.dataTableConfig.queryParam) {
|
|
2680
|
+
mergeQueryParam(queryParams, that.dataTableConfig.queryParam);
|
|
2681
|
+
}
|
|
2643
2682
|
|
|
2644
|
-
|
|
2645
|
-
|
|
2646
|
-
|
|
2647
|
-
|
|
2648
|
-
queryParams.searchCount = false;
|
|
2649
|
-
} */
|
|
2650
|
-
queryParams.searchCount = isQueryAllPage !== false;
|
|
2651
|
-
Object.assign(queryParams, param);
|
|
2652
|
-
|
|
2653
|
-
// let formRef = that.getFormRef();
|
|
2654
|
-
// let dataTableConfig = formRef.$attrs.dataTableOption || {};
|
|
2655
|
-
// 宿主(选择弹框/表单弹框/表单抽屉)注入的查询参数:condition 追加合并,
|
|
2656
|
-
// 其余键平铺覆盖,见 utils/queryParamUtil.js
|
|
2657
|
-
if (that.dataTableConfig.queryParam) {
|
|
2658
|
-
mergeQueryParam(queryParams, that.dataTableConfig.queryParam);
|
|
2659
|
-
}
|
|
2683
|
+
return {
|
|
2684
|
+
...queryParams,
|
|
2685
|
+
};
|
|
2686
|
+
};
|
|
2660
2687
|
|
|
2661
2688
|
let reqPath = typeof path === "function" ? path() : path;
|
|
2662
2689
|
let accessReturnType =
|
|
2663
2690
|
this.widget.options.accessReturnType || "2";
|
|
2664
2691
|
|
|
2665
2692
|
return new Promise((resolve, reject) => {
|
|
2666
|
-
let reqData = {
|
|
2667
|
-
...queryParams,
|
|
2668
|
-
};
|
|
2669
2693
|
if (scriptCode) {
|
|
2670
|
-
let index = 0;
|
|
2671
2694
|
let toDo = () => {
|
|
2695
|
+
let reqData = buildReqData();
|
|
2672
2696
|
// let f = new Function("dataId", "formCode", "param", "done", accessScript);
|
|
2673
2697
|
let done = (res) => {
|
|
2674
2698
|
// this.clearRowWidgets();
|
|
@@ -2782,19 +2806,7 @@ modules = {
|
|
|
2782
2806
|
};
|
|
2783
2807
|
this.loadDefaultQueryList(reqData, done, customParam);
|
|
2784
2808
|
};
|
|
2785
|
-
|
|
2786
|
-
if (index < 500 && $grid.tableFormStop === true) {
|
|
2787
|
-
//阻塞列表查询,或者次数达到500时,自动释放
|
|
2788
|
-
index++;
|
|
2789
|
-
setTimeout(() => {
|
|
2790
|
-
loopHandle();
|
|
2791
|
-
}, 10);
|
|
2792
|
-
} else {
|
|
2793
|
-
if ($grid.tableFormStop) $grid.tableFormStop = false;
|
|
2794
|
-
toDo();
|
|
2795
|
-
}
|
|
2796
|
-
};
|
|
2797
|
-
loopHandle();
|
|
2809
|
+
this.runAfterTableFormReady($grid, toDo);
|
|
2798
2810
|
} else {
|
|
2799
2811
|
resolve();
|
|
2800
2812
|
}
|
|
@@ -2936,6 +2948,36 @@ modules = {
|
|
|
2936
2948
|
});
|
|
2937
2949
|
});
|
|
2938
2950
|
},
|
|
2951
|
+
/**
|
|
2952
|
+
* 等查询区就绪后再执行 fn。
|
|
2953
|
+
*
|
|
2954
|
+
* tableForm 挂载时立刻把 $grid.tableFormStop 置 true 把列表查询拦下,直到它
|
|
2955
|
+
* 把查询条件的默认值写进 formModel、并渲染出查询控件后才释放(见
|
|
2956
|
+
* components/table/tableFormMixin.js 的 mounted / handleSyncFun)。
|
|
2957
|
+
*
|
|
2958
|
+
* 调用方必须把「取查询条件」也放进 fn 里:闸门只推迟 fn 的执行时机,在闸门
|
|
2959
|
+
* 之外提前求值的参数拿到的是查询区还没初始化时的空条件。
|
|
2960
|
+
*
|
|
2961
|
+
* 兜底:最多等 500×10ms(5s),超时强制放行,避免查询区异常时列表空转。
|
|
2962
|
+
* @param {Object} $grid VXE Grid 实例。
|
|
2963
|
+
* @param {Function} fn 放行后执行的回调。
|
|
2964
|
+
*/
|
|
2965
|
+
runAfterTableFormReady($grid, fn) {
|
|
2966
|
+
let index = 0;
|
|
2967
|
+
let loopHandle = () => {
|
|
2968
|
+
if (index < 500 && $grid.tableFormStop === true) {
|
|
2969
|
+
//阻塞列表查询,或者次数达到500时,自动释放
|
|
2970
|
+
index++;
|
|
2971
|
+
setTimeout(() => {
|
|
2972
|
+
loopHandle();
|
|
2973
|
+
}, 10);
|
|
2974
|
+
} else {
|
|
2975
|
+
if ($grid.tableFormStop) $grid.tableFormStop = false;
|
|
2976
|
+
fn();
|
|
2977
|
+
}
|
|
2978
|
+
};
|
|
2979
|
+
loopHandle();
|
|
2980
|
+
},
|
|
2939
2981
|
/**
|
|
2940
2982
|
* 深度遍历分组列和叶子列。
|
|
2941
2983
|
* @param {Array} columns 列配置。
|
|
@@ -190,6 +190,9 @@ export default {
|
|
|
190
190
|
readonly: "Readonly",
|
|
191
191
|
disabled: "Disabled",
|
|
192
192
|
hidden: "Hidden",
|
|
193
|
+
fixedQuery: "Fixed Query Condition",
|
|
194
|
+
fixedQueryHelp:
|
|
195
|
+
"Keeps its value when Refresh / Revert / Confirm runs, and is read-only in Query Condition Setting",
|
|
193
196
|
textContent: "Text",
|
|
194
197
|
htmlContent: "HTML",
|
|
195
198
|
clearable: "Clearable",
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 「固定查询条件」判定工具。
|
|
3
|
+
*
|
|
4
|
+
* 数据表格查询区的字段值存在整张表单的 formModel 上,三条通道会把它清掉:
|
|
5
|
+
* 1. 刷新按钮 → resetForm 逐个 setValue(null)
|
|
6
|
+
* 2. 「查询条件设置」的「确定」→ tableFormMixin.dialogPrimary 按列写默认值
|
|
7
|
+
* 3. 「查询条件设置」的「还原」→ 走的就是 dialogPrimary
|
|
8
|
+
* 字段勾上 options.fixedQuery 之后,这三条通道一律跳过它,值保持原样
|
|
9
|
+
* (值本身仍由树点选/脚本 setValue 等业务通道注入,本开关只管「不被清掉」)。
|
|
10
|
+
*
|
|
11
|
+
* 组装 searchColumns 时(见 container-item/data-table-mixin.js)由 fixedQuery
|
|
12
|
+
* 派生出两个列级标记:
|
|
13
|
+
* - lockValue:公共表格层(components/table)据此跳过写值,语义是「值锁定」
|
|
14
|
+
* - fixed:复用公共层已有语义,让个性化 json 回灌时不挪位置、不改常用
|
|
15
|
+
* 两者必须分开:手写页面的固定列(如 branchSearchPage 的分支)只打 fixed,
|
|
16
|
+
* 它**依赖** dialogPrimary 按 defaultValue 回填,不能被 lockValue 一起跳过。
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
/* 能承载子组件的字段名,覆盖各类容器(含 vf-dialog/vf-drawer,loopHandleWidget 不进这两个) */
|
|
20
|
+
const CHILD_KEYS = [
|
|
21
|
+
"widgetList",
|
|
22
|
+
"cols",
|
|
23
|
+
"rows",
|
|
24
|
+
"tabs",
|
|
25
|
+
"panes",
|
|
26
|
+
"buttons",
|
|
27
|
+
"buttonWidgetList",
|
|
28
|
+
"leftWidgetList",
|
|
29
|
+
];
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* 深度遍历组件树节点(含 rows 这类只有 cols 的中间层对象)。
|
|
33
|
+
* @param {Object} node 起始节点
|
|
34
|
+
* @param {Function} callback 每个节点回调
|
|
35
|
+
*/
|
|
36
|
+
function walkWidget(node, callback) {
|
|
37
|
+
if (!node || typeof node !== "object") return;
|
|
38
|
+
callback(node);
|
|
39
|
+
CHILD_KEYS.forEach((key) => {
|
|
40
|
+
let children = node[key];
|
|
41
|
+
if (Array.isArray(children)) {
|
|
42
|
+
children.forEach((child) => walkWidget(child, callback));
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* 该字段是否勾选了「固定查询条件」。
|
|
49
|
+
* @param {Object} widget 字段组件 schema
|
|
50
|
+
* @returns {Boolean}
|
|
51
|
+
*/
|
|
52
|
+
export function isFixedQueryWidget(widget) {
|
|
53
|
+
return !!(widget && widget.options && widget.options.fixedQuery);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* 该列是否为「值锁定」列(公共表格层的口径,见文件头注释)。
|
|
58
|
+
* @param {Object} column searchColumns 的列配置
|
|
59
|
+
* @returns {Boolean}
|
|
60
|
+
*/
|
|
61
|
+
export function isLockedSearchColumn(column) {
|
|
62
|
+
return !!(column && column.lockValue);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* 组件是否位于某个数据表格的查询区(data-table 的 widgetList 分支,不含 buttons、
|
|
67
|
+
* 不含表格列组件)。属性面板据此决定要不要显示「固定查询条件」开关。
|
|
68
|
+
* @param {Array} widgetList 表单顶层组件列表(designer.widgetList)
|
|
69
|
+
* @param {Object} widget 待判定的字段组件
|
|
70
|
+
* @returns {Boolean}
|
|
71
|
+
*/
|
|
72
|
+
export function isQueryAreaWidget(widgetList, widget) {
|
|
73
|
+
if (!widget || !widget.id || !Array.isArray(widgetList)) return false;
|
|
74
|
+
let inQueryArea = false;
|
|
75
|
+
widgetList.forEach((item) => {
|
|
76
|
+
walkWidget(item, (node) => {
|
|
77
|
+
if (inQueryArea) return;
|
|
78
|
+
if (
|
|
79
|
+
node.category !== "container"
|
|
80
|
+
|| node.type !== "data-table"
|
|
81
|
+
|| !Array.isArray(node.widgetList)
|
|
82
|
+
) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
node.widgetList.forEach((child) => {
|
|
86
|
+
walkWidget(child, (sub) => {
|
|
87
|
+
if (sub.id === widget.id) inQueryArea = true;
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
return inQueryArea;
|
|
93
|
+
}
|