@gmfe/table-x 2.14.21-beta.1 → 2.14.26-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 (45) hide show
  1. package/LICENSE.md +4 -0
  2. package/README.md +13 -13
  3. package/package.json +4 -4
  4. package/src/base/index.js +142 -142
  5. package/src/base/td.js +56 -56
  6. package/src/base/th.js +48 -48
  7. package/src/base/thead.js +26 -26
  8. package/src/base/tr.js +53 -53
  9. package/src/base/virtualized.js +219 -219
  10. package/src/hoc/diy_table_x/components/diy_table_x_modal.js +135 -135
  11. package/src/hoc/diy_table_x/components/modal_list.js +78 -78
  12. package/src/hoc/diy_table_x/components/modal_selector.js +56 -56
  13. package/src/hoc/diy_table_x/index.js +196 -196
  14. package/src/hoc/edit_table_x.js +20 -20
  15. package/src/hoc/expand_table_x/index.js +140 -140
  16. package/src/hoc/expand_table_x/util.js +27 -27
  17. package/src/hoc/fixed_columns_table_x.js +29 -29
  18. package/src/hoc/select_table_x/cell.js +51 -51
  19. package/src/hoc/select_table_x/header.js +28 -28
  20. package/src/hoc/select_table_x/index.js +139 -139
  21. package/src/hoc/select_table_x/util.js +10 -10
  22. package/src/hoc/sortable_table_x.js +52 -52
  23. package/src/hoc/sub_table_x.js +44 -44
  24. package/src/index.js +53 -53
  25. package/src/index.less +515 -515
  26. package/src/stories/table_x.stories.js +324 -324
  27. package/src/stories/table_x_hoc.stories.js +427 -427
  28. package/src/stories/table_x_hoc_select_expand.stories.js +256 -256
  29. package/src/util/batch_action_bar.js +124 -124
  30. package/src/util/edit.js +83 -83
  31. package/src/util/index.js +191 -191
  32. package/src/util/operation.js +249 -249
  33. package/src/util/sort_header.js +49 -49
  34. package/src/variables.less +28 -28
  35. package/svg/business.svg +20 -20
  36. package/svg/check-detail.svg +18 -18
  37. package/svg/closeup.svg +20 -20
  38. package/svg/delete.svg +10 -10
  39. package/svg/edit-pen.svg +17 -17
  40. package/svg/empty.svg +27 -27
  41. package/svg/expand.svg +21 -21
  42. package/svg/pen.svg +12 -12
  43. package/svg/recover.svg +33 -33
  44. package/svg/remove.svg +1 -1
  45. 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
+ ))