@veltra/sheet 2.4.0 → 2.5.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 (142) hide show
  1. package/dist/index.d.ts +2 -19
  2. package/dist/index.js +2 -15
  3. package/dist/types/index.d.ts +1 -3
  4. package/package.json +2 -3
  5. package/src/index.ts +1 -27
  6. package/src/types/index.ts +0 -2
  7. package/dist/components/report/binding-badge.js +0 -118
  8. package/dist/components/report/designer/cell-coords.js +0 -46
  9. package/dist/components/report/designer/col-widths.js +0 -29
  10. package/dist/components/report/designer/conditional-rules/helpers.js +0 -139
  11. package/dist/components/report/designer/drill-dialog.js +0 -258
  12. package/dist/components/report/designer/drop-highlight-overlay.js +0 -76
  13. package/dist/components/report/designer/float-panel.js +0 -434
  14. package/dist/components/report/designer/role.js +0 -17
  15. package/dist/components/report/designer/rule-preview.js +0 -33
  16. package/dist/components/report/designer/rule-row.js +0 -253
  17. package/dist/components/report/designer/rules-dialog.js +0 -118
  18. package/dist/components/report/designer/topology-overlay.js +0 -122
  19. package/dist/components/report/designer/topology.js +0 -64
  20. package/dist/components/report/designer/use-grid-overlay.js +0 -75
  21. package/dist/components/report/designer-hub.js +0 -177
  22. package/dist/components/report/field-panel-helpers.js +0 -33
  23. package/dist/components/report/field-panel.js +0 -132
  24. package/dist/components/report/filter-bar.js +0 -74
  25. package/dist/components/report/hub-connection-form.js +0 -145
  26. package/dist/components/report/hub-dataset-editor.js +0 -409
  27. package/dist/components/report/preview-grid-size.js +0 -32
  28. package/dist/components/report/print.js +0 -39
  29. package/dist/components/report/report-designer.js +0 -428
  30. package/dist/components/report/report-viewer.js +0 -253
  31. package/dist/components/report/style.d.ts +0 -17
  32. package/dist/components/report/style.js +0 -18
  33. package/dist/components/report/style2.css +0 -965
  34. package/dist/components/report/use-report-designer.js +0 -387
  35. package/dist/components/report/use-report-viewer.js +0 -140
  36. package/dist/report/binding.d.ts +0 -83
  37. package/dist/report/binding.js +0 -334
  38. package/dist/report/connector.d.ts +0 -66
  39. package/dist/report/connector.js +0 -159
  40. package/dist/report/drill.d.ts +0 -48
  41. package/dist/report/drill.js +0 -78
  42. package/dist/report/export-xlsx.d.ts +0 -13
  43. package/dist/report/export-xlsx.js +0 -13
  44. package/dist/report/filter-bar.d.ts +0 -10
  45. package/dist/report/filter-bar.js +0 -31
  46. package/dist/report/index.d.ts +0 -14
  47. package/dist/report/params.d.ts +0 -13
  48. package/dist/report/params.js +0 -61
  49. package/dist/report/print.d.ts +0 -23
  50. package/dist/report/print.js +0 -197
  51. package/dist/report/render/aggregate.js +0 -193
  52. package/dist/report/render/builder.d.ts +0 -12
  53. package/dist/report/render/builder.js +0 -139
  54. package/dist/report/render/coordinate.d.ts +0 -25
  55. package/dist/report/render/coordinate.js +0 -733
  56. package/dist/report/render/index.d.ts +0 -14
  57. package/dist/report/render/index.js +0 -21
  58. package/dist/report/render/style-resolver.js +0 -50
  59. package/dist/report/render/template-index.d.ts +0 -24
  60. package/dist/report/render/template-index.js +0 -137
  61. package/dist/report/rules/evaluate.d.ts +0 -25
  62. package/dist/report/rules/evaluate.js +0 -82
  63. package/dist/report/rules/index.d.ts +0 -2
  64. package/dist/report/template.d.ts +0 -63
  65. package/dist/report/template.js +0 -83
  66. package/dist/report/types.d.ts +0 -103
  67. package/dist/types/report-designer.d.ts +0 -51
  68. package/dist/types/report-viewer.d.ts +0 -57
  69. package/src/components/report/__test__/binding-badge.test.ts +0 -92
  70. package/src/components/report/__test__/conditional-rules-helpers.test.ts +0 -88
  71. package/src/components/report/__test__/field-panel-helpers.test.ts +0 -65
  72. package/src/components/report/__test__/float-panel-position.test.ts +0 -45
  73. package/src/components/report/__test__/preview-grid-size.test.ts +0 -63
  74. package/src/components/report/__test__/report-designer.test.ts +0 -559
  75. package/src/components/report/__test__/report-drill.test.ts +0 -692
  76. package/src/components/report/__test__/report-viewer.test.ts +0 -400
  77. package/src/components/report/__test__/topology.test.ts +0 -143
  78. package/src/components/report/__test__/use-report-designer.test.ts +0 -804
  79. package/src/components/report/binding-badge.ts +0 -122
  80. package/src/components/report/designer/cell-coords.ts +0 -95
  81. package/src/components/report/designer/col-widths.ts +0 -56
  82. package/src/components/report/designer/conditional-rules/helpers.ts +0 -189
  83. package/src/components/report/designer/drill-dialog.vue +0 -245
  84. package/src/components/report/designer/drop-highlight-overlay.vue +0 -75
  85. package/src/components/report/designer/float-panel.vue +0 -444
  86. package/src/components/report/designer/role.ts +0 -32
  87. package/src/components/report/designer/rule-preview.vue +0 -40
  88. package/src/components/report/designer/rule-row.vue +0 -252
  89. package/src/components/report/designer/rules-dialog.vue +0 -110
  90. package/src/components/report/designer/topology-overlay.vue +0 -128
  91. package/src/components/report/designer/topology.ts +0 -124
  92. package/src/components/report/designer/use-grid-overlay.ts +0 -114
  93. package/src/components/report/designer-hub.vue +0 -198
  94. package/src/components/report/field-panel-helpers.ts +0 -44
  95. package/src/components/report/field-panel.vue +0 -136
  96. package/src/components/report/filter-bar.vue +0 -77
  97. package/src/components/report/hub-connection-form.vue +0 -124
  98. package/src/components/report/hub-dataset-editor.vue +0 -387
  99. package/src/components/report/index.ts +0 -2
  100. package/src/components/report/preview-grid-size.ts +0 -33
  101. package/src/components/report/print.ts +0 -44
  102. package/src/components/report/report-designer.vue +0 -454
  103. package/src/components/report/report-viewer.vue +0 -289
  104. package/src/components/report/style-designer.scss +0 -653
  105. package/src/components/report/style-hub.scss +0 -292
  106. package/src/components/report/style-viewer.scss +0 -144
  107. package/src/components/report/style.scss +0 -3
  108. package/src/components/report/style.ts +0 -20
  109. package/src/components/report/use-report-designer.ts +0 -603
  110. package/src/components/report/use-report-viewer.ts +0 -227
  111. package/src/report/__test__/binding.test.ts +0 -320
  112. package/src/report/__test__/connector.test.ts +0 -239
  113. package/src/report/__test__/drill.test.ts +0 -194
  114. package/src/report/__test__/export-xlsx.test.ts +0 -96
  115. package/src/report/__test__/filter-bar.test.ts +0 -58
  116. package/src/report/__test__/params.test.ts +0 -156
  117. package/src/report/__test__/print.test.ts +0 -170
  118. package/src/report/__test__/render.test.ts +0 -856
  119. package/src/report/__test__/rules.test.ts +0 -131
  120. package/src/report/__test__/template.test.ts +0 -366
  121. package/src/report/binding.ts +0 -474
  122. package/src/report/connector.ts +0 -206
  123. package/src/report/drill.ts +0 -112
  124. package/src/report/export-xlsx.ts +0 -15
  125. package/src/report/filter-bar.ts +0 -36
  126. package/src/report/index.ts +0 -16
  127. package/src/report/params.ts +0 -96
  128. package/src/report/print.ts +0 -234
  129. package/src/report/render/__test__/aggregate.test.ts +0 -16
  130. package/src/report/render/__test__/coordinate.test.ts +0 -405
  131. package/src/report/render/aggregate.ts +0 -289
  132. package/src/report/render/builder.ts +0 -211
  133. package/src/report/render/coordinate.ts +0 -1239
  134. package/src/report/render/index.ts +0 -30
  135. package/src/report/render/style-resolver.ts +0 -68
  136. package/src/report/render/template-index.ts +0 -200
  137. package/src/report/rules/evaluate.ts +0 -113
  138. package/src/report/rules/index.ts +0 -7
  139. package/src/report/template.ts +0 -145
  140. package/src/report/types.ts +0 -116
  141. package/src/types/report-designer.ts +0 -55
  142. package/src/types/report-viewer.ts +0 -54
@@ -1,444 +0,0 @@
1
- <template>
2
- <div
3
- v-if="binding && cell"
4
- v-show="visible"
5
- ref="panelRef"
6
- :class="[cls.b, cls.m(placement), expanded ? cls.m('expanded') : '']"
7
- :style="panelStyle"
8
- @mousedown.stop
9
- @pointerdown.stop
10
- >
11
- <div :class="cls.e('bar')">
12
- <div :class="cls.e('summary')" :title="summaryText">
13
- {{ summaryText }}
14
- </div>
15
- <div :class="cls.e('toolbar')">
16
- <u-select
17
- size="small"
18
- :class="[cls.e('select'), cls.em('select', 'role')]"
19
- :model-value="currentPresetValue"
20
- :options="presetOptions"
21
- @update:model-value="onPreset"
22
- />
23
- <u-select
24
- v-if="showAggregateSelect"
25
- size="small"
26
- :class="[cls.e('select'), cls.em('select', 'aggregate')]"
27
- :model-value="binding.aggregate"
28
- :options="aggregateOptions"
29
- @update:model-value="onAggregate"
30
- />
31
- <u-select
32
- v-if="showExpandSelect"
33
- size="small"
34
- :class="[cls.e('select'), cls.em('select', 'expand')]"
35
- :model-value="binding.expand"
36
- :options="expandOptions"
37
- @update:model-value="onExpand"
38
- />
39
- <u-button size="small" plain @click="emit('open-rules')">条件样式</u-button>
40
- <u-button
41
- v-if="showDrill"
42
- size="small"
43
- plain
44
- :type="binding.drill ? 'primary' : undefined"
45
- @click="emit('open-drill')"
46
- >
47
- 下钻
48
- </u-button>
49
- <u-button size="small" text type="danger" @click="emit('remove')">删除绑定</u-button>
50
- <u-button
51
- size="small"
52
- text
53
- :class="cls.e('expand')"
54
- :title="expanded ? '收起' : '展开更多'"
55
- @click="expanded = !expanded"
56
- >
57
- {{ expanded ? '收起' : '展开' }}
58
- </u-button>
59
- </div>
60
- </div>
61
-
62
- <div v-if="expanded" :class="cls.e('body')">
63
- <section :class="cls.e('section')">
64
- <div :class="cls.e('section-label')">数据集</div>
65
- <p :class="cls.e('hint')">{{ binding.dataset }}</p>
66
- </section>
67
-
68
- <section :class="cls.e('section')">
69
- <div :class="cls.e('section-label')">排序</div>
70
- <u-radio-group
71
- size="small"
72
- :items="sortOptions"
73
- :model-value="binding.sort ?? 'none'"
74
- @update:model-value="onSort"
75
- />
76
- </section>
77
-
78
- <section :class="cls.e('section')">
79
- <div :class="cls.e('section-label')">扩展实例合并单元格</div>
80
- <u-switch
81
- size="small"
82
- :model-value="binding.mergeSpan !== false"
83
- @update:model-value="onMergeSpan"
84
- />
85
- </section>
86
-
87
- <section :class="cls.e('section')">
88
- <div :class="cls.e('section-label')">行方向父格</div>
89
- <p :class="cls.e('hint')">当前:{{ resolvedRowParentLabel }}</p>
90
- <div :class="cls.e('parent-actions')">
91
- <u-button
92
- size="small"
93
- plain
94
- :type="parentPickMode === 'row' ? 'primary' : undefined"
95
- @click="emit('start-parent-pick', 'row')"
96
- >
97
- {{ parentPickMode === 'row' ? '点选目标格…' : '设置行方向父格' }}
98
- </u-button>
99
- <u-select
100
- v-if="rowParentOptions.length > 0"
101
- size="small"
102
- :class="cls.e('parent-select')"
103
- placeholder="候选格"
104
- :model-value="rowParentSelectValue"
105
- :options="rowParentOptions"
106
- @update:model-value="onRowParentSelect"
107
- />
108
- <u-button
109
- v-if="binding.rowParent"
110
- size="small"
111
- text
112
- type="danger"
113
- @click="emit('clear-parent', 'row')"
114
- >
115
- 清除
116
- </u-button>
117
- </div>
118
- </section>
119
-
120
- <section :class="cls.e('section')">
121
- <div :class="cls.e('section-label')">列方向父格</div>
122
- <p :class="cls.e('hint')">当前:{{ resolvedColParentLabel }}</p>
123
- <div :class="cls.e('parent-actions')">
124
- <u-button
125
- size="small"
126
- plain
127
- :type="parentPickMode === 'col' ? 'primary' : undefined"
128
- @click="emit('start-parent-pick', 'col')"
129
- >
130
- {{ parentPickMode === 'col' ? '点选目标格…' : '设置列方向父格' }}
131
- </u-button>
132
- <u-select
133
- v-if="colParentOptions.length > 0"
134
- size="small"
135
- :class="cls.e('parent-select')"
136
- placeholder="候选格"
137
- :model-value="colParentSelectValue"
138
- :options="colParentOptions"
139
- @update:model-value="onColParentSelect"
140
- />
141
- <u-button
142
- v-if="binding.colParent"
143
- size="small"
144
- text
145
- type="danger"
146
- @click="emit('clear-parent', 'col')"
147
- >
148
- 清除
149
- </u-button>
150
- </div>
151
- </section>
152
-
153
- <footer v-if="parentPickMode" :class="cls.e('footer')">
154
- <u-button size="small" plain @click="emit('cancel-parent-pick')">取消点选</u-button>
155
- </footer>
156
- </div>
157
- </div>
158
- </template>
159
-
160
- <script lang="ts" setup>
161
- import { UButton, URadioGroup, USelect, USwitch } from '@veltra/desktop'
162
- import type { CellAddress } from '@veltra/sheet-core'
163
- import type { SheetGrid } from '@veltra/sheet-core/grid'
164
- import { bem } from '@veltra/utils'
165
- import { computed, nextTick, ref, toRef, watch } from 'vue'
166
-
167
- import {
168
- formatBindingPlaceholder,
169
- formatCellAddress,
170
- formatParentCandidateLabel,
171
- inferReportPreset,
172
- isReductionAggregate
173
- } from '../../../report/binding'
174
- import type {
175
- ReportAggregate,
176
- ReportBinding,
177
- ReportExpand,
178
- ReportPreset,
179
- ReportSort
180
- } from '../../../report/types'
181
- import type { ParentPickMode } from '../use-report-designer'
182
- import { resolveGridOverlayLayout } from './cell-coords'
183
- import { REPORT_PRESET_OPTIONS, presetBindingDefaults } from './role'
184
- import {
185
- readCellOverlayRect,
186
- resolveBindingFloatPanelPosition,
187
- useGridOverlaySync
188
- } from './use-grid-overlay'
189
-
190
- defineOptions({ name: 'UReportFloatPanel' })
191
-
192
- const CUSTOM_PRESET_VALUE = '__custom__'
193
-
194
- const props = defineProps<{
195
- cell: CellAddress | null
196
- binding: ReportBinding | null
197
- resolvedRowParentLabel: string
198
- resolvedColParentLabel: string
199
- parentPickMode: ParentPickMode | null
200
- rowParentCandidates: CellAddress[]
201
- colParentCandidates: CellAddress[]
202
- /** 宿主传入了可下钻模板列表(下钻配置入口可见性由父级按 props 计算) */
203
- showDrill?: boolean
204
- resolveFieldLabel?: (datasetId: string, fieldName: string) => string
205
- getBindingAt?: (addr: CellAddress) => ReportBinding | undefined
206
- hostEl: HTMLElement | null
207
- getGrid: () => SheetGrid | undefined
208
- }>()
209
-
210
- const emit = defineEmits<{
211
- patch: [patch: Partial<ReportBinding>]
212
- remove: []
213
- 'open-rules': []
214
- 'open-drill': []
215
- 'start-parent-pick': [mode: ParentPickMode]
216
- 'cancel-parent-pick': []
217
- 'clear-parent': [mode: ParentPickMode]
218
- }>()
219
-
220
- const cls = bem('report-float-panel')
221
-
222
- const hostEl = toRef(props, 'hostEl')
223
- const panelRef = ref<HTMLElement | null>(null)
224
- const expanded = ref(false)
225
- const placement = ref<'above' | 'below'>('above')
226
-
227
- const presetOptions = computed(() => {
228
- const options = REPORT_PRESET_OPTIONS.map((item) => ({ ...item }))
229
- if (props.binding && inferReportPreset(props.binding) === null) {
230
- options.unshift({ value: CUSTOM_PRESET_VALUE as ReportPreset, label: '自定义' })
231
- }
232
- return options
233
- })
234
-
235
- const ALL_AGGREGATE_OPTIONS = [
236
- { value: 'list' as const, label: '明细' },
237
- { value: 'group' as const, label: '分组' },
238
- { value: 'sum' as const, label: '求和' },
239
- { value: 'avg' as const, label: '平均' },
240
- { value: 'count' as const, label: '计数' },
241
- { value: 'max' as const, label: '最大' },
242
- { value: 'min' as const, label: '最小' }
243
- ]
244
-
245
- const REDUCTION_AGGREGATE_OPTIONS = ALL_AGGREGATE_OPTIONS.filter((item) =>
246
- isReductionAggregate(item.value)
247
- )
248
-
249
- const expandOptions = [
250
- { value: 'down' as const, label: '向下' },
251
- { value: 'right' as const, label: '向右' },
252
- { value: 'none' as const, label: '不展开' }
253
- ]
254
-
255
- const sortOptions = [
256
- { value: 'none' as const, label: '无' },
257
- { value: 'asc' as const, label: '升序' },
258
- { value: 'desc' as const, label: '降序' }
259
- ]
260
-
261
- const panelLeft = ref(0)
262
- const panelTop = ref(0)
263
- const inView = ref(false)
264
-
265
- const currentPresetValue = computed(() => {
266
- if (!props.binding) return 'detail'
267
- return inferReportPreset(props.binding) ?? CUSTOM_PRESET_VALUE
268
- })
269
-
270
- const showAggregateSelect = computed(() => {
271
- const preset = currentPresetValue.value
272
- return (
273
- preset === CUSTOM_PRESET_VALUE ||
274
- preset === 'subtotal' ||
275
- preset === 'grandTotal' ||
276
- preset === 'cross'
277
- )
278
- })
279
-
280
- const showExpandSelect = computed(() => {
281
- const preset = currentPresetValue.value
282
- return preset === CUSTOM_PRESET_VALUE || preset === 'groupHeader' || preset === 'detail'
283
- })
284
-
285
- const aggregateOptions = computed(() =>
286
- currentPresetValue.value === CUSTOM_PRESET_VALUE
287
- ? ALL_AGGREGATE_OPTIONS
288
- : REDUCTION_AGGREGATE_OPTIONS
289
- )
290
-
291
- const summaryText = computed(() => {
292
- if (!props.binding) return ''
293
- const parts = [formatBindingPlaceholder(props.binding, props.resolveFieldLabel)]
294
- if (props.binding.rowParent && props.resolvedRowParentLabel !== '—') {
295
- const parent = props.getBindingAt?.(props.binding.rowParent)
296
- const name = parent
297
- ? (props.resolveFieldLabel?.(parent.dataset, parent.field) ?? parent.field)
298
- : props.resolvedRowParentLabel
299
- parts.push(`行父格 ${name} ${props.resolvedRowParentLabel}`)
300
- }
301
- if (props.binding.colParent && props.resolvedColParentLabel !== '—') {
302
- const parent = props.getBindingAt?.(props.binding.colParent)
303
- const name = parent
304
- ? (props.resolveFieldLabel?.(parent.dataset, parent.field) ?? parent.field)
305
- : props.resolvedColParentLabel
306
- parts.push(`列父格 ${name} ${props.resolvedColParentLabel}`)
307
- }
308
- return parts.join(' · ')
309
- })
310
-
311
- function candidateOption(addr: CellAddress): { value: string; label: string } {
312
- const value = formatCellAddress(addr)
313
- const binding = props.getBindingAt?.(addr)
314
- return {
315
- value,
316
- label: binding ? formatParentCandidateLabel(addr, binding, props.resolveFieldLabel) : value
317
- }
318
- }
319
-
320
- const rowParentOptions = computed(() => props.rowParentCandidates.map(candidateOption))
321
-
322
- const colParentOptions = computed(() => props.colParentCandidates.map(candidateOption))
323
-
324
- const rowParentSelectValue = computed(() =>
325
- props.binding?.rowParent ? formatCellAddress(props.binding.rowParent) : undefined
326
- )
327
-
328
- const colParentSelectValue = computed(() =>
329
- props.binding?.colParent ? formatCellAddress(props.binding.colParent) : undefined
330
- )
331
-
332
- const visible = computed(() => !!props.binding && !!props.cell && inView.value)
333
-
334
- const panelStyle = computed(() => ({ left: `${panelLeft.value}px`, top: `${panelTop.value}px` }))
335
-
336
- watch(
337
- () => [props.cell?.row, props.cell?.col] as const,
338
- () => {
339
- if (props.parentPickMode) return
340
- expanded.value = false
341
- }
342
- )
343
-
344
- watch(
345
- () => props.parentPickMode,
346
- (mode) => {
347
- if (mode) expanded.value = true
348
- }
349
- )
350
-
351
- watch(expanded, () => {
352
- nextTick(() => updatePosition())
353
- })
354
-
355
- watch(visible, (show) => {
356
- if (!show) return
357
- nextTick(() => updatePosition())
358
- })
359
-
360
- function onPreset(preset: ReportPreset | typeof CUSTOM_PRESET_VALUE): void {
361
- if (preset === CUSTOM_PRESET_VALUE) return
362
- emit('patch', presetBindingDefaults(preset))
363
- }
364
-
365
- function aggregateDefaultExpand(aggregate: ReportAggregate): ReportExpand {
366
- return isReductionAggregate(aggregate) ? 'none' : 'down'
367
- }
368
-
369
- function onAggregate(aggregate: ReportAggregate): void {
370
- emit('patch', { aggregate, expand: aggregateDefaultExpand(aggregate) })
371
- }
372
-
373
- function onExpand(expand: ReportExpand): void {
374
- emit('patch', { expand })
375
- }
376
-
377
- function onSort(value: ReportSort): void {
378
- emit('patch', { sort: value })
379
- }
380
-
381
- function onMergeSpan(merged: boolean): void {
382
- emit('patch', { mergeSpan: merged })
383
- }
384
-
385
- function onRowParentSelect(label: string): void {
386
- const addr = props.rowParentCandidates.find((item) => formatCellAddress(item) === label)
387
- if (!addr) return
388
- emit('patch', { rowParent: { ...addr } })
389
- }
390
-
391
- function onColParentSelect(label: string): void {
392
- const addr = props.colParentCandidates.find((item) => formatCellAddress(item) === label)
393
- if (!addr) return
394
- emit('patch', { colParent: { ...addr } })
395
- }
396
-
397
- function updatePosition(): void {
398
- const cell = props.cell
399
- const host = props.hostEl
400
- if (!cell || !host) {
401
- inView.value = false
402
- return
403
- }
404
-
405
- const layoutResolved = resolveGridOverlayLayout(host)
406
- const rect = readCellOverlayRect(cell, host, props.getGrid)
407
- if (!rect || !layoutResolved) {
408
- inView.value = false
409
- return
410
- }
411
-
412
- inView.value = true
413
-
414
- const panelEl = panelRef.value
415
- const panelWidth = panelEl?.offsetWidth ?? 340
416
- const panelHeight = panelEl?.offsetHeight ?? (expanded.value ? 360 : 68)
417
- const position = resolveBindingFloatPanelPosition(
418
- rect,
419
- layoutResolved.layout,
420
- panelWidth,
421
- panelHeight,
422
- host.clientWidth
423
- )
424
-
425
- placement.value = position.placement
426
- panelLeft.value = position.left
427
- panelTop.value = position.top
428
- }
429
-
430
- useGridOverlaySync({
431
- hostEl,
432
- getGrid: () => props.getGrid(),
433
- watchSources: () =>
434
- [
435
- props.cell?.row,
436
- props.cell?.col,
437
- props.binding,
438
- props.hostEl,
439
- expanded.value,
440
- props.parentPickMode
441
- ] as const,
442
- update: updatePosition
443
- })
444
- </script>
@@ -1,32 +0,0 @@
1
- import { presetBindingPatch } from '../../../report/binding'
2
- import type { ReportBinding, ReportPreset } from '../../../report/types'
3
-
4
- const PRESET_LABELS: Record<ReportPreset, string> = {
5
- groupHeader: '分组头',
6
- detail: '明细行',
7
- subtotal: '小计行',
8
- grandTotal: '总计行',
9
- cross: '交叉格'
10
- }
11
-
12
- export const REPORT_PRESET_OPTIONS = (
13
- Object.entries(PRESET_LABELS) as Array<[ReportPreset, string]>
14
- ).map(([value, label]) => ({ value, label }))
15
-
16
- /** @deprecated 05 将更名;暂保留别名供 float-panel 消费 */
17
- export const REPORT_ROLE_OPTIONS = REPORT_PRESET_OPTIONS
18
-
19
- export function presetLabel(preset: ReportPreset): string {
20
- return PRESET_LABELS[preset]
21
- }
22
-
23
- /** @deprecated 05 将更名 */
24
- export const roleLabel = presetLabel
25
-
26
- /** 切换预设时写入 expand / aggregate / 父格组合(父格除 grandTotal 外保留既有值) */
27
- export function presetBindingDefaults(preset: ReportPreset): Partial<ReportBinding> {
28
- return presetBindingPatch(preset)
29
- }
30
-
31
- /** @deprecated 05 将更名 */
32
- export const roleBindingDefaults = presetBindingDefaults
@@ -1,40 +0,0 @@
1
- <template>
2
- <span
3
- :class="[cls.b, rule.scope === 'row' && cls.m('row')]"
4
- :style="previewStyle"
5
- :title="previewTitle"
6
- >
7
- {{ previewLabel }}
8
- </span>
9
- </template>
10
-
11
- <script lang="ts" setup>
12
- import { bem } from '@veltra/utils'
13
- import { computed } from 'vue'
14
-
15
- import type { ConditionalRule } from '../../../report/types'
16
-
17
- defineOptions({ name: 'UReportRulePreview' })
18
-
19
- const props = defineProps<{ rule: ConditionalRule }>()
20
-
21
- const cls = bem('report-rule-preview')
22
-
23
- const previewStyle = computed(() => {
24
- const { fill, font } = props.rule.style
25
- return {
26
- backgroundColor: fill?.color || 'transparent',
27
- color: font?.color || 'inherit',
28
- fontWeight: font?.bold ? '700' : '400',
29
- fontStyle: font?.italic ? 'italic' : 'normal'
30
- }
31
- })
32
-
33
- const previewLabel = computed(() => (props.rule.scope === 'row' ? '整行' : 'Aa'))
34
-
35
- const previewTitle = computed(() =>
36
- props.rule.scope === 'row'
37
- ? '整行作用范围:命中后染满物理输出行(交叉表会染满整行,明细行报表更合适)'
38
- : '本格作用范围'
39
- )
40
- </script>