@gmfe/table-x 2.14.17 → 2.14.19-beta.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 (44) hide show
  1. package/README.md +13 -13
  2. package/package.json +4 -4
  3. package/src/base/index.js +142 -142
  4. package/src/base/td.js +56 -56
  5. package/src/base/th.js +48 -48
  6. package/src/base/thead.js +26 -26
  7. package/src/base/tr.js +53 -53
  8. package/src/base/virtualized.js +219 -219
  9. package/src/hoc/diy_table_x/components/diy_table_x_modal.js +135 -135
  10. package/src/hoc/diy_table_x/components/modal_list.js +78 -78
  11. package/src/hoc/diy_table_x/components/modal_selector.js +56 -56
  12. package/src/hoc/diy_table_x/index.js +196 -196
  13. package/src/hoc/edit_table_x.js +20 -20
  14. package/src/hoc/expand_table_x/index.js +140 -140
  15. package/src/hoc/expand_table_x/util.js +27 -27
  16. package/src/hoc/fixed_columns_table_x.js +29 -29
  17. package/src/hoc/select_table_x/cell.js +51 -51
  18. package/src/hoc/select_table_x/header.js +28 -28
  19. package/src/hoc/select_table_x/index.js +139 -139
  20. package/src/hoc/select_table_x/util.js +10 -10
  21. package/src/hoc/sortable_table_x.js +52 -52
  22. package/src/hoc/sub_table_x.js +44 -44
  23. package/src/index.js +53 -53
  24. package/src/index.less +515 -515
  25. package/src/stories/table_x.stories.js +324 -324
  26. package/src/stories/table_x_hoc.stories.js +427 -427
  27. package/src/stories/table_x_hoc_select_expand.stories.js +256 -256
  28. package/src/util/batch_action_bar.js +124 -124
  29. package/src/util/edit.js +83 -83
  30. package/src/util/index.js +191 -191
  31. package/src/util/operation.js +249 -249
  32. package/src/util/sort_header.js +49 -49
  33. package/src/variables.less +28 -28
  34. package/svg/business.svg +20 -20
  35. package/svg/check-detail.svg +18 -18
  36. package/svg/closeup.svg +20 -20
  37. package/svg/delete.svg +10 -10
  38. package/svg/edit-pen.svg +17 -17
  39. package/svg/empty.svg +27 -27
  40. package/svg/expand.svg +21 -21
  41. package/svg/pen.svg +12 -12
  42. package/svg/recover.svg +33 -33
  43. package/svg/remove.svg +1 -1
  44. package/svg/setting.svg +17 -17
@@ -1,324 +1,324 @@
1
- import React from 'react'
2
- import { storiesOf } from '@storybook/react'
3
- import { TableX, TableXUtil } from '../index'
4
- import { observable } from 'mobx/lib/mobx'
5
- import moment from 'moment'
6
- import { observer } from 'mobx-react'
7
-
8
- const { SortHeader, EditButton, OperationHeader, OperationRecover, OperationCell, OperationDelete } = TableXUtil
9
-
10
- const sortDateTime = (a, b) => {
11
- const mA = moment(a)
12
- const mB = moment(b)
13
-
14
- if (mA > mB) {
15
- return 1
16
- } else if (mA < mB) {
17
- return -1
18
- } else {
19
- return 0
20
- }
21
- }
22
-
23
- const initData = [
24
- {
25
- total_money: 111,
26
- id: 'T5991-JHD-2018-07-25-00027',
27
- sku_money: '2390.00',
28
- supplier_customer_id: 'LDP20180117',
29
- submit_time: '2018-07-25',
30
- status: 2,
31
- supplier_name: '-',
32
- date_time: '2018-07-25',
33
- delta_money: 0,
34
- settle_supplier_id: 'T10953',
35
- address: {
36
- value: 33,
37
- text: '西乡fdsfsdf9'
38
- }
39
- },
40
- {
41
- total_money: 176,
42
- id: 'T5991-JHD-2018-07-25-00026',
43
- sku_money: '176.00',
44
- supplier_customer_id: 'A2926',
45
- submit_time: '2018-07-26',
46
- status: 2,
47
- supplier_name: '段虎',
48
- date_time: '2018-07-25',
49
- delta_money: 0,
50
- settle_supplier_id: 'T14319',
51
- address: {
52
- value: 9,
53
- text: '西乡9'
54
- }
55
- },
56
- {
57
- total_money: 279,
58
- id: 'T5991-JHD-2018-07-25-00025',
59
- sku_money: '279.02',
60
- supplier_customer_id: 'sc215',
61
- submit_time: '2018-07-27',
62
- status: 2,
63
- supplier_name: '黑市桥蔬菜批发',
64
- date_time: '2018-07-25',
65
- delta_money: -2.0,
66
- settle_supplier_id: 'T13324',
67
- address: {
68
- value: 4,
69
- text: '宝安'
70
- }
71
- },
72
- {
73
- total_money: 176,
74
- id: 'T5991-JHD-2018-07-25-00024',
75
- sku_money: '279.02',
76
- supplier_customer_id: 'sc215',
77
- submit_time: '2018-07-27',
78
- status: 2,
79
- supplier_name: '黑市桥蔬菜批发',
80
- date_time: '2018-07-25',
81
- delta_money: -2.0,
82
- settle_supplier_id: 'T13324',
83
- address: {
84
- value: 4,
85
- text: '宝安'
86
- }
87
- }
88
- ]
89
-
90
- const store = observable({
91
- data: initData.slice(),
92
- sortTimeType: null,
93
- setSortTime(type) {
94
- console.log(type)
95
- this.sortTimeType = type
96
-
97
- if (!type) {
98
- this.data = initData.slice()
99
- return
100
- }
101
-
102
- let newData = this.data.sort((a, b) => {
103
- return sortDateTime(a.submit_time, b.submit_time)
104
- })
105
-
106
- if (type === 'desc') {
107
- newData = newData.reverse()
108
- }
109
-
110
- this.data = newData
111
- }
112
- })
113
-
114
- const columns = [
115
- // 获取索引
116
- {
117
- Header: '序号',
118
- accessor: 'index',
119
- Cell: ({ row }) => row.index + 1,
120
- width: 50
121
- },
122
- // 常规用法
123
- {
124
- Header: '建单时间',
125
- accessor: 'submit_time',
126
- show: false
127
- },
128
- // accessor 有点用法
129
- {
130
- Header: '地址',
131
- accessor: 'address.text',
132
- width: 200, // 定宽
133
- maxWidth: 200
134
- },
135
- // accessor 是 func,需要提供 id
136
- {
137
- Header: '供应商信息',
138
- accessor: data => data.supplier_name,
139
- id: 'supplier_name'
140
- },
141
- // 自定义整个单元格
142
- {
143
- Header: '入库金额2',
144
- accessor: 'total_money',
145
- Cell: cellProps => {
146
- const { row } = cellProps
147
- return <div>{row.original.total_money}</div>
148
- }
149
- },
150
- {
151
- Header: OperationHeader,
152
- accessor: 'operator',
153
- Cell: cellProps => (
154
- <OperationCell>
155
- <OperationRecover
156
- title='确认恢复'
157
- onClick={() => store.deleteItemByID(cellProps.original.id)}
158
- >
159
- 恢复这个很危险! 确定?
160
- </OperationRecover>
161
- </OperationCell>
162
- )
163
- }
164
- ]
165
-
166
- const editColumns = [
167
- {
168
- id: 'name',
169
- Header: '名字',
170
- Cell: () => (
171
- <div>
172
- <input type='text' />
173
- <EditButton popupRender={() => <div>lalala</div>} />
174
- </div>
175
- )
176
- },
177
- {
178
- id: 'age',
179
- Header: '年龄',
180
- Cell: () => (
181
- <div>
182
- <input type='text' />
183
- <EditButton
184
- popupRender={() => (
185
- <div>lalala123j4123;lk4j;132lkj4;lk12j34;lk123j;4lkj123;l4kj;</div>
186
- )}
187
- />
188
- </div>
189
- )
190
- }
191
- ]
192
-
193
- const groupColumns = [
194
- {
195
- Header: '序号',
196
- columns: [
197
- {
198
- Header: '序号',
199
- accessor: 'index',
200
- Cell: ({ row }) => row.index + 1
201
- }
202
- ]
203
- },
204
- {
205
- Header: '其他信息',
206
- columns: [
207
- {
208
- Header: '建单时间',
209
- accessor: 'submit_time',
210
- show: false
211
- },
212
- // accessor 有点用法
213
-
214
- // 自定义整个单元格
215
- {
216
- Header: '入库金额',
217
- accessor: 'total_money',
218
- Cell: cellProps => {
219
- const { row } = cellProps
220
- return <div>{row.original.total_money}</div>
221
- }
222
- }
223
- ]
224
- },
225
- {
226
- Header: '供应商信息',
227
- columns: [
228
- {
229
- Header: '地址',
230
- accessor: 'address.text',
231
- width: 200 // 定宽
232
- },
233
- // accessor 是 func,需要提供 id
234
- {
235
- Header: '供应商信息',
236
- accessor: data => data.supplier_name,
237
- id: 'supplier_name'
238
- }
239
- ]
240
- }
241
- ]
242
-
243
- const sortColumnsBackEnd = [
244
- {
245
- Header: observer(() => (
246
- <div>
247
- 建单时间
248
- <SortHeader
249
- type={store.sortTimeType}
250
- onChange={type => store.setSortTime(type)}
251
- />
252
- </div>
253
- )),
254
- accessor: 'submit_time'
255
- },
256
- {
257
- Header: '供应商信息',
258
- accessor: data => data.supplier_name,
259
- id: 'supplier_name'
260
- },
261
- {
262
- Header: '入库金额',
263
- accessor: 'total_money',
264
- Cell: cellProps => {
265
- const { row } = cellProps
266
- return <div>{row.original.total_money}</div>
267
- }
268
- }
269
- ]
270
-
271
- storiesOf('TableX|TableX', module)
272
- .add('说明', () => <div />, {
273
- info: {
274
- text: `
275
- react-table 文档见 https://github.com/tannerlinsley/react-table
276
-
277
- 用法见 story 源码,不要用 story 之外的,如果有,联系我补充 story。
278
-
279
- 较 Table 新增
280
- - hoc select 增加 fixedSelect, hoc expand fixedExpand 用来固定
281
- - 其他 hoc, sortableTableXHOC
282
- - TableXVirtualized
283
-
284
- Table 切 TableX 关注点:
285
- - Cell 不提供 index original,即 Cell: ({index, original}) => () 不 work,用 Cell: ({ row }) => (row.index row.original)
286
- - 取消单元格没内容显示 -
287
- - fixedColumn column 可以不提供 width
288
- - selectTable 废弃 onSelectAll ,因为没有意义
289
- - OperationHeader 是一个组件
290
- - EditTableOperation 换成 EditOperation
291
- - 宽度常量收归到 TableUtil.TABLE_X
292
- `
293
- }
294
- })
295
- .add('default', () => <TableX data={store.data} columns={columns} />)
296
- .add('group', () => <TableX data={store.data} columns={groupColumns} />)
297
- .add('loading & nodata & tiled', () => (
298
- <div>
299
- <TableX loading data={store.data} columns={columns} />
300
- <TableX data={[]} columns={columns} />
301
- <TableX data={[]} columns={columns} className='gm-margin-10' tiled />
302
- </div>
303
- ))
304
- .add('排序', () => (
305
- <TableX data={store.data.slice()} columns={sortColumnsBackEnd} />
306
- ))
307
- .add('limit height', () => (
308
- <TableX
309
- data={store.data}
310
- columns={columns}
311
- style={{
312
- height: '200px'
313
- }}
314
- />
315
- ))
316
- .add('edit button', () => <TableX data={store.data} columns={editColumns} />)
317
- .add('isTrDisable && isTrHighlight', () => (
318
- <TableX
319
- data={store.data}
320
- columns={columns}
321
- isTrDisable={(item, index) => index % 2 === 0}
322
- isTrHighlight={(item, index) => index === 0}
323
- />
324
- ))
1
+ import React from 'react'
2
+ import { storiesOf } from '@storybook/react'
3
+ import { TableX, TableXUtil } from '../index'
4
+ import { observable } from 'mobx/lib/mobx'
5
+ import moment from 'moment'
6
+ import { observer } from 'mobx-react'
7
+
8
+ const { SortHeader, EditButton, OperationHeader, OperationRecover, OperationCell, OperationDelete } = TableXUtil
9
+
10
+ const sortDateTime = (a, b) => {
11
+ const mA = moment(a)
12
+ const mB = moment(b)
13
+
14
+ if (mA > mB) {
15
+ return 1
16
+ } else if (mA < mB) {
17
+ return -1
18
+ } else {
19
+ return 0
20
+ }
21
+ }
22
+
23
+ const initData = [
24
+ {
25
+ total_money: 111,
26
+ id: 'T5991-JHD-2018-07-25-00027',
27
+ sku_money: '2390.00',
28
+ supplier_customer_id: 'LDP20180117',
29
+ submit_time: '2018-07-25',
30
+ status: 2,
31
+ supplier_name: '-',
32
+ date_time: '2018-07-25',
33
+ delta_money: 0,
34
+ settle_supplier_id: 'T10953',
35
+ address: {
36
+ value: 33,
37
+ text: '西乡fdsfsdf9'
38
+ }
39
+ },
40
+ {
41
+ total_money: 176,
42
+ id: 'T5991-JHD-2018-07-25-00026',
43
+ sku_money: '176.00',
44
+ supplier_customer_id: 'A2926',
45
+ submit_time: '2018-07-26',
46
+ status: 2,
47
+ supplier_name: '段虎',
48
+ date_time: '2018-07-25',
49
+ delta_money: 0,
50
+ settle_supplier_id: 'T14319',
51
+ address: {
52
+ value: 9,
53
+ text: '西乡9'
54
+ }
55
+ },
56
+ {
57
+ total_money: 279,
58
+ id: 'T5991-JHD-2018-07-25-00025',
59
+ sku_money: '279.02',
60
+ supplier_customer_id: 'sc215',
61
+ submit_time: '2018-07-27',
62
+ status: 2,
63
+ supplier_name: '黑市桥蔬菜批发',
64
+ date_time: '2018-07-25',
65
+ delta_money: -2.0,
66
+ settle_supplier_id: 'T13324',
67
+ address: {
68
+ value: 4,
69
+ text: '宝安'
70
+ }
71
+ },
72
+ {
73
+ total_money: 176,
74
+ id: 'T5991-JHD-2018-07-25-00024',
75
+ sku_money: '279.02',
76
+ supplier_customer_id: 'sc215',
77
+ submit_time: '2018-07-27',
78
+ status: 2,
79
+ supplier_name: '黑市桥蔬菜批发',
80
+ date_time: '2018-07-25',
81
+ delta_money: -2.0,
82
+ settle_supplier_id: 'T13324',
83
+ address: {
84
+ value: 4,
85
+ text: '宝安'
86
+ }
87
+ }
88
+ ]
89
+
90
+ const store = observable({
91
+ data: initData.slice(),
92
+ sortTimeType: null,
93
+ setSortTime(type) {
94
+ console.log(type)
95
+ this.sortTimeType = type
96
+
97
+ if (!type) {
98
+ this.data = initData.slice()
99
+ return
100
+ }
101
+
102
+ let newData = this.data.sort((a, b) => {
103
+ return sortDateTime(a.submit_time, b.submit_time)
104
+ })
105
+
106
+ if (type === 'desc') {
107
+ newData = newData.reverse()
108
+ }
109
+
110
+ this.data = newData
111
+ }
112
+ })
113
+
114
+ const columns = [
115
+ // 获取索引
116
+ {
117
+ Header: '序号',
118
+ accessor: 'index',
119
+ Cell: ({ row }) => row.index + 1,
120
+ width: 50
121
+ },
122
+ // 常规用法
123
+ {
124
+ Header: '建单时间',
125
+ accessor: 'submit_time',
126
+ show: false
127
+ },
128
+ // accessor 有点用法
129
+ {
130
+ Header: '地址',
131
+ accessor: 'address.text',
132
+ width: 200, // 定宽
133
+ maxWidth: 200
134
+ },
135
+ // accessor 是 func,需要提供 id
136
+ {
137
+ Header: '供应商信息',
138
+ accessor: data => data.supplier_name,
139
+ id: 'supplier_name'
140
+ },
141
+ // 自定义整个单元格
142
+ {
143
+ Header: '入库金额2',
144
+ accessor: 'total_money',
145
+ Cell: cellProps => {
146
+ const { row } = cellProps
147
+ return <div>{row.original.total_money}</div>
148
+ }
149
+ },
150
+ {
151
+ Header: OperationHeader,
152
+ accessor: 'operator',
153
+ Cell: cellProps => (
154
+ <OperationCell>
155
+ <OperationRecover
156
+ title='确认恢复'
157
+ onClick={() => store.deleteItemByID(cellProps.original.id)}
158
+ >
159
+ 恢复这个很危险! 确定?
160
+ </OperationRecover>
161
+ </OperationCell>
162
+ )
163
+ }
164
+ ]
165
+
166
+ const editColumns = [
167
+ {
168
+ id: 'name',
169
+ Header: '名字',
170
+ Cell: () => (
171
+ <div>
172
+ <input type='text' />
173
+ <EditButton popupRender={() => <div>lalala</div>} />
174
+ </div>
175
+ )
176
+ },
177
+ {
178
+ id: 'age',
179
+ Header: '年龄',
180
+ Cell: () => (
181
+ <div>
182
+ <input type='text' />
183
+ <EditButton
184
+ popupRender={() => (
185
+ <div>lalala123j4123;lk4j;132lkj4;lk12j34;lk123j;4lkj123;l4kj;</div>
186
+ )}
187
+ />
188
+ </div>
189
+ )
190
+ }
191
+ ]
192
+
193
+ const groupColumns = [
194
+ {
195
+ Header: '序号',
196
+ columns: [
197
+ {
198
+ Header: '序号',
199
+ accessor: 'index',
200
+ Cell: ({ row }) => row.index + 1
201
+ }
202
+ ]
203
+ },
204
+ {
205
+ Header: '其他信息',
206
+ columns: [
207
+ {
208
+ Header: '建单时间',
209
+ accessor: 'submit_time',
210
+ show: false
211
+ },
212
+ // accessor 有点用法
213
+
214
+ // 自定义整个单元格
215
+ {
216
+ Header: '入库金额',
217
+ accessor: 'total_money',
218
+ Cell: cellProps => {
219
+ const { row } = cellProps
220
+ return <div>{row.original.total_money}</div>
221
+ }
222
+ }
223
+ ]
224
+ },
225
+ {
226
+ Header: '供应商信息',
227
+ columns: [
228
+ {
229
+ Header: '地址',
230
+ accessor: 'address.text',
231
+ width: 200 // 定宽
232
+ },
233
+ // accessor 是 func,需要提供 id
234
+ {
235
+ Header: '供应商信息',
236
+ accessor: data => data.supplier_name,
237
+ id: 'supplier_name'
238
+ }
239
+ ]
240
+ }
241
+ ]
242
+
243
+ const sortColumnsBackEnd = [
244
+ {
245
+ Header: observer(() => (
246
+ <div>
247
+ 建单时间
248
+ <SortHeader
249
+ type={store.sortTimeType}
250
+ onChange={type => store.setSortTime(type)}
251
+ />
252
+ </div>
253
+ )),
254
+ accessor: 'submit_time'
255
+ },
256
+ {
257
+ Header: '供应商信息',
258
+ accessor: data => data.supplier_name,
259
+ id: 'supplier_name'
260
+ },
261
+ {
262
+ Header: '入库金额',
263
+ accessor: 'total_money',
264
+ Cell: cellProps => {
265
+ const { row } = cellProps
266
+ return <div>{row.original.total_money}</div>
267
+ }
268
+ }
269
+ ]
270
+
271
+ storiesOf('TableX|TableX', module)
272
+ .add('说明', () => <div />, {
273
+ info: {
274
+ text: `
275
+ react-table 文档见 https://github.com/tannerlinsley/react-table
276
+
277
+ 用法见 story 源码,不要用 story 之外的,如果有,联系我补充 story。
278
+
279
+ 较 Table 新增
280
+ - hoc select 增加 fixedSelect, hoc expand fixedExpand 用来固定
281
+ - 其他 hoc, sortableTableXHOC
282
+ - TableXVirtualized
283
+
284
+ Table 切 TableX 关注点:
285
+ - Cell 不提供 index original,即 Cell: ({index, original}) => () 不 work,用 Cell: ({ row }) => (row.index row.original)
286
+ - 取消单元格没内容显示 -
287
+ - fixedColumn column 可以不提供 width
288
+ - selectTable 废弃 onSelectAll ,因为没有意义
289
+ - OperationHeader 是一个组件
290
+ - EditTableOperation 换成 EditOperation
291
+ - 宽度常量收归到 TableUtil.TABLE_X
292
+ `
293
+ }
294
+ })
295
+ .add('default', () => <TableX data={store.data} columns={columns} />)
296
+ .add('group', () => <TableX data={store.data} columns={groupColumns} />)
297
+ .add('loading & nodata & tiled', () => (
298
+ <div>
299
+ <TableX loading data={store.data} columns={columns} />
300
+ <TableX data={[]} columns={columns} />
301
+ <TableX data={[]} columns={columns} className='gm-margin-10' tiled />
302
+ </div>
303
+ ))
304
+ .add('排序', () => (
305
+ <TableX data={store.data.slice()} columns={sortColumnsBackEnd} />
306
+ ))
307
+ .add('limit height', () => (
308
+ <TableX
309
+ data={store.data}
310
+ columns={columns}
311
+ style={{
312
+ height: '200px'
313
+ }}
314
+ />
315
+ ))
316
+ .add('edit button', () => <TableX data={store.data} columns={editColumns} />)
317
+ .add('isTrDisable && isTrHighlight', () => (
318
+ <TableX
319
+ data={store.data}
320
+ columns={columns}
321
+ isTrDisable={(item, index) => index % 2 === 0}
322
+ isTrHighlight={(item, index) => index === 0}
323
+ />
324
+ ))