br-dionysus 1.6.5 → 1.6.7

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 (115) hide show
  1. package/README.md +90 -52
  2. package/attributes.json +1 -1
  3. package/dist/br-dionysus.es.js +4659 -4595
  4. package/dist/br-dionysus.umd.js +8 -8
  5. package/dist/index.css +1 -1
  6. package/dist/packages/MTable/src/MTable.vue.d.ts +21 -0
  7. package/dist/packages/MTable/src/token.d.ts +10 -1
  8. package/docs/assets/README-BIIm2ID5.css +1 -0
  9. package/docs/assets/README-BVC502ud.js +1 -0
  10. package/docs/assets/README-BaVHXTcr.js +1 -0
  11. package/docs/assets/README-BkoXPzeT.js +1 -0
  12. package/docs/assets/README-BpY9wwJ5.js +1 -0
  13. package/docs/assets/README-BxVIiLkB.css +1 -0
  14. package/docs/assets/README-C8q4oePg.css +1 -0
  15. package/docs/assets/README-C9E9QEak.js +1 -0
  16. package/docs/assets/README-CJnIKztR.css +1 -0
  17. package/docs/assets/README-CPi9K5cm.css +1 -0
  18. package/docs/assets/README-CVikrcuu.js +1 -0
  19. package/docs/assets/README-CwxKEz5n.js +1 -0
  20. package/docs/assets/README-D-sCcuuV.js +1 -0
  21. package/docs/assets/README-D1NyMPDh.css +1 -0
  22. package/docs/assets/README-D8dRnWkj.css +1 -0
  23. package/docs/assets/README-DC5fWcO7.css +1 -0
  24. package/docs/assets/README-DFookNbq.js +1 -0
  25. package/docs/assets/README-DJM0QNOa.css +1 -0
  26. package/docs/assets/README-DJsWJjpr.js +2 -0
  27. package/docs/assets/README-DZH0ZBFE.js +1 -0
  28. package/docs/assets/README-DuLXE9ma.css +1 -0
  29. package/docs/assets/README-DxdjMTiZ.js +1 -0
  30. package/docs/assets/README-DxzXrur_.js +1 -0
  31. package/docs/assets/README-ZSEyYWl3.css +1 -0
  32. package/docs/assets/empty-BHv0FmNK.png +0 -0
  33. package/docs/assets/index-B3d27dSP.js +66 -0
  34. package/docs/assets/index-BeGJML3j.css +1 -0
  35. package/docs/index.html +14 -0
  36. package/docs/packages/Hook/usePackageConfig/README.md +35 -0
  37. package/docs/packages/Hook/usePackageConfig/demo.vue +28 -0
  38. package/docs/packages/Hook/usePackageConfig/usePackageConfig.ts +39 -0
  39. package/docs/packages/Hook/useRemainingSpace/README.md +26 -0
  40. package/docs/packages/Hook/useRemainingSpace/useRemainingSpace.ts +148 -0
  41. package/docs/packages/Hook/useTableConfig/README.md +50 -0
  42. package/docs/packages/Hook/useTableConfig/demo.vue +134 -0
  43. package/docs/packages/Hook/useTableConfig/useTableConfig.ts +173 -0
  44. package/docs/packages/Hook/useZIndex/README.md +6 -0
  45. package/docs/packages/Hook/useZIndex/useGlobalZIndex.ts +34 -0
  46. package/docs/packages/MDialog/docs/README.md +26 -0
  47. package/docs/packages/MDialog/docs/demo.vue +72 -0
  48. package/docs/packages/MDialog/index.ts +10 -0
  49. package/docs/packages/MDialog/src/MDialog.vue +150 -0
  50. package/docs/packages/MInline/docs/README.md +26 -0
  51. package/docs/packages/MInline/docs/demo.vue +138 -0
  52. package/docs/packages/MInline/index.ts +10 -0
  53. package/docs/packages/MInline/src/MInline.vue +284 -0
  54. package/docs/packages/MInputNumber/docs/README.md +35 -0
  55. package/docs/packages/MInputNumber/docs/demo.vue +17 -0
  56. package/docs/packages/MInputNumber/index.ts +10 -0
  57. package/docs/packages/MInputNumber/src/MInputNumber.vue +268 -0
  58. package/docs/packages/MSelect/docs/README.md +20 -0
  59. package/docs/packages/MSelect/docs/demo.vue +36 -0
  60. package/docs/packages/MSelect/index.ts +17 -0
  61. package/docs/packages/MSelect/src/MOption.vue +43 -0
  62. package/docs/packages/MSelect/src/MSelect.vue +57 -0
  63. package/docs/packages/MSelect/src/token.ts +8 -0
  64. package/docs/packages/MSelectTable/docs/README.md +88 -0
  65. package/docs/packages/MSelectTable/docs/demo.vue +196 -0
  66. package/docs/packages/MSelectTable/index.ts +10 -0
  67. package/docs/packages/MSelectTable/src/MSelectTable.vue +493 -0
  68. package/docs/packages/MSelectTableV1/docs/README.md +49 -0
  69. package/docs/packages/MSelectTableV1/docs/demo.vue +77 -0
  70. package/docs/packages/MSelectTableV1/index.ts +10 -0
  71. package/docs/packages/MSelectTableV1/src/MSelectTableV1.vue +460 -0
  72. package/docs/packages/MSelectV2/docs/README.md +31 -0
  73. package/docs/packages/MSelectV2/docs/demo.vue +36 -0
  74. package/docs/packages/MSelectV2/index.ts +10 -0
  75. package/docs/packages/MSelectV2/src/MSelectV2.vue +116 -0
  76. package/docs/packages/MTable/docs/README.md +40 -0
  77. package/docs/packages/MTable/docs/demo.vue +93 -0
  78. package/docs/packages/MTable/index.ts +10 -0
  79. package/docs/packages/MTable/src/MTable.vue +228 -0
  80. package/docs/packages/MTable/src/token.ts +9 -0
  81. package/docs/packages/MTableColumn/docs/README.md +22 -0
  82. package/docs/packages/MTableColumn/docs/demo.vue +110 -0
  83. package/docs/packages/MTableColumn/index.ts +10 -0
  84. package/docs/packages/MTableColumn/src/MTableColumn.vue +345 -0
  85. package/docs/packages/MTableColumnSet/docs/README.md +31 -0
  86. package/docs/packages/MTableColumnSet/docs/demo.vue +36 -0
  87. package/docs/packages/MTableColumnSet/index.ts +10 -0
  88. package/docs/packages/MTableColumnSet/src/MTableColumnSet.vue +310 -0
  89. package/docs/packages/README.md +10 -0
  90. package/docs/packages/SkinConfig/docs/README.md +42 -0
  91. package/docs/packages/SkinConfig/docs/demo.vue +680 -0
  92. package/docs/packages/SkinConfig/index.ts +10 -0
  93. package/docs/packages/SkinConfig/src/SkinConfig.vue +478 -0
  94. package/docs/packages/SkinConfig/src/useSkin.ts +230 -0
  95. package/docs/packages/TabPage/docs/README.md +10 -0
  96. package/docs/packages/TabPage/docs/demo.vue +96 -0
  97. package/docs/packages/TabPage/index.ts +10 -0
  98. package/docs/packages/TabPage/src/TabPage.vue +566 -0
  99. package/docs/packages/Tool/moneyFormat/README.md +15 -0
  100. package/docs/packages/Tool/moneyFormat/moneyFormat.ts +69 -0
  101. package/docs/packages/index.ts +61 -0
  102. package/docs/packages/list.json +80 -0
  103. package/docs/packages/typings/class.ts +22 -0
  104. package/docs/packages/typings/enum.ts +9 -0
  105. package/docs/packages/typings/global.d.ts +69 -0
  106. package/docs/packages/typings/interface.ts +6 -0
  107. package/package.json +1 -1
  108. package/packages/MTable/docs/README.md +22 -17
  109. package/packages/MTable/docs/demo.vue +15 -1
  110. package/packages/MTable/src/MTable.vue +54 -6
  111. package/packages/MTable/src/token.ts +11 -2
  112. package/packages/MTableColumn/docs/README.md +8 -8
  113. package/packages/MTableColumn/src/MTableColumn.vue +73 -6
  114. package/tags.json +1 -1
  115. package/web-types.json +1 -1
@@ -0,0 +1,345 @@
1
+ <template>
2
+ <el-table-column
3
+ v-bind="attrs"
4
+ :filterMethod="props.filterMethod"
5
+ >
6
+ <template
7
+ #default="scope"
8
+ v-if="slots.default"
9
+ >
10
+ <slot
11
+ name="default"
12
+ :row="scope.row"
13
+ :column="scope.column"
14
+ :index="scope.$index"
15
+ ></slot>
16
+ </template>
17
+ <template v-if="props.children && props.children.length">
18
+ <m-table-column
19
+ v-for="child in props.children"
20
+ :key="child.prop"
21
+ :prop="child.prop"
22
+ :label="child.label"
23
+ :minWidth="child.minWidth"
24
+ showOverflowTooltip
25
+ :children="child.children || []"
26
+ ></m-table-column>
27
+ </template>
28
+ <template #header="scope">
29
+ <span>
30
+ <slot
31
+ name="header"
32
+ :row="scope.row"
33
+ :column="scope.column"
34
+ :index="scope.$index"
35
+ ></slot>
36
+ <span>
37
+ <span v-if="!slots.header">{{ scope.column.label }}</span>
38
+ <div
39
+ v-if="props.filters.length"
40
+ class="u-filter-group"
41
+ >
42
+ <i
43
+ class="u-icon j-icon"
44
+ @click="open($event, scope.column.property)"
45
+ ></i>
46
+
47
+ <Teleport to="body">
48
+ <div
49
+ class="m-filter-box j-filter-box"
50
+ :data-is-open="filterBoxIsOpen"
51
+ v-if="filterBoxIsOpen"
52
+ >
53
+ <div
54
+ class="u-filter-mask"
55
+ @click="close(scope.column.property)"
56
+ ></div>
57
+ <div
58
+ class="u-list-box"
59
+ ref="filterBoxRef"
60
+ :style="boxStyle"
61
+ >
62
+ <div class="u-it-gp">
63
+ <el-input
64
+ v-model="filterText"
65
+ placeholder="请输入内容"
66
+ clearable
67
+ size="small"
68
+ ></el-input>
69
+ </div>
70
+ <el-checkbox-group
71
+ class="u-checkbox-group"
72
+ v-model="filteredValue"
73
+ >
74
+ <el-checkbox
75
+ v-for="item in getCheckboxOptions(props.filters)"
76
+ :key="item.value"
77
+ :label="item.value"
78
+ >
79
+ <template v-if="slots.default">
80
+ <slot
81
+ name="default"
82
+ :row="{ [scope.column.property]: item.text }"
83
+ :column="scope.column"
84
+ :index="scope.$index"
85
+ ></slot>
86
+ </template>
87
+ <template v-if="!slots.default">{{ item.text }}</template>
88
+ </el-checkbox>
89
+ </el-checkbox-group>
90
+ <div class="u-btn-gp">
91
+ <el-button
92
+ link
93
+ :disabled="!filteredValue.length"
94
+ @click="sift(scope.column.property)"
95
+ >
96
+ 筛选
97
+ </el-button>
98
+ <el-button
99
+ link
100
+ @click="reset(scope.column.property)"
101
+ >
102
+ 重置
103
+ </el-button>
104
+ </div>
105
+ </div>
106
+ </div>
107
+ </Teleport>
108
+ </div>
109
+ <MTableColumnSet
110
+ class="u-set"
111
+ v-if="showTableConfig"
112
+ v-model="tableConfig"
113
+ link
114
+ ></MTableColumnSet>
115
+ </span>
116
+ </span>
117
+ </template>
118
+ </el-table-column>
119
+ </template>
120
+
121
+ <script setup lang="ts">
122
+ import { ref, useSlots, useAttrs, inject, computed } from 'vue'
123
+ import checkType from '../../../tool/checkType'
124
+ import { tableKey } from './../../MTable/src/token'
125
+
126
+ interface FilterValue {
127
+ [key: string]: Array<string | number>
128
+ }
129
+
130
+ interface PropChildren {
131
+ [prop: string]: any,
132
+ children?: PropChildren[]
133
+ }
134
+
135
+ const props = withDefaults(defineProps<{
136
+ /** 过滤值 */
137
+ filtersValue?: FilterValue,
138
+ /** 过滤选项 */
139
+ filters?: Array<{ text: string | number, value: string | number }>,
140
+ /** 过滤方法 */
141
+ filterMethod?: Function | null,
142
+ children?: Array<PropChildren>,
143
+ }>(), {
144
+ filtersValue: () => ({}),
145
+ filters: () => [],
146
+ filterMethod: null,
147
+ children: () => []
148
+ })
149
+
150
+ const slots = useSlots()
151
+ const attrs = useAttrs()
152
+
153
+ const emit = defineEmits(['update:filtersValue'])
154
+
155
+ const tableKeyData = inject(tableKey)
156
+ const tableConfig = tableKeyData?.tableConfig
157
+ const showTableConfig = computed(() => {
158
+ if (!tableKeyData || !tableConfig) return false
159
+ if (!tableConfig.value) return false
160
+ return tableKeyData.lastColumnProp.value === attrs.prop
161
+ })
162
+
163
+ const filterText = ref<string>('')
164
+
165
+ const getCheckboxOptions = (options: { text: string | number, value: string | number }[]) => {
166
+ return options
167
+ .map(item => ({
168
+ ...item,
169
+ value: checkType.isArray(item.value) || checkType.isObject(item.value) ? JSON.stringify(item.value) : item.value
170
+ }))
171
+ .filter(item => String(item.value).includes(filterText.value))
172
+ }
173
+
174
+ const filteredValue = ref<Array<string | number>>([])
175
+ const sift = (property: string) => {
176
+ const data = {
177
+ ...props.filtersValue,
178
+ [property]: filteredValue.value
179
+ }
180
+ emit('update:filtersValue', data)
181
+ close(property)
182
+ }
183
+
184
+ const reset = (property: string) => {
185
+ filteredValue.value = []
186
+ const data = {
187
+ ...props.filtersValue,
188
+ [property]: []
189
+ }
190
+ emit('update:filtersValue', data)
191
+ close(property)
192
+ }
193
+
194
+ const filterBoxIsOpen = ref<boolean>(false)
195
+
196
+ const filterBoxRef = ref<HTMLElement>()
197
+
198
+ const open = (event: MouseEvent, property: string) => {
199
+ const dom: HTMLElement = event.target as HTMLElement
200
+ const { width, height, bottom, right } = dom.getBoundingClientRect()
201
+ const isTopMode = window.innerHeight - bottom < 400 + 20
202
+ const isLeftMode = window.innerWidth - right < (filterBoxRef.value?.clientWidth || 0) + 20
203
+ filteredValue.value = props.filtersValue[property] || []
204
+ if (isTopMode) {
205
+ boxStyle.value.top = 'unset'
206
+ boxStyle.value.bottom = `${window.innerHeight - event.clientY + height - 5}px`
207
+ } else {
208
+ boxStyle.value.top = `${event.clientY - event.offsetY + height + 5}px`
209
+ boxStyle.value.bottom = 'unset'
210
+ }
211
+ if (isLeftMode) {
212
+ boxStyle.value.left = 'unset'
213
+ boxStyle.value.right = `${window.innerWidth - (event.clientX - event.offsetX) - width}px`
214
+ } else {
215
+ boxStyle.value.left = `${event.clientX - event.offsetX}px`
216
+ boxStyle.value.right = 'unset'
217
+ }
218
+ filterBoxIsOpen.value = true
219
+ }
220
+
221
+ const close = (property: string) => {
222
+ filterBoxIsOpen.value = false
223
+ filteredValue.value = props.filtersValue[property] || []
224
+ }
225
+
226
+ interface BoxStyle {
227
+ top: string | number,
228
+ left: string | number,
229
+ bottom: string | number,
230
+ right: string | number
231
+ }
232
+
233
+ const boxStyle = ref<BoxStyle>({
234
+ top: 0,
235
+ left: 0,
236
+ bottom: 'unset',
237
+ right: 'unset'
238
+ })
239
+ </script>
240
+
241
+ <style scoped lang="scss">
242
+ .u-icon {
243
+ display: inline-block;
244
+ position: relative;
245
+ width: 14px;
246
+ height: 14px;
247
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAMdJREFUOE/tkyESwjAQRfMj0Xgkp2AmaQweHCeAS1AuASfAgce0yQynQOLRyHyazpRpoW2YAcnKbP7L7t8sxJeBoM+yLK04Ukp678vzWBhj0iegEK5jgnq+eGTzO4C1dkhyDGAvhBhFKrmSXAC4aK1vjV6dcxPv/QnAoA1C8i6lnCqlzlX+zaw8z2cADh2AeZIkx3qu1W3n3JLktnERWCmldq/gznFZa8NUyvFWjrdV9QcIEfWgz8BgaicgLFj467H9+Gjr+iAPDfV1EeVT6aEAAAAASUVORK5CYII=");
248
+ background-size: 100% 100%;
249
+ transform: translateY(2px);
250
+ cursor: pointer;
251
+ }
252
+
253
+ .u-filter-group {
254
+ display: inline-block;
255
+ position: relative;
256
+ }
257
+
258
+ .u-set {
259
+ padding: 2.5px 0;
260
+ float: right;
261
+ }
262
+ </style>
263
+
264
+ <style lang="scss">
265
+ .m-filter-box {
266
+ $zIndex: 2050;
267
+
268
+ &[data-is-open="true"] {
269
+ opacity: 1;
270
+ pointer-events: auto;
271
+ }
272
+
273
+ &[data-is-open="false"] {
274
+ opacity: 0;
275
+ pointer-events: none;
276
+ }
277
+
278
+ .u-filter-mask {
279
+ position: fixed;
280
+ top: 0;
281
+ left: 0;
282
+ z-index: $zIndex;
283
+ width: 100%;
284
+ height: 100%;
285
+ }
286
+
287
+ .u-it-gp {
288
+ padding: 10px;
289
+ border-bottom: 1px solid var(--el-border-color-lighter);
290
+ }
291
+
292
+ .u-list-box {
293
+ overflow: hidden;
294
+ position: fixed;
295
+ top: 0;
296
+ left: 0;
297
+ z-index: $zIndex;
298
+ //width: 134px;
299
+ max-width: 50%;
300
+ background: var(--el-bg-color-overlay);
301
+ border: 1px solid var(--el-border-color-light);
302
+ border-radius: var(--el-popper-border-radius, 4px);
303
+ box-shadow: var(--el-box-shadow-light);
304
+
305
+ .u-checkbox-group {
306
+ overflow-y: auto;
307
+ display: block;
308
+ padding: 10px;
309
+ max-height: 280px;
310
+ }
311
+
312
+ label.el-checkbox {
313
+ display: flex;
314
+ align-items: center;
315
+ margin-right: 5px;
316
+ margin-bottom: 12px;
317
+ margin-left: 5px;
318
+ height: unset;
319
+ }
320
+
321
+ label.el-checkbox:last-child {
322
+ margin-bottom: 0;
323
+ }
324
+
325
+ .u-btn-gp {
326
+ border-top: 1px solid var(--el-border-color-lighter);
327
+ padding: 8px;
328
+ }
329
+
330
+ button.is-disabled {
331
+ color: var(--el-disabled-text-color);
332
+ cursor: not-allowed;
333
+ }
334
+
335
+ button {
336
+ background: 0 0;
337
+ border: none;
338
+ color: var(--el-text-color-regular);
339
+ cursor: pointer;
340
+ font-size: var(--el-font-size-small);
341
+ padding: 0 3px;
342
+ }
343
+ }
344
+ }
345
+ </style>
@@ -0,0 +1,31 @@
1
+ <script setup>
2
+ import demo from './demo.vue'
3
+ </script>
4
+
5
+ 表格头设置组件
6
+ =================
7
+
8
+ ### 1) 基础用法
9
+
10
+ <Preview comp-name="MTableColumnSet" demo-name="demo">
11
+ <demo />
12
+ </Preview>
13
+
14
+
15
+ ### 2) Attributes
16
+
17
+ | 参数 | 说明 | 类型 | 可选值 | 默认值 |
18
+ |-----------------------| ---------------------------------------------------- | ---------------------------------------- | ------ |-------|
19
+ | model-value / v-model | 绑定值 | { [propName: string]: TableConfigItem } | - | {} |
20
+ | link | 是否为链接按钮 | boolean | - | false |
21
+ | foldMode | 是否开启折叠 开启的话需要父级元素为flex布局/grid布局 | boolean | - | false |
22
+
23
+
24
+ ### 3) TableConfigItem
25
+ | 参数 | 说明 | 类型 |
26
+ | ----------- | ------------------------------------------------- | -------------------------- |
27
+ | minWidth | 最小列宽 | number,string |
28
+ | show | 是否显示 | boolean |
29
+ | sort | 排序 | number |
30
+ | label | 列名 | string |
31
+ | headerAlign | 表头对齐方式, 若不设置该项,则使用表格的对齐方式 | 'left' ,'center' , 'right' |
@@ -0,0 +1,36 @@
1
+ <template>
2
+ <div>
3
+ <MTableColumnSet v-model="tableConfig"/>
4
+ <div>
5
+ {{ tableConfig }}
6
+ </div>
7
+ </div>
8
+ </template>
9
+
10
+ <script setup lang="ts">
11
+ import { ref } from 'vue'
12
+
13
+ const tableConfig = ref({
14
+ date: {
15
+ minWidth: 100,
16
+ show: true,
17
+ sort: 0,
18
+ label: 'date'
19
+ },
20
+ name: {
21
+ minWidth: 100,
22
+ show: true,
23
+ sort: 1,
24
+ label: 'name'
25
+ },
26
+ address: {
27
+ minWidth: 100,
28
+ show: true,
29
+ sort: 2,
30
+ label: 'address'
31
+ }
32
+ })
33
+
34
+ </script>
35
+
36
+ <style lang="scss"></style>
@@ -0,0 +1,10 @@
1
+ import { App, Plugin } from 'vue'
2
+ import MTableColumnSet from './src/MTableColumnSet.vue'
3
+
4
+ export const MTableColumnSetPlugin: Plugin = {
5
+ install (app: App) {
6
+ app.component('MTableColumnSet', MTableColumnSet)
7
+ }
8
+ }
9
+
10
+ export { MTableColumnSet }