br-dionysus 1.17.2 → 1.17.3

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.
@@ -0,0 +1,111 @@
1
+ <template>
2
+ <div>
3
+ <h5>表格表单</h5>
4
+ <MTable
5
+ :data="tableData"
6
+ border
7
+ scrollbarAlwaysOn
8
+ @pasteData="pasteData"
9
+ @selectionChange="handleSelectionChange"
10
+ >
11
+ <el-table-column
12
+ fixed="left"
13
+ type="selection"
14
+ />
15
+ <MTableColumn
16
+ prop="name"
17
+ label="名称"
18
+ minWidth="200"
19
+ showOverflowTooltip
20
+ ></MTableColumn>
21
+ <MTableColumn
22
+ prop="address"
23
+ label="地址"
24
+ minWidth="200"
25
+ >
26
+ <template #default="scope">
27
+ <el-input
28
+ v-model="(scope.row as any).address"
29
+ placeholder="请输入地址"
30
+ ></el-input>
31
+ </template>
32
+ </MTableColumn>
33
+ </MTable>
34
+ </div>
35
+ </template>
36
+
37
+ <script setup lang="ts">
38
+ import { ref } from 'vue'
39
+ import { MTableColumn } from './../../MTableColumn'
40
+
41
+ const tableData = ref<any[]>([])
42
+ tableData.value = [{
43
+ id: 1,
44
+ sn: 1,
45
+ date: '2016-05-03',
46
+ name: 'Tom1',
47
+ address: 'No. 189, Grove St, Los Angeles',
48
+ tag: 'Home',
49
+ pid: 0,
50
+ qty: 10
51
+ }, {
52
+ id: 2,
53
+ sn: 2,
54
+ date: '2016-05-02',
55
+ name: 'Tom2',
56
+ address: 'No. 189, Grove St, Los Angeles',
57
+ tag: 'Office',
58
+ pid: 0,
59
+ qty: 101
60
+ }, {
61
+ id: 3,
62
+ sn: 3,
63
+ date: '2016-05-04',
64
+ name: 'Tom3',
65
+ address: 'No. 189, Grove St, Los Angeles',
66
+ tag: 'Home',
67
+ pid: 0,
68
+ qty: 102
69
+ }, {
70
+ id: 4,
71
+ sn: 4,
72
+ date: '2016-05-01',
73
+ name: 'Tom4',
74
+ address: 'No. 189, Grove St, Los Angeles',
75
+ tag: 'Office',
76
+ pid: 0,
77
+ qty: 103
78
+ }, {
79
+ id: 5,
80
+ sn: 5,
81
+ date: '2016-05-05',
82
+ name: 'Tom4',
83
+ address: 'No. 189, Grove St, Los Angeles',
84
+ tag: 'Office',
85
+ pid: 0,
86
+ qty: 104
87
+ }, {
88
+ id: 6,
89
+ sn: 6,
90
+ date: '2016-06-01',
91
+ name: 'Tom4',
92
+ address: 'No. 189, Grove St, Los Angeles',
93
+ tag: 'Office',
94
+ pid: 0,
95
+ qty: 105
96
+ }]
97
+
98
+ // 选中项
99
+ const multipleSelection = ref<number[]>([])
100
+ const handleSelectionChange = (val: any[]) => {
101
+ multipleSelection.value = val.map(item => item.sn)
102
+ }
103
+
104
+ const pasteData = (data: any, pasteTableData: any[]) => {
105
+ console.log('pasteTableData', pasteTableData)
106
+ tableData.value = pasteTableData
107
+ }
108
+ </script>
109
+
110
+ <style>
111
+ </style>
@@ -1,356 +1,28 @@
1
1
  <template>
2
2
  <div class="g-box">
3
- <h3>普通表格</h3>
4
- <MTable
5
- :data="tableData1"
6
- border
7
- :filtersValue="filtersValue"
8
- scrollbarAlwaysOn
9
- v-model:tableConfig="tableConfig"
10
- @selectionChange="handleSelectionChange"
11
- >
12
- <el-table-column
13
- fixed="left"
14
- type="selection"
15
- />
16
- <MTableColumn
17
- v-for="item in tableTitle"
18
- :key="item.prop"
19
- :prop="item.prop"
20
- :label="item.label"
21
- :align="item.align"
22
- :minWidth="item.minWidth"
23
- :className="item.className"
24
- :filters="item.filters"
25
- :headerAlign="item.headerAlign"
26
- :fixed="item.fixed"
27
- v-model:filtersValue="filtersValue"
28
- showOverflowTooltip
29
- ></MTableColumn>
30
- </MTable>
3
+ <!--<DemoTest1></DemoTest1>-->
4
+ <!--<el-divider />-->
31
5
 
32
- <h3>展开列</h3>
33
- <p @click="zzzz">{{ tableConfig }}</p>
34
- <MTable
35
- :data="tableData"
36
- border
37
- @headerDragend="headerDragend"
38
- :filtersValue="filtersValue"
39
- scrollbarAlwaysOn
40
- v-model:tableConfig="tableConfig"
41
- rowKey="id"
42
- tableConfigKey="tableConfigKey"
43
- expandProp="sn"
44
- @privateExpandChange="privateExpandChange"
45
- >
46
- <el-table-column
47
- fixed="left"
48
- type="selection"
49
- />
50
- <MTableColumn
51
- type="expand"
52
- width="1"
53
- >
54
- <template #default="props">
55
- <h1>index{{ props.index }}</h1>
56
- <h1>$index{{ props.$index }}</h1>
57
- <h1>测试</h1>
58
- </template>
59
- </MTableColumn>
60
- <el-table-column
61
- prop="name"
62
- label="名称"
63
- >
64
- <el-table-column
65
- prop="date"
66
- label="时间"
67
- ></el-table-column>
68
- <el-table-column
69
- prop="address"
70
- label="地址"
71
- ></el-table-column>
72
- </el-table-column>
73
- <MTableColumn
74
- v-for="item in tableTitle"
75
- :key="item.prop"
76
- :prop="item.prop"
77
- :label="item.label"
78
- :align="item.align"
79
- :minWidth="item.minWidth"
80
- :className="item.className"
81
- :filters="item.filters"
82
- :headerAlign="item.headerAlign"
83
- :fixed="item.fixed"
84
- v-model:filtersValue="filtersValue"
85
- showOverflowTooltip
86
- >
87
- </MTableColumn>
88
- </MTable>
6
+ <!--<DemoTest2></DemoTest2>-->
7
+ <!--<el-divider />-->
89
8
 
90
- <h3>树状表格</h3>
91
- <MTable
92
- :data="tableData"
93
- border
94
- @headerDragend="headerDragend"
95
- :filtersValue="filtersValue"
96
- scrollbarAlwaysOn
97
- v-model:tableConfig="tableConfig"
98
- rowKey="id"
99
- tableConfigKey="tableConfigKey"
100
- @expandChange="privateExpandChange"
101
- >
102
- <MTableColumn
103
- v-for="item in tableTitle"
104
- :key="item.prop"
105
- :prop="item.prop"
106
- :label="item.label"
107
- :align="item.align"
108
- :minWidth="item.minWidth"
109
- :className="item.className"
110
- :filters="item.filters"
111
- :headerAlign="item.headerAlign"
112
- :fixed="item.fixed"
113
- v-model:filtersValue="filtersValue"
114
- showOverflowTooltip
115
- >
116
- </MTableColumn>
117
- </MTable>
9
+ <!--<DemoTest3></DemoTest3>-->
10
+ <!--<el-divider />-->
118
11
 
119
- <h3>批改</h3>
120
- <MBatchEdit
121
- size="small"
122
- v-model:tableData="tableData1"
123
- :selectionCell="selectionCell"
124
- :relevancyTable="mTableRef"
125
- ></MBatchEdit>
126
- <MTable
127
- ref="mTableRef"
128
- :data="tableData1"
129
- border
130
- scrollbarAlwaysOn
131
- showSelectionCellStatus
132
- v-model:selectionCell="selectionCell"
133
- >
134
- <MTableColumn
135
- v-for="item in tableTitle"
136
- :key="item.prop"
137
- :prop="item.prop"
138
- :label="item.label"
139
- :align="item.align"
140
- :minWidth="item.minWidth"
141
- :className="item.className"
142
- :filters="item.filters"
143
- :headerAlign="item.headerAlign"
144
- :fixed="item.fixed"
145
- :isBatchEdit="item.isBatchEdit"
146
- v-model:filtersValue="filtersValue"
147
- showOverflowTooltip
148
- ></MTableColumn>
149
- <MTableColumn
150
- prop="prop"
151
- label="label"
152
- showOverflowTooltip
153
- ></MTableColumn>
154
- </MTable>
155
- <p>选中的单元格:{{ selectionCell }}</p>
12
+ <!--<DemoTest4></DemoTest4>-->
13
+ <!--<el-divider />-->
14
+
15
+ <DemoTest5></DemoTest5>
16
+ <el-divider />
156
17
  </div>
157
18
  </template>
158
19
 
159
20
  <script setup lang="ts">
160
- import { ref } from 'vue'
161
- import { useTableConfig } from './../../index'
162
- import { MTableColumn } from './../../MTableColumn'
163
- import MBatchEdit from './../src/MBatchEdit.vue'
164
-
165
- const privateExpandChange = (row: any, expandedRows: any[]) => {
166
- console.log('row', row)
167
- console.log('expandedRows', expandedRows)
168
- }
169
-
170
- const tableData = ref<any[]>([])
171
- const { tableTitle, headerDragend, tableConfig, filtersValue } = useTableConfig('MTableDemo', [{
172
- label: '序号',
173
- prop: 'sn',
174
- minWidth: 200,
175
- fixed: 'left',
176
- isBatchEdit: false
177
- }, {
178
- label: '时间',
179
- prop: 'date',
180
- minWidth: 200,
181
- isBatchEdit: true
182
- }, {
183
- label: '地址',
184
- prop: 'address',
185
- minWidth: 200,
186
- isBatchEdit: true
187
- }, {
188
- label: '名称',
189
- prop: 'name',
190
- minWidth: 200,
191
- isBatchEdit: true
192
- }, {
193
- label: '数量',
194
- prop: 'qty',
195
- minWidth: 200,
196
- isBatchEdit: true
197
- }], tableData)
198
-
199
- // const childTableTitle: TableTitle[] = [{
200
- // label: '序号',
201
- // prop: 'sn',
202
- // minWidth: 200,
203
- // fixed: 'left'
204
- // }, {
205
- // label: '时间',
206
- // prop: 'date',
207
- // minWidth: 200
208
- // }, {
209
- // label: '地址',
210
- // prop: 'address',
211
- // minWidth: 200
212
- // }, {
213
- // label: '名称',
214
- // prop: 'name',
215
- // minWidth: 200
216
- // }]
217
- const zzzz = () => {
218
- filtersValue.value = {}
219
- }
220
- tableData.value = [{
221
- id: 1,
222
- sn: 1,
223
- date: '2016-05-03',
224
- name: 'Tom1',
225
- address: 'No. 189, Grove St, Los Angeles',
226
- tag: 'Home',
227
- pid: 0
228
- }, {
229
- id: 2,
230
- sn: 2,
231
- date: '2016-05-02',
232
- name: 'Tom2',
233
- address: 'No. 189, Grove St, Los Angeles',
234
- tag: 'Office',
235
- pid: 0,
236
- children: [{
237
- id: 21,
238
- sn: 1,
239
- date: '2016-05-02',
240
- name: 'Tom21',
241
- address: 'No. 189, Grove St, Los Angeles',
242
- tag: 'Office'
243
- }, {
244
- id: 22,
245
- sn: 2,
246
- date: '2016-05-02',
247
- name: 'Tom22',
248
- address: 'No. 189, Grove St, Los Angeles',
249
- tag: 'Office'
250
- }]
251
- }, {
252
- id: 3,
253
- sn: 3,
254
- date: '2016-05-04',
255
- name: 'Tom3',
256
- address: 'No. 189, Grove St, Los Angeles',
257
- tag: 'Home',
258
- pid: 0
259
- }, {
260
- id: 4,
261
- sn: 4,
262
- date: '2016-05-01',
263
- name: 'Tom4',
264
- address: 'No. 189, Grove St, Los Angeles',
265
- tag: 'Office',
266
- pid: 0
267
- }, {
268
- id: 5,
269
- sn: 5,
270
- date: '2016-05-05',
271
- name: 'Tom4',
272
- address: 'No. 189, Grove St, Los Angeles',
273
- tag: 'Office',
274
- pid: 0
275
- }, {
276
- id: 6,
277
- sn: 6,
278
- date: '2016-06-01',
279
- name: 'Tom4',
280
- address: 'No. 189, Grove St, Los Angeles',
281
- tag: 'Office',
282
- pid: 0
283
- }]
284
-
285
- const tableData1 = ref<any[]>([])
286
- tableData1.value = [{
287
- id: 1,
288
- sn: 1,
289
- date: '2016-05-03',
290
- name: 'Tom1',
291
- address: 'No. 189, Grove St, Los Angeles',
292
- tag: 'Home',
293
- pid: 0,
294
- qty: 10
295
- }, {
296
- id: 2,
297
- sn: 2,
298
- date: '2016-05-02',
299
- name: 'Tom2',
300
- address: 'No. 189, Grove St, Los Angeles',
301
- tag: 'Office',
302
- pid: 0,
303
- qty: 101
304
- }, {
305
- id: 3,
306
- sn: 3,
307
- date: '2016-05-04',
308
- name: 'Tom3',
309
- address: 'No. 189, Grove St, Los Angeles',
310
- tag: 'Home',
311
- pid: 0,
312
- qty: 102
313
- }, {
314
- id: 4,
315
- sn: 4,
316
- date: '2016-05-01',
317
- name: 'Tom4',
318
- address: 'No. 189, Grove St, Los Angeles',
319
- tag: 'Office',
320
- pid: 0,
321
- qty: 103
322
- }, {
323
- id: 5,
324
- sn: 5,
325
- date: '2016-05-05',
326
- name: 'Tom4',
327
- address: 'No. 189, Grove St, Los Angeles',
328
- tag: 'Office',
329
- pid: 0,
330
- qty: 104
331
- }, {
332
- id: 6,
333
- sn: 6,
334
- date: '2016-06-01',
335
- name: 'Tom4',
336
- address: 'No. 189, Grove St, Los Angeles',
337
- tag: 'Office',
338
- pid: 0,
339
- qty: 105
340
- }]
341
-
342
- // 选中项
343
- const multipleSelection = ref<number[]>([])
344
- const handleSelectionChange = (val: any[]) => {
345
- multipleSelection.value = val.map(item => item.sn)
346
- tableData1.value[0].name = tableData1.value[0].name + 'd'
347
- }
348
-
349
- /**
350
- * 批量修改
351
- * */
352
- const selectionCell = ref<string>('')
353
- const mTableRef = ref<any | null>(null)
21
+ // import DemoTest1 from 'packages/MTable/docs/DemoTest1.vue'
22
+ // import DemoTest2 from 'packages/MTable/docs/DemoTest2.vue'
23
+ // import DemoTest3 from 'packages/MTable/docs/DemoTest3.vue'
24
+ // import DemoTest4 from 'packages/MTable/docs/DemoTest4.vue'
25
+ import DemoTest5 from 'packages/MTable/docs/DemoTest5.vue'
354
26
  </script>
355
27
 
356
28
  <style lang="scss" scoped>
@@ -29,7 +29,7 @@
29
29
  </template>
30
30
 
31
31
  <script setup lang="ts">
32
- import { ref, onMounted, computed, useSlots, watch, provide, reactive } from 'vue'
32
+ import { ref, onMounted, computed, useSlots, watch, provide, reactive, getCurrentInstance } from 'vue'
33
33
  import checkType from '../../Tool/checkType/checkType'
34
34
  import { TableConfig } from './../../Hook/useTableConfig/useTableConfig'
35
35
  import { tableKey } from './token'
@@ -82,7 +82,7 @@ const getTableTitle = (): TableTitle[] => {
82
82
  const slotDefaultData = slotsToData(slots, {
83
83
  name: 'default',
84
84
  isJumpFgt: false,
85
- maxDepth: 1
85
+ maxDepth: 2
86
86
  })
87
87
  const mTableColumnItemList: SlotsToDataReturnItem[] = []
88
88
  slotDefaultData.forEach(item => {
@@ -151,27 +151,6 @@ const tableData = computed(() => {
151
151
  return true
152
152
  })
153
153
  })
154
- // const tableData = ref<Record<string, any>[]>([])
155
- // watch(
156
- // () => [props.data, props.filtersValue],
157
- // () => {
158
- // if (!Object.keys(props.filtersValue || {}).length) {
159
- // tableData.value = props.data
160
- // return
161
- // }
162
- // tableData.value = props.data.filter(item => {
163
- // for (const key in props.filtersValue) {
164
- // const node = props.filtersValue[key]
165
- // const colData = checkType(item[key]).isObject() || checkType(item[key]).isArray() ? JSON.stringify(item[key]) : item[key]
166
- // if (!node.includes(colData) && node.length) return false
167
- // }
168
- // return true
169
- // })
170
- // }, {
171
- // immediate: true,
172
- // deep: true
173
- // }
174
- // )
175
154
  const createHash = (hashLength: number = 24) => {
176
155
  return Array.from(Array(Number(hashLength) || 24), () => Math.floor(Math.random() * 36).toString(36)).join('')
177
156
  }
@@ -255,9 +234,13 @@ const cellClick = (row: any, column: { property: string; }, cell: any) => {
255
234
  selectionCellInfo.prop = column.property
256
235
  emit('update:selectionCell', isRepeatClick ? '' : column.property)
257
236
  }
237
+ const instance = getCurrentInstance()
258
238
  const disablePasteEvent = (e: { preventDefault: () => void; }) => {
239
+ const checkPaste = Boolean(instance?.vnode?.props?.onPasteData)
240
+ if (!checkPaste) return
259
241
  e.preventDefault()
260
242
  }
243
+
261
244
  const paste = (e: { clipboardData: any; }) => {
262
245
  internalData.value = JSON.parse(JSON.stringify(props.data))
263
246
  const clipdata = e.clipboardData