@ctzy-web-client/plugin-component-vue 1.0.0

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.
Files changed (138) hide show
  1. package/package.json +43 -0
  2. package/src/advance-select/advance-operation.vue +44 -0
  3. package/src/advance-select/advance-option.vue +115 -0
  4. package/src/advance-select/advance-select.vue +343 -0
  5. package/src/advance-select/events-helpers.js +40 -0
  6. package/src/advance-select/index.js +13 -0
  7. package/src/advance-select/use-advance-option.js +58 -0
  8. package/src/advance-select/use-advance-select.js +142 -0
  9. package/src/application-slot/application-slot.js +70 -0
  10. package/src/application-slot/breadcrumb-item.vue +12 -0
  11. package/src/application-slot/header-tools-item.vue +12 -0
  12. package/src/application-slot/index.js +17 -0
  13. package/src/breadcrumb-select/breadcrumb-select.vue +97 -0
  14. package/src/breadcrumb-select/index.js +6 -0
  15. package/src/components.js +39 -0
  16. package/src/contextmenu/contextmenu-item.vue +13 -0
  17. package/src/contextmenu/contextmenu.vue +56 -0
  18. package/src/contextmenu/index.js +11 -0
  19. package/src/contextmenu/use-contextmenu.js +117 -0
  20. package/src/data-form/data-form-item.vue +49 -0
  21. package/src/data-form/data-form.vue +212 -0
  22. package/src/data-form/dynamic-component.js +24 -0
  23. package/src/data-form/form-components/Blots/AtBlot.js +32 -0
  24. package/src/data-form/form-components/bwa-date-picker.vue +43 -0
  25. package/src/data-form/form-components/bwa-date-time-picker.vue +49 -0
  26. package/src/data-form/form-components/bwa-input-float.vue +41 -0
  27. package/src/data-form/form-components/bwa-input-integer.vue +58 -0
  28. package/src/data-form/form-components/bwa-input.vue +32 -0
  29. package/src/data-form/form-components/bwa-multi-select.vue +27 -0
  30. package/src/data-form/form-components/bwa-rich-text-tinymce.vue +561 -0
  31. package/src/data-form/form-components/bwa-rich-text.vue +395 -0
  32. package/src/data-form/form-components/bwa-select.vue +67 -0
  33. package/src/data-form/form-components/bwa-textarea.vue +28 -0
  34. package/src/data-form/form-components/bwa-upload.vue +145 -0
  35. package/src/data-form/form-components/bwa-user-multi-select.vue +25 -0
  36. package/src/data-form/form-components/bwa-user-select.vue +81 -0
  37. package/src/data-form/index.js +35 -0
  38. package/src/data-table/data-column-view.vue +131 -0
  39. package/src/data-table/data-table-card.vue +81 -0
  40. package/src/data-table/data-table-column.vue +52 -0
  41. package/src/data-table/data-table.vue +426 -0
  42. package/src/data-table/dynamic-component.js +58 -0
  43. package/src/data-table/index.js +13 -0
  44. package/src/data-table/use-datatable-drag.js +156 -0
  45. package/src/datatable-settings/datatable-settings.vue +323 -0
  46. package/src/datatable-settings/index.js +6 -0
  47. package/src/date-range/date-picker.vue +115 -0
  48. package/src/date-range/date-range.vue +202 -0
  49. package/src/date-range/index.js +6 -0
  50. package/src/drag-list/constants.js +1 -0
  51. package/src/drag-list/drag-item.vue +46 -0
  52. package/src/drag-list/drag-list.vue +50 -0
  53. package/src/drag-list/index.js +6 -0
  54. package/src/drag-list/use-drag-list.js +209 -0
  55. package/src/dragable/constants.js +3 -0
  56. package/src/dragable/dragable-item.vue +19 -0
  57. package/src/dragable/dragable-operation.vue +28 -0
  58. package/src/dragable/dragable.vue +26 -0
  59. package/src/dragable/index.js +14 -0
  60. package/src/dragable/use-dragable.js +227 -0
  61. package/src/filter-panel/conditions/condition.js +35 -0
  62. package/src/filter-panel/conditions/date-range-condition.vue +35 -0
  63. package/src/filter-panel/conditions/department-condition/data.json +29537 -0
  64. package/src/filter-panel/conditions/department-condition/department-condition.vue +92 -0
  65. package/src/filter-panel/conditions/department-condition/department-node.vue +52 -0
  66. package/src/filter-panel/conditions/index.js +22 -0
  67. package/src/filter-panel/conditions/input-condition.vue +63 -0
  68. package/src/filter-panel/conditions/multi-user-condition.vue +56 -0
  69. package/src/filter-panel/conditions/multiple-menu-condition.vue +45 -0
  70. package/src/filter-panel/conditions/single-menu-condition.vue +58 -0
  71. package/src/filter-panel/conditions/single-user-condition.vue +56 -0
  72. package/src/filter-panel/filter-panel-item.vue +46 -0
  73. package/src/filter-panel/filter-panel.vue +149 -0
  74. package/src/filter-panel/index.js +17 -0
  75. package/src/filter-panel/use-filter-panel-item.js +59 -0
  76. package/src/filter-panel/use-filter-panel.js +203 -0
  77. package/src/hooks/use-data/index.js +234 -0
  78. package/src/index.js +48 -0
  79. package/src/layout/index.js +6 -0
  80. package/src/layout/layout.vue +74 -0
  81. package/src/make-installer.js +36 -0
  82. package/src/math/Rectangle.js +28 -0
  83. package/src/menu/index.js +6 -0
  84. package/src/menu/menu-item.vue +41 -0
  85. package/src/menu/menu.vue +53 -0
  86. package/src/panel/index.js +6 -0
  87. package/src/panel/panel.vue +42 -0
  88. package/src/panel-tabs/index.js +6 -0
  89. package/src/panel-tabs/panel-tabs.js +92 -0
  90. package/src/pct-filter-panel/index.js +10 -0
  91. package/src/pct-filter-panel/pct-compents/index.js +10 -0
  92. package/src/pct-filter-panel/pct-compents/pct-Input-condition.vue +63 -0
  93. package/src/pct-filter-panel/pct-compents/pct-date-range-condition.vue +60 -0
  94. package/src/pct-filter-panel/pct-compents/pct-multiple-menu-condition.vue +177 -0
  95. package/src/pct-filter-panel/pct-compents/pct-multiple-menu-condition2.vue +142 -0
  96. package/src/pct-filter-panel/pct-filter-panel-item.vue +46 -0
  97. package/src/pct-filter-panel/pct-filter-panel.vue +201 -0
  98. package/src/pct-filter-panel/use-filter-panel-item.js +61 -0
  99. package/src/pct-filter-panel/use-filter-panel.js +206 -0
  100. package/src/plugins.js +3 -0
  101. package/src/progress/index.js +8 -0
  102. package/src/progress/progress-item.vue +81 -0
  103. package/src/progress/progress.vue +58 -0
  104. package/src/progress/use-progress.js +66 -0
  105. package/src/utils/db.js +8 -0
  106. package/src/utils.js +263 -0
  107. package/src/where-filter-panel/index.js +0 -0
  108. package/src/where-filter-panel/use-where-filter-panel.js +28 -0
  109. package/src/where-filter-panel/where-filter-panel.vue +9 -0
  110. package/style/advance-select.scss +316 -0
  111. package/style/breadcrumb-select.scss +80 -0
  112. package/style/common/var.scss +240 -0
  113. package/style/common.scss +48 -0
  114. package/style/contextmenu.scss +58 -0
  115. package/style/data-form.scss +35 -0
  116. package/style/data-table.scss +81 -0
  117. package/style/datatable-settings.scss +125 -0
  118. package/style/date-range.scss +136 -0
  119. package/style/department-condition.scss +39 -0
  120. package/style/drag-list.scss +68 -0
  121. package/style/dragable.scss +8 -0
  122. package/style/filter-panel.scss +199 -0
  123. package/style/index.scss +22 -0
  124. package/style/input-condition.scss +30 -0
  125. package/style/layout.scss +70 -0
  126. package/style/menu.scss +184 -0
  127. package/style/mixins/_var.scss +21 -0
  128. package/style/mixins/config.scss +4 -0
  129. package/style/mixins/function.scss +62 -0
  130. package/style/mixins/mixins.scss +88 -0
  131. package/style/panel-tabs.scss +60 -0
  132. package/style/panel.scss +110 -0
  133. package/style/pct-filter-panel.scss +306 -0
  134. package/style/progress.scss +122 -0
  135. package/style/rich-text.scss +30 -0
  136. package/style/theme/theme.scss +161 -0
  137. package/style/theme/var.scss +34 -0
  138. package/style/var.scss +21 -0
@@ -0,0 +1,81 @@
1
+ <template>
2
+ <div :class="ns.b()" :style="{ width: percent }" ref="progressItemEl"></div>
3
+ </template>
4
+
5
+ <script setup>
6
+ import { combineLatest, delayWhen, from, map, Observable, tap } from 'rxjs';
7
+ import {
8
+ computed,
9
+ inject,
10
+ nextTick,
11
+ onBeforeUnmount,
12
+ ref,
13
+ toRefs,
14
+ unref,
15
+ useAttrs,
16
+ watch,
17
+ } from 'vue';
18
+ import { useNamespace, progressKey } from 'web-base-client-vue';
19
+
20
+ defineOptions({ name: 'BwaProgressItem' });
21
+
22
+ const props = defineProps({
23
+ width: { type: Number, default: 0 },
24
+ label: { type: String, required: true },
25
+ });
26
+
27
+ const { width, label } = toRefs(props);
28
+
29
+ const ns = useNamespace('progress-item');
30
+
31
+ const progressItemEl = ref(null);
32
+
33
+ const progress = inject(progressKey);
34
+
35
+ const percent = computed(() => (unref(width) / progress.max) * 100 + '%');
36
+
37
+ const attrs = useAttrs();
38
+
39
+ const id = progress.nextID();
40
+
41
+ const colorObservable = new Observable((observer) =>
42
+ watch(
43
+ computed(() => attrs.style['--bwa-progress-item-color']),
44
+ observer.next.bind(observer),
45
+ { immediate: true }
46
+ )
47
+ ).pipe(delayWhen(() => from(nextTick())));
48
+
49
+ const widthObservable = new Observable((observer) =>
50
+ watch(width, observer.next.bind(observer), { immediate: true })
51
+ ).pipe(map((width) => parseInt(width) || 0));
52
+
53
+ const labelObservable = new Observable((observer) =>
54
+ watch(label, observer.next.bind(observer), { immediate: true })
55
+ ).pipe();
56
+
57
+ const progressItemObservable = combineLatest([
58
+ widthObservable,
59
+ labelObservable,
60
+ colorObservable,
61
+ ]);
62
+
63
+ const subscription = progressItemObservable.subscribe({
64
+ next: ([width, label, color]) => {
65
+ progress.handleProgressItemCreate({
66
+ id,
67
+ width,
68
+ label,
69
+ color,
70
+ });
71
+ },
72
+ complete: () => {
73
+ progress.handleProgressItemDestroy(id);
74
+ },
75
+ error: () => {
76
+ progress.handleProgressItemDestroy(id);
77
+ },
78
+ });
79
+
80
+ onBeforeUnmount(subscription.unsubscribe.bind(subscription));
81
+ </script>
@@ -0,0 +1,58 @@
1
+ <template>
2
+ <ElTooltip placement="bottom-start" effect="light" append-to=".bwa-application">
3
+ <div :class="ns.b()">
4
+ <div :class="ns.e('inner')" :style="{ '--bwa-progress-width': max }">
5
+ <slot></slot>
6
+ </div>
7
+ <div
8
+ v-if="showLabel"
9
+ :class="ns.e('percent')"
10
+ :style="{ '--bwa-progress-label-width': labelWidth }"
11
+ >
12
+ {{ percent }}%
13
+ </div>
14
+ </div>
15
+
16
+ <template #content>
17
+ <div :class="ns.be('info', 'wrapper')">
18
+ <div
19
+ v-for="item in states.progressItemList"
20
+ :key="item.id"
21
+ :class="ns.be('item', 'info')"
22
+ :style="{ '--bwa-progress-item-dot-color': item.color }"
23
+ >
24
+ <span :class="ns.be('item', 'label')">{{ item.label }}</span>
25
+ <span :class="ns.be('item', 'value')">{{ item.width }}</span>
26
+ </div>
27
+ </div>
28
+ </template>
29
+ </ElTooltip>
30
+ </template>
31
+
32
+ <script setup>
33
+ import { ElTooltip } from 'element-plus';
34
+ import { provide, reactive, toRefs } from 'vue';
35
+ import { useNamespace, progressKey } from 'web-base-client-vue';
36
+ import { useProgress, useProgressState } from './use-progress';
37
+
38
+ defineOptions({ name: 'BwaProgress' });
39
+
40
+ const props = defineProps({
41
+ max: { type: Number, default: 0 },
42
+ showLabel: { type: Boolean, default: true },
43
+ labelWidth: { type: String, default: 'auto' },
44
+ });
45
+
46
+ const { max } = toRefs(props);
47
+
48
+ const ns = useNamespace('progress');
49
+
50
+ const states = useProgressState(props);
51
+ const { percent, handleProgressItemCreate, handleProgressItemDestroy, nextID } =
52
+ useProgress(props, states);
53
+
54
+ provide(
55
+ progressKey,
56
+ reactive({ max, handleProgressItemCreate, handleProgressItemDestroy, nextID })
57
+ );
58
+ </script>
@@ -0,0 +1,66 @@
1
+ import { computed, reactive, unref } from 'vue';
2
+
3
+ let uid = 1;
4
+
5
+ export const useProgressState = (props) =>
6
+ reactive({
7
+ progressItemList: [],
8
+ });
9
+
10
+ export const useProgress = (props, states) => {
11
+ const max = computed(() => parseFloat(props.max));
12
+
13
+ const percent = computed(() => {
14
+ const total = states.progressItemList.reduce(
15
+ (result, progressItem) => result + progressItem.width,
16
+ 0
17
+ );
18
+
19
+ if (unref(max) === 0 || isNaN(unref(max))) {
20
+ return 0;
21
+ }
22
+
23
+ return parseInt((total / unref(max)) * 100);
24
+ });
25
+
26
+ const removeProgressItem = (id) => {
27
+ states.progressItemList = states.progressItemList.filter(
28
+ (item) => item.id === id
29
+ );
30
+ };
31
+
32
+ const addProgressItem = (progressItem) => {
33
+ const index = states.progressItemList.findIndex(
34
+ (item) => item.id === progressItem.id
35
+ );
36
+
37
+ if (index !== -1) {
38
+ }
39
+
40
+ if (index === -1) {
41
+ states.progressItemList.push(progressItem);
42
+ return;
43
+ }
44
+
45
+ states.progressItemList.splice(index, 1, progressItem);
46
+ };
47
+
48
+ const handleProgressItemCreate = (progressItem) => {
49
+ addProgressItem(progressItem);
50
+ };
51
+
52
+ const handleProgressItemDestroy = (id) => {
53
+ removeProgressItem(id);
54
+ };
55
+
56
+ const nextID = () => {
57
+ return uid++;
58
+ };
59
+
60
+ return {
61
+ percent,
62
+ handleProgressItemCreate,
63
+ handleProgressItemDestroy,
64
+ nextID,
65
+ };
66
+ };
@@ -0,0 +1,8 @@
1
+ import Dexie from 'dexie';
2
+
3
+ export const dataModelDB = new Dexie('DataModel');
4
+
5
+ dataModelDB.version(1).stores({
6
+ filterPanel: '[app+tableName+userID]',
7
+ tableHeaderSettings: '[app+tableName+userID]',
8
+ });
package/src/utils.js ADDED
@@ -0,0 +1,263 @@
1
+ import {
2
+ computed,
3
+ resolveComponent,
4
+ inject,
5
+ isProxy,
6
+ isReactive,
7
+ isRef,
8
+ unref,
9
+ markRaw,
10
+ } from 'vue';
11
+ import get from 'lodash/get';
12
+ import set from 'lodash/set';
13
+
14
+ /**
15
+ * 组件名称前缀
16
+ */
17
+ export const COMPONENT_NAME_PREFIX = 'Bwa';
18
+ /**
19
+ * 生成组件名称
20
+ * @param {Object} component
21
+ */
22
+ export const createComponentName = (component) => {
23
+ component.name = COMPONENT_NAME_PREFIX + component.name;
24
+ };
25
+
26
+ export const useDynamicComponent = (
27
+ props,
28
+ { emit },
29
+ defaultComponent,
30
+ attributeName = 'attrName'
31
+ ) => {
32
+ const column = computed(() => props.column);
33
+
34
+ const componentProps = computed(() => {
35
+ const _column = unref(column);
36
+
37
+ if (!_column) {
38
+ return {};
39
+ }
40
+
41
+ const originalComponentProps = _column.componentProps;
42
+ const _componentProps = { ...originalComponentProps };
43
+
44
+ Object.keys(_componentProps).forEach((key) => {
45
+ let val = _componentProps[key];
46
+
47
+ //处理注入的参数值
48
+ if (val && typeof val == 'string' && val.indexOf('inject:') == 0) {
49
+ let injectNode = val.replace('inject:', '');
50
+
51
+ let injectInfo = injectNode.split('.');
52
+
53
+ let injectScope = injectInfo.shift();
54
+
55
+ let injectObj = inject(injectScope);
56
+
57
+ if (injectInfo.length) {
58
+ _componentProps[key] = get(injectObj, injectInfo.join('.'));
59
+ } else {
60
+ _componentProps[key] = injectObj;
61
+ }
62
+
63
+ if (isProxy(_componentProps[key])) {
64
+ //代理对象可能是ref 也可能是 reactive
65
+ _componentProps[key] = isRef(_componentProps[key])
66
+ ? _componentProps[key].value
67
+ : _componentProps[key];
68
+ }
69
+ } else {
70
+ _componentProps[key] = val;
71
+ }
72
+ });
73
+
74
+ return _componentProps;
75
+ });
76
+
77
+ const isFunctionComponent = computed(
78
+ () => typeof unref(column)?.component == 'function'
79
+ );
80
+
81
+ const component = computed(() => {
82
+ const _column = unref(column);
83
+ if (unref(isFunctionComponent)) {
84
+ return markRaw(
85
+ _column?.component({
86
+ record: props.record,
87
+ column,
88
+ value: props.modelValue,
89
+ props: componentProps,
90
+ })
91
+ );
92
+ }
93
+
94
+ return markRaw(resolveComponent(_column.component || defaultComponent));
95
+ });
96
+
97
+ const params = computed(() => {
98
+ const _column = unref(column);
99
+
100
+ const _params = { ...unref(componentProps) };
101
+
102
+ const _component = unref(component);
103
+
104
+ if (!_component) {
105
+ return _params;
106
+ }
107
+
108
+ if (_component.emits) {
109
+ //存在双向绑定就绑定
110
+
111
+ let emits = _component.emits || [];
112
+
113
+ if (!Array.isArray(emits) && emits && typeof emits === 'object') {
114
+ emits = Object.keys(emits);
115
+ }
116
+
117
+ if (
118
+ Array.isArray(emits) &&
119
+ emits.find((eventName) =>
120
+ [
121
+ 'onUpdate:modelValue',
122
+ 'onUpdate:model-value',
123
+ 'update:modelValue',
124
+ 'update:model-value',
125
+ ].includes(eventName)
126
+ )
127
+ ) {
128
+ _params['modelValue'] = get(props.record, _column[attributeName]);
129
+ _params['onUpdate:modelValue'] = (val) => {
130
+ set(props.record, _column[attributeName], val);
131
+ };
132
+ } else {
133
+ _params['value'] = get(props.record, _column[attributeName]);
134
+ }
135
+
136
+ //存在 on-change 事件的话 去绑定
137
+ if (emits.find((eventName) => eventName == 'on-change')) {
138
+ _params['on-change'] = (event) =>
139
+ emit('on-change', { data: event, column });
140
+ }
141
+ } else {
142
+ _params['value'] = get(props.record, _column[attributeName]);
143
+ }
144
+
145
+ Object.assign(_params, unref(componentProps));
146
+
147
+ return _params;
148
+ });
149
+
150
+ return { params, component };
151
+ };
152
+
153
+ // /**
154
+ // * 动态组件
155
+ // * @param {*} column
156
+ // * @param {String} value
157
+ // */
158
+ // export const aaaauseDynamicComponent = (
159
+ // props,
160
+ // { emit },
161
+ // defaultComponent,
162
+ // attrName = 'attrName'
163
+ // ) => {
164
+ // //字段
165
+ // const column = props.column;
166
+
167
+ // //参数
168
+ // const componentProps = column.componentProps
169
+ // ? { ...column.componentProps }
170
+ // : {};
171
+
172
+ // //处理组件参数
173
+ // Object.keys(componentProps).forEach((key) => {
174
+ // let val = componentProps[key];
175
+
176
+ // //处理注入的参数值
177
+ // if (val && typeof val == 'string' && val.indexOf('inject:') == 0) {
178
+ // let injectNode = val.replace('inject:', '');
179
+
180
+ // let injectInfo = injectNode.split('.');
181
+
182
+ // let injectScope = injectInfo.shift();
183
+
184
+ // let injectObj = inject(injectScope);
185
+
186
+ // if (injectInfo.length) {
187
+ // componentProps[key] = new Function(
188
+ // 'obj',
189
+ // `return obj.${injectInfo.join('.')}`
190
+ // ).call(null, injectObj);
191
+ // } else {
192
+ // componentProps[key] = injectObj;
193
+ // }
194
+
195
+ // if (isProxy(componentProps[key])) {
196
+ // //代理对象可能是ref 也可能是 reactive
197
+ // componentProps[key] = isReactive(componentProps[key])
198
+ // ? componentProps[key]
199
+ // : componentProps[key].value;
200
+ // }
201
+ // } else {
202
+ // componentProps[key] = val;
203
+ // }
204
+ // });
205
+
206
+ // //是否是函数组件
207
+ // const isFunctionComponent = typeof column.component == 'function';
208
+
209
+ // //创建组件
210
+ // const component = isFunctionComponent
211
+ // ? column.component({
212
+ // record: props.record,
213
+ // column,
214
+ // value: props.modelValue,
215
+ // props: componentProps,
216
+ // })
217
+ // : resolveComponent(column.component || defaultComponent);
218
+
219
+ // //组件参数
220
+ // const params = {};
221
+
222
+ // //非函数组件
223
+ // if (!isFunctionComponent) {
224
+ // Object.assign(params, componentProps);
225
+
226
+ // //存在组件配置
227
+ // if (column.component) {
228
+ // if (component.emits) {
229
+ // //存在双向绑定就绑定
230
+ // if (
231
+ // component.emits.find((eventName) =>
232
+ // [
233
+ // 'onUpdate:modelValue',
234
+ // 'onUpdate:model-value',
235
+ // 'update:modelValue',
236
+ // 'update:model-value',
237
+ // ].includes(eventName)
238
+ // )
239
+ // ) {
240
+ // params['modelValue'] = get(props.record, column[attrName]);
241
+ // params['onUpdate:modelValue'] = (val) => {
242
+ // set(props.record, column[attrName], val);
243
+ // };
244
+ // } else {
245
+ // params['value'] = get(props.record, column[attrName]);
246
+ // }
247
+
248
+ // //存在 on-change 事件的话 去绑定
249
+ // if (component.emits.find((eventName) => eventName == 'on-change')) {
250
+ // params['on-change'] = (event) =>
251
+ // emit('on-change', { data: event, column });
252
+ // }
253
+ // } else {
254
+ // params['value'] = get(props.record, column[attrName]);
255
+ // }
256
+
257
+ // //合并参数
258
+ // Object.assign(params, componentProps);
259
+ // }
260
+ // }
261
+
262
+ // return { params, component };
263
+ // };
File without changes
@@ -0,0 +1,28 @@
1
+ import { useProp } from 'element-plus';
2
+ import { computed, unref } from 'vue';
3
+ import { useGlobalConfig, useValue, useService } from 'web-base-client-vue';
4
+
5
+ export const usewhereFilterPanel = (props, context) => {
6
+ const dataTable = useProp('dataTable');
7
+ const debounceDelay = useGlobalConfig('debounceDelay', 500);
8
+
9
+ const where = computed(() => unref(dataTable).where);
10
+
11
+ const filterColumns = computed(() => unref(dataTable).getFilterColumns());
12
+
13
+ const fixedColumns = computed(() =>
14
+ filterColumns.value.filter((column) => !column.closable)
15
+ );
16
+
17
+ const originalClosableColumns = computed(() =>
18
+ filterColumns.value.filter((column) => column.closable)
19
+ );
20
+
21
+
22
+
23
+ const addFilter = () => {};
24
+
25
+ const removeFilter = () => {
26
+
27
+ };
28
+ };
@@ -0,0 +1,9 @@
1
+ <template>
2
+ <div></div>
3
+ </template>
4
+
5
+ <script setup>
6
+ defineOptions({
7
+ name: 'BwaWhereFilterPanel',
8
+ });
9
+ </script>