br-dionysus 1.6.7 → 1.6.8

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 (105) hide show
  1. package/dist/br-dionysus.es.js +1291 -1286
  2. package/dist/br-dionysus.umd.js +7 -7
  3. package/dist/index.css +1 -1
  4. package/package.json +1 -1
  5. package/packages/MInline/src/MInline.vue +11 -10
  6. package/web-types.json +1 -1
  7. package/docs/assets/README-BIIm2ID5.css +0 -1
  8. package/docs/assets/README-BVC502ud.js +0 -1
  9. package/docs/assets/README-BaVHXTcr.js +0 -1
  10. package/docs/assets/README-BkoXPzeT.js +0 -1
  11. package/docs/assets/README-BpY9wwJ5.js +0 -1
  12. package/docs/assets/README-BxVIiLkB.css +0 -1
  13. package/docs/assets/README-C8q4oePg.css +0 -1
  14. package/docs/assets/README-C9E9QEak.js +0 -1
  15. package/docs/assets/README-CJnIKztR.css +0 -1
  16. package/docs/assets/README-CPi9K5cm.css +0 -1
  17. package/docs/assets/README-CVikrcuu.js +0 -1
  18. package/docs/assets/README-CwxKEz5n.js +0 -1
  19. package/docs/assets/README-D-sCcuuV.js +0 -1
  20. package/docs/assets/README-D1NyMPDh.css +0 -1
  21. package/docs/assets/README-D8dRnWkj.css +0 -1
  22. package/docs/assets/README-DC5fWcO7.css +0 -1
  23. package/docs/assets/README-DFookNbq.js +0 -1
  24. package/docs/assets/README-DJM0QNOa.css +0 -1
  25. package/docs/assets/README-DJsWJjpr.js +0 -2
  26. package/docs/assets/README-DZH0ZBFE.js +0 -1
  27. package/docs/assets/README-DuLXE9ma.css +0 -1
  28. package/docs/assets/README-DxdjMTiZ.js +0 -1
  29. package/docs/assets/README-DxzXrur_.js +0 -1
  30. package/docs/assets/README-ZSEyYWl3.css +0 -1
  31. package/docs/assets/empty-BHv0FmNK.png +0 -0
  32. package/docs/assets/index-B3d27dSP.js +0 -66
  33. package/docs/assets/index-BeGJML3j.css +0 -1
  34. package/docs/index.html +0 -14
  35. package/docs/packages/Hook/usePackageConfig/README.md +0 -35
  36. package/docs/packages/Hook/usePackageConfig/demo.vue +0 -28
  37. package/docs/packages/Hook/usePackageConfig/usePackageConfig.ts +0 -39
  38. package/docs/packages/Hook/useRemainingSpace/README.md +0 -26
  39. package/docs/packages/Hook/useRemainingSpace/useRemainingSpace.ts +0 -148
  40. package/docs/packages/Hook/useTableConfig/README.md +0 -50
  41. package/docs/packages/Hook/useTableConfig/demo.vue +0 -134
  42. package/docs/packages/Hook/useTableConfig/useTableConfig.ts +0 -173
  43. package/docs/packages/Hook/useZIndex/README.md +0 -6
  44. package/docs/packages/Hook/useZIndex/useGlobalZIndex.ts +0 -34
  45. package/docs/packages/MDialog/docs/README.md +0 -26
  46. package/docs/packages/MDialog/docs/demo.vue +0 -72
  47. package/docs/packages/MDialog/index.ts +0 -10
  48. package/docs/packages/MDialog/src/MDialog.vue +0 -150
  49. package/docs/packages/MInline/docs/README.md +0 -26
  50. package/docs/packages/MInline/docs/demo.vue +0 -138
  51. package/docs/packages/MInline/index.ts +0 -10
  52. package/docs/packages/MInline/src/MInline.vue +0 -284
  53. package/docs/packages/MInputNumber/docs/README.md +0 -35
  54. package/docs/packages/MInputNumber/docs/demo.vue +0 -17
  55. package/docs/packages/MInputNumber/index.ts +0 -10
  56. package/docs/packages/MInputNumber/src/MInputNumber.vue +0 -268
  57. package/docs/packages/MSelect/docs/README.md +0 -20
  58. package/docs/packages/MSelect/docs/demo.vue +0 -36
  59. package/docs/packages/MSelect/index.ts +0 -17
  60. package/docs/packages/MSelect/src/MOption.vue +0 -43
  61. package/docs/packages/MSelect/src/MSelect.vue +0 -57
  62. package/docs/packages/MSelect/src/token.ts +0 -8
  63. package/docs/packages/MSelectTable/docs/README.md +0 -88
  64. package/docs/packages/MSelectTable/docs/demo.vue +0 -196
  65. package/docs/packages/MSelectTable/index.ts +0 -10
  66. package/docs/packages/MSelectTable/src/MSelectTable.vue +0 -493
  67. package/docs/packages/MSelectTableV1/docs/README.md +0 -49
  68. package/docs/packages/MSelectTableV1/docs/demo.vue +0 -77
  69. package/docs/packages/MSelectTableV1/index.ts +0 -10
  70. package/docs/packages/MSelectTableV1/src/MSelectTableV1.vue +0 -460
  71. package/docs/packages/MSelectV2/docs/README.md +0 -31
  72. package/docs/packages/MSelectV2/docs/demo.vue +0 -36
  73. package/docs/packages/MSelectV2/index.ts +0 -10
  74. package/docs/packages/MSelectV2/src/MSelectV2.vue +0 -116
  75. package/docs/packages/MTable/docs/README.md +0 -40
  76. package/docs/packages/MTable/docs/demo.vue +0 -93
  77. package/docs/packages/MTable/index.ts +0 -10
  78. package/docs/packages/MTable/src/MTable.vue +0 -228
  79. package/docs/packages/MTable/src/token.ts +0 -9
  80. package/docs/packages/MTableColumn/docs/README.md +0 -22
  81. package/docs/packages/MTableColumn/docs/demo.vue +0 -110
  82. package/docs/packages/MTableColumn/index.ts +0 -10
  83. package/docs/packages/MTableColumn/src/MTableColumn.vue +0 -345
  84. package/docs/packages/MTableColumnSet/docs/README.md +0 -31
  85. package/docs/packages/MTableColumnSet/docs/demo.vue +0 -36
  86. package/docs/packages/MTableColumnSet/index.ts +0 -10
  87. package/docs/packages/MTableColumnSet/src/MTableColumnSet.vue +0 -310
  88. package/docs/packages/README.md +0 -10
  89. package/docs/packages/SkinConfig/docs/README.md +0 -42
  90. package/docs/packages/SkinConfig/docs/demo.vue +0 -680
  91. package/docs/packages/SkinConfig/index.ts +0 -10
  92. package/docs/packages/SkinConfig/src/SkinConfig.vue +0 -478
  93. package/docs/packages/SkinConfig/src/useSkin.ts +0 -230
  94. package/docs/packages/TabPage/docs/README.md +0 -10
  95. package/docs/packages/TabPage/docs/demo.vue +0 -96
  96. package/docs/packages/TabPage/index.ts +0 -10
  97. package/docs/packages/TabPage/src/TabPage.vue +0 -566
  98. package/docs/packages/Tool/moneyFormat/README.md +0 -15
  99. package/docs/packages/Tool/moneyFormat/moneyFormat.ts +0 -69
  100. package/docs/packages/index.ts +0 -61
  101. package/docs/packages/list.json +0 -80
  102. package/docs/packages/typings/class.ts +0 -22
  103. package/docs/packages/typings/enum.ts +0 -9
  104. package/docs/packages/typings/global.d.ts +0 -69
  105. package/docs/packages/typings/interface.ts +0 -6
@@ -1,493 +0,0 @@
1
- <template>
2
- <div class="g-box g-select-table-box">
3
- <ElSelect
4
- ref="selectRef"
5
- v-bind="selectAttr"
6
- popperClass="m-select-table"
7
- :multiple="isElSelectMultiple"
8
- :disabled="props.disabled"
9
- :placeholder="props.placeholder"
10
- @visibleChange="visibleChange"
11
- :size="props.size"
12
- :valueKey="props.keywords.value"
13
- :remoteMethod="remoteMethodHandle"
14
- :filterMethod="props.remote ? null : filterMethodHandle"
15
- v-model="selectModelValue"
16
- @removeTag="removeTag"
17
- @clear="clear"
18
- :filterable="props.filterable"
19
- :remote="props.remote"
20
- :remoteShowSuffix="props.remote"
21
- @click="focus"
22
- @blur="changeBlur"
23
- @change="change"
24
- >
25
- <template #empty>
26
- <div
27
- class="m-table-select"
28
- :style="`width: ${typeof props.popupWidth === 'number' ? props.popupWidth + 'px' : props.popupWidth}`"
29
- >
30
- <div
31
- class="btn-box"
32
- v-if="props.multiple && isAffirmBtn"
33
- >
34
- <el-button
35
- @click="selectMultiple"
36
- size="small"
37
- >
38
- 确认
39
- </el-button>
40
- </div>
41
- <ElTable
42
- ref="selectTableRef"
43
- :scrollbarAlwaysOn="props.scrollbarAlwaysOn"
44
- :size="props.size"
45
- :data="tabDataMap"
46
- :rowKey="props.keywords.value"
47
- highlightCurrentRow
48
- @rowClick="rowClick"
49
- @selectionChange="selectionChange"
50
- :height="props.tableHeight"
51
- :border="props.border"
52
- >
53
- <el-table-column
54
- v-if="props.multiple"
55
- type="selection"
56
- :reserveSelection="reserveSelection"
57
- width="55"
58
- />
59
- <el-table-column
60
- showOverflowTooltip
61
- v-for="item in tableTitle"
62
- :key="item.prop"
63
- :prop="item.prop"
64
- :label="item.label"
65
- :minWidth="item.minWidth"
66
- :filters="item.filters"
67
- :headerAlign="item.headerAlign"
68
- >
69
- <template #default="scope">
70
- <!-- {{scope}} -->
71
- {{ tabDataMap[scope.$index][item.prop] || '-' }}
72
- </template>
73
- </el-table-column>
74
- <template #empty>
75
- <img
76
- class="u-img"
77
- src="@/assets/empty.png"
78
- />
79
- </template>
80
- </ElTable>
81
- <!--分页-->
82
- <div
83
- class="m-page"
84
- v-if="props.total"
85
- >
86
- <el-pagination
87
- v-model:currentPage="page.currentPage"
88
- v-model:pageSize="page.pageSize"
89
- hideOnSinglePage
90
- :small="props.size === 'small'"
91
- :pageSizes="page.pageSizesOptions"
92
- :pagerCount="5"
93
- layout="total, prev, pager, next, sizes"
94
- :total="page.total"
95
- @currentChange="toPage"
96
- @sizeChange="toPage(page.currentPage, $event)"
97
- />
98
- </div>
99
- </div>
100
- </template>
101
- </ElSelect>
102
- </div>
103
- </template>
104
-
105
- <script setup lang="ts">
106
- import {
107
- computed,
108
- useAttrs,
109
- ref,
110
- watch,
111
- reactive,
112
- onMounted
113
- } from 'vue'
114
- import { ElSelect, ElTable } from 'element-plus'
115
- import { Page } from './../../typings/class'
116
-
117
- const props = withDefaults(defineProps<{
118
- modelValue?: string | number | Array<number | string>,
119
- /** 显示值 */
120
- name?: string | number | Array<number | string>,
121
- placeholder?: string,
122
- disabled?: boolean,
123
- size?: 'small' | 'large' | '',
124
- /** 总数据量,当有值时,出现分页器 */
125
- total?: number | null,
126
- /** 自定义搜索 */
127
- filterMethod?: Function | null,
128
- /** 是否使用搜索 */
129
- filterable?: boolean,
130
- /** 是否使用 远程搜索 */
131
- remote?: boolean,
132
- /** 自定义远程搜索 */
133
- remoteMethod?: Function,
134
- options: Option[],
135
- tableTitle: TableTitle[],
136
- /** 是否多选 */
137
- multiple?: boolean,
138
- /** 定义默认的 label 和value */
139
- keywords?: Option,
140
- /** 是否开启翻页多选 */
141
- reserveSelection?: boolean,
142
- tableHeight?: string | number,
143
- /** 是否有确认按钮 */
144
- isAffirmBtn?: boolean,
145
- /** 是否常态显示滚动条 */
146
- scrollbarAlwaysOn?: boolean,
147
- /** 是否能够创建条目 */
148
- allowCreate?: boolean,
149
- /** 表格边框 */
150
- border?: boolean,
151
- /** 弹窗的宽度 */
152
- popupWidth?: number | string
153
- }>(), {
154
- modelValue: '',
155
- name: '',
156
- placeholder: '请选择',
157
- disabled: false,
158
- size: '',
159
- total: null,
160
- filterMethod: null,
161
- filterable: false,
162
- remote: false,
163
- remoteMethod: () => {},
164
- options: () => [],
165
- tableTitle: () => [],
166
- multiple: false,
167
- keywords: () => ({ label: 'label', value: 'value' }),
168
- reserveSelection: false,
169
- tableHeight: 200,
170
- isAffirmBtn: false,
171
- scrollbarAlwaysOn: false,
172
- allowCreate: false,
173
- border: false,
174
- popupWidth: 500
175
- })
176
-
177
- const isElSelectMultiple = computed(() => {
178
- if (Array.isArray(props.name)) return true
179
- if (props.name || props.name === 0) return false
180
- return props.multiple
181
- })
182
-
183
- const modelValue = ref<string | number | Array<number | string>>(props.modelValue)
184
- watch(
185
- () => props.modelValue,
186
- () => {
187
- // if (props.multiple && !checkType.isArray(props.modelValue)) return console.error('multiple为true时,modelValue必须为数组格式')
188
- // if (!props.multiple && (checkType.isArray(props.modelValue) || checkType.isObject(props.modelValue))) return console.error('multiple为false时,modelValue必须为基础类型')
189
- modelValue.value = props.modelValue
190
- }
191
- )
192
-
193
- const selectModelValue = ref<string | number | Array<number | string>>(props.multiple ? [] : '')
194
- watch(
195
- () => props.name,
196
- () => {
197
- if (props.name === '' || props.name === null || props.name === undefined) return false
198
- selectModelValue.value = props.name
199
- }
200
- )
201
- if (props.name || props.name === 0) {
202
- selectModelValue.value = props.name
203
- }
204
-
205
- // 获取ref
206
- const selectRef = ref<InstanceType<typeof ElSelect> | null>(null)
207
- onMounted(() => {
208
- if (!selectRef.value) return false
209
- selectRef.value.toggleMenu = () => {}
210
- })
211
- const selectTableRef = ref<InstanceType<typeof ElTable> | null>(null)
212
-
213
- // 组件内使用自定义
214
- const isVisible = ref(false) // 是否显示隐藏下拉框
215
- const state = reactive<{
216
- tabData: Option[],
217
- ids: string | number | Array<string | number>,
218
- selectRowS: any[],
219
- searchValue: string // 搜索值
220
- }>({
221
- tabData: props.options,
222
- ids: [], // 多选id集合
223
- selectRowS: [],
224
- searchValue: ''
225
- })
226
- // 抛出事件
227
- const emit = defineEmits<{
228
- /** 单选或多选之后的回调 */
229
- selected: [values: string | number | Array<string | number>, rows: Option[] | Option],
230
- /** 多选确认按钮时的回调 配合isAffirmBtn使用 */
231
- selectMultiple: [values: Array<string | number>, rows: Option[]],
232
- /** 当没有使用filterMethod时候才会有回调否则没有 */
233
- toPage: [page: Page, query?: string],
234
- 'update:modelValue': [value: string | number | Array<string | number>],
235
- /** 用户点击清空按钮时触发 */
236
- clear: [],
237
- /** 多选模式下移除tag时触发 */
238
- removeTag: [tag: any]
239
- }>()
240
-
241
- const allowCreateRow = computed(() => {
242
- if (!props.allowCreate) return []
243
- const modelValue: Array<string | number> = props.multiple && Array.isArray(props.modelValue) ? props.modelValue : []
244
- const value = [...modelValue, state.searchValue].filter(item => item)
245
- return value
246
- .filter(item => !props.options.some(node => node[props.keywords.value] === item))
247
- .map(item => ({
248
- [props.keywords.label]: item,
249
- [props.keywords.value]: item,
250
- isAllowCreateRow: true
251
- }))
252
- })
253
-
254
- const tabDataMap = ref<any[]>([])
255
- watch(() => state.tabData, () => {
256
- tabDataMap.value = [...state.tabData, ...allowCreateRow.value]
257
- })
258
- watch(() => allowCreateRow.value, (val, oval) => {
259
- const check = JSON.stringify(val) === JSON.stringify(oval)
260
- if (check) return false
261
- for (let i = 0; i < tabDataMap.value.length; i++) {
262
- const item = tabDataMap.value[i]
263
- if (!item.isAllowCreateRow) continue
264
- i--
265
- tabDataMap.value.splice(i, 1)
266
- }
267
- allowCreateRow.value.forEach(item => {
268
- tabDataMap.value.push(item as any)
269
- })
270
- })
271
-
272
- const upSelectModelValue = () => {
273
- if (props.name || props.name === 0) return false
274
- // 多选
275
- if (props.multiple) {
276
- const _value: Array<string | number> = Array.isArray(modelValue.value) ? modelValue.value : [modelValue.value].filter(item => item !== '')
277
- const data: Array<string | number> = _value.map(item => {
278
- const row: any = props.options.find(node => node[props.keywords.value as any] === item) || {}
279
- return row[props.keywords.label] || item
280
- })
281
- selectModelValue.value = data
282
- }
283
- // 单选
284
- if (!props.multiple) {
285
- const data: any = props.options.find(item => item[props.keywords.value as any] === modelValue.value) || {}
286
- selectModelValue.value = data[props.keywords.label] || modelValue.value
287
- }
288
- }
289
- upSelectModelValue()
290
- watch(
291
- () => modelValue.value,
292
- () => {
293
- upSelectModelValue()
294
- }
295
- )
296
-
297
- watch(() => props.options, (val, oval) => {
298
- const check = JSON.stringify(val) === JSON.stringify(oval)
299
- if (check) return false
300
- state.tabData = val
301
- defaultBackFillValue()
302
- }, { deep: true })
303
- watch(() => props.modelValue, (val) => {
304
- if (!state.tabData.length || !val) return false
305
- defaultBackFillValue()
306
- })
307
- watch(() => props.total, () => {
308
- page.total = props.total as number
309
- })
310
- watch(() => modelValue.value, () => {
311
- emit('update:modelValue', modelValue.value)
312
- })
313
-
314
- // 点击行事件
315
- const rowClick = (row: Option) => {
316
- if (props.multiple) return selectTableRef.value.setCurrentRow() // 是多选不要
317
- const val = tabDataMap.value.find(item => row[props.keywords.value] === item[props.keywords.value])
318
- if (!val) return false
319
- modelValue.value = val[props.keywords.value]
320
- blur()
321
-
322
- emit('selected', val[props.keywords.value], val)
323
- }
324
-
325
- // 确认的回调
326
- const selectMultiple = () => {
327
- blur()
328
- emit('selectMultiple', state.ids as Array<string | number>, state.selectRowS)
329
- }
330
-
331
- // 多选事件
332
- const selectionChange = (selection: Option[]) => {
333
- const select = selection.map((item) => item[props.keywords.value])
334
- const _value: Array<string | number> = Array.isArray(modelValue.value) ? modelValue.value : [modelValue.value].filter(item => item !== '')
335
- // 是否为删除
336
- const isDelete = _value.some(item => !select.includes(item))
337
- if (isDelete && !isVisible.value) return
338
- modelValue.value = selection.map((item) => item[props.keywords.value])
339
- state.ids = selection.map((item) => item[props.keywords.value])
340
- state.selectRowS = selection
341
- if (props.isAffirmBtn) return // 有确认按钮不走多选事件
342
- emit('selected', state.ids as Array<string | number>, state.selectRowS)
343
- }
344
- // tags删除后回调
345
- const removeTag = (tag: any) => {
346
- const row = state.tabData.find((item) => item[props.keywords.label] === tag)
347
- selectTableRef.value.toggleRowSelection(row, false)
348
- emit('removeTag', tag)
349
- }
350
- const change = (value: string | number | Array<string | number>) => {
351
- if (props.multiple && Array.isArray(value) && Array.isArray(modelValue.value)) {
352
- const removeValue = modelValue.value
353
- .filter(item => !(value as Array<string | number>).includes(item))
354
- removeValue.forEach(item => {
355
- const row = tabDataMap.value.find(node => node[props.keywords.value] === item)
356
- selectTableRef.value.toggleRowSelection(row, false)
357
- })
358
- }
359
- modelValue.value = value
360
- }
361
-
362
- // 默认反填
363
- const defaultBackFillValue = () => {
364
- if (props.multiple) {
365
- const modelArray: Array<string | number> = Array.isArray(props.modelValue) ? props.modelValue : [props.modelValue]
366
- const newArr = (state.tabData as Option[]).filter(item => modelArray.includes(item[props.keywords.value as keyof typeof item]))
367
- setTimeout(() => {
368
- newArr.forEach((row) => {
369
- const arr = state.tabData.filter(item => item[props.keywords.value] === row[props.keywords.value])
370
- if (!arr.length) return false
371
- selectTableRef.value.toggleRowSelection(arr[0], true)
372
- })
373
- })
374
- } else {
375
- const item = state.tabData.find(item => props.modelValue === item[props.keywords.value])
376
- if (!item) return false
377
- setTimeout(() => {
378
- selectTableRef.value.setCurrentRow(item, true)
379
- })
380
- modelValue.value = item[props.keywords.value]
381
- }
382
- }
383
- // // 搜索过滤
384
- const filterMethodHandle = (val: string) => {
385
- state.searchValue = val.trim()
386
- if (props.filterable && props.filterMethod) return props.filterMethod(val, page)
387
- const tableData = JSON.parse(JSON.stringify(props.options))
388
- if (!tableData.length) return null
389
- state.tabData = tableData.filter((item: Option) => item[props.keywords.label].toString().includes(val))
390
- }
391
-
392
- const remoteMethodHandle = (query: string) => {
393
- state.searchValue = query.trim()
394
- if (!props.remote) return false
395
-
396
- selectRef?.value?.tooltipRef?.onOpen()
397
- page.currentPage = 1
398
- return props.remoteMethod(query, page)
399
- }
400
- // 表格显示隐藏回调
401
- const visibleChange = (visible: boolean) => {
402
- isVisible.value = visible
403
- }
404
- // 清空后的回调
405
- const clear = () => {
406
- if (props.multiple) {
407
- selectTableRef.value.clearSelection()
408
- modelValue.value = []
409
- } else {
410
- // 取消高亮
411
- selectTableRef.value.setCurrentRow()
412
- modelValue.value = ''
413
- }
414
- emit('clear')
415
- }
416
-
417
- const selectAttr = computed(() => {
418
- return {
419
- clearable: true,
420
- ...useAttrs()
421
- }
422
- })
423
- // 分页
424
- const page = reactive<Page>(new Page({
425
- total: props.total as number,
426
- pageSize: 5,
427
- currentPage: 1,
428
- pageSizesOptions: [5, 10, 20]
429
- }))
430
-
431
- const toPage = (currentPage: number = 1, pageSize: number = page.pageSize) => {
432
- page.currentPage = currentPage
433
- page.pageSize = pageSize
434
- if (!props.multiple || (props.multiple && !props.reserveSelection)) clear()
435
- selectRef.value.expanded = true
436
- props.remoteMethod(state.searchValue, page)
437
- if (props.filterable) {
438
- emit('toPage', page, selectRef.value.inputRef.value)
439
- } else {
440
- emit('toPage', page)
441
- }
442
- }
443
- // 触发select显示
444
- const focus = () => {
445
- if (props.disabled) return
446
- selectRef.value.focus()
447
- selectRef.value.expanded = true
448
- }
449
- const changeBlur = () => {
450
- selectRef?.value?.tooltipRef?.onClose()
451
- }
452
- // 触发select隐藏
453
- const blur = () => {
454
- selectRef.value.blur()
455
- selectRef?.value?.tooltipRef?.onClose()
456
- }
457
- defineExpose({ defaultBackFillValue, clear, focus })
458
- </script>
459
-
460
- <style lang="scss">
461
- .g-select-table-box {
462
- width: 100%;
463
- }
464
-
465
- .u-img {
466
- width: 80px;
467
- }
468
-
469
- .m-select-table {
470
-
471
- .el-table {
472
- --el-table-header-bg-color: var(--m-list-el-table-header-bg-color, #f5f5f5);
473
- }
474
-
475
- .el-select-dropdown__empty {
476
- padding: 0;
477
-
478
- .btn-box {
479
- text-align: right;
480
- padding-bottom: 6px;
481
- }
482
- }
483
-
484
- .m-table-select {
485
- padding: 6px;
486
- overflow-y: auto;
487
- }
488
-
489
- .m-page {
490
- padding: 4px;
491
- }
492
- }
493
- </style>
@@ -1,49 +0,0 @@
1
- <script setup>
2
- import demo from './demo.vue'
3
- </script>
4
-
5
- 下拉表格选择器(旧版,只做维护不更新)
6
- =================
7
-
8
- ### 1) 基础用法
9
-
10
- <Preview comp-name="MSelectTable" demo-name="demo">
11
- <demo />
12
- </Preview>
13
-
14
- ### 2) Attributes
15
-
16
- | 参数 | 说明 | 类型 | 可选值 | 默认值 |
17
- |-------------------|:------------------------:|:--------:|:--------------------:|:-------:|
18
- | value / v-model | 绑定值 | string | number | - | '' |
19
- | placeholder | 输入框默认 placeholder | string | - | '' |
20
- | disabled | 是否禁用 | boolean | - | false |
21
- | size | 数值输入框尺寸 | string | 'large', 'small', '' | '' |
22
- | options | 选项内容,详情见Options接口 | Option[] | - | [] |
23
- | total | 总数据量,当有值时,出现分页器 | number | null | - |
24
- | remoteMethod | 自定义远程搜索方法 | Function | - | - |
25
- | tableTitle | 表格标题配置 | any[] | - | [] |
26
- | isSelect | 是否多选 | boolean | - | false |
27
- | allowCreate | 是否允许用户创建新条目 | boolean | - | false |
28
- | focusShow | 是否聚焦显示(既,当搜索值为空时是否显示选择器) | - | false | - |
29
- | clearable | 是否可以清空选项 | boolean | - | false |
30
- | scrollbarAlwaysOn | 总是显示滚动条 | boolean | - | - |
31
- | labelKey | label映射key | string | - | 'label' |
32
-
33
- #### Options(选项接口)
34
-
35
- | 参数 | 说明 | 类型 | 可选值 | 是否必填 |
36
- |---------------------|:---------------------:|:-----------------:|:---:|:----:|
37
- | label | 选项的标签,若不设置则默认与value相同 | string | - | 是 |
38
- | value | 选项的值 | string \| number | - | 是 |
39
- | disabled | 是否禁用该选项 | boolean | - | 否 |
40
- | \[propName: string] | 额外字段 | string \| number | - | 否 |
41
-
42
- ### 3) Events
43
-
44
- | 方法名 | 说明 | 参数 |
45
- |----------------|:-----------:|:---------------------:|
46
- | selectMultiple | 多选确认按钮点击时触发 | selectedRow(所选行构成的数组) |
47
- | change | 绑定值被改变时触发 | value |
48
- | selected | 单选模式点击行时触发 | selectedRow(所选行) |
49
- | clear | 清空选择之后回调 | - |
@@ -1,77 +0,0 @@
1
- <template>
2
- <div class="g-m-select-table-box">
3
- <m-select-table-v1
4
- v-model="code"
5
- placeholder="请选择单号"
6
- :remoteMethod="remoteMethod"
7
- :options="options"
8
- :tableTitle="commodityOptionsTitle"
9
- focusShow
10
- clearable
11
- @clear="clearCall"
12
- ></m-select-table-v1>
13
- </div>
14
- </template>
15
-
16
- <script setup lang="ts">
17
- import { ref } from 'vue'
18
- import { Page } from '../../typings/class'
19
-
20
- const code = ref<string>('')
21
- const options = ref<Option[]>()
22
- const commodityOptionsTitle: TableTitle[] = [{
23
- prop: 'sn',
24
- label: '单号'
25
- }, {
26
- prop: 'fileName',
27
- label: '文件名'
28
- }, {
29
- prop: 'createdUserName',
30
- label: '上传者'
31
- }, {
32
- prop: 'createdTimeStr',
33
- label: '上传时间'
34
- }]
35
-
36
- const mockData = [{
37
- sn: 'SC201564981241',
38
- fileName: '测试文件1.zip',
39
- createdUserName: '绫波丽',
40
- createdTimeStr: '2024-05-06'
41
- }, {
42
- sn: 'SC201564981242',
43
- fileName: '测试文件2.zip',
44
- createdUserName: '绫波丽',
45
- createdTimeStr: '2024-05-06',
46
- disabled: true
47
- }, {
48
- sn: 'SC201564981243',
49
- fileName: '测试文件3.zip',
50
- createdUserName: '绫波丽',
51
- createdTimeStr: '2024-05-06'
52
- }, {
53
- sn: 'SC201564981244',
54
- fileName: '测试文件4.zip',
55
- createdUserName: '绫波丽',
56
- createdTimeStr: '2024-05-06'
57
- }]
58
- const clearCall = (e: any) => {
59
- console.log(e)
60
- console.log('!@#@#')
61
- }
62
- const remoteMethod = async (query: string = '', page: Page) => {
63
- console.log('page', page)
64
- options.value = mockData.map(item => ({
65
- label: item.fileName,
66
- value: item.sn,
67
- sn: item.sn,
68
- fileName: item.fileName,
69
- createdUserName: item.createdUserName,
70
- createdTimeStr: item.createdTimeStr,
71
- disabled: item.disabled
72
- }))
73
- }
74
- </script>
75
-
76
- <style lang="scss">
77
- </style>
@@ -1,10 +0,0 @@
1
- import { App, Plugin } from 'vue'
2
- import MSelectTableV1 from './src/MSelectTableV1.vue'
3
-
4
- export const MSelectTableV1Plugin: Plugin = {
5
- install (app: App) {
6
- app.component('MSelectTableV1', MSelectTableV1)
7
- }
8
- }
9
-
10
- export { MSelectTableV1 }