@bit-sun/business-component 4.0.11-alpha.1 → 4.0.11-alpha.10

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 (31) hide show
  1. package/.umirc.ts +10 -6
  2. package/dist/components/Business/SearchSelect/BusinessUtils.d.ts +2 -1
  3. package/dist/components/Functional/SearchSelect/utils.d.ts +7 -0
  4. package/dist/index.esm.js +1590 -987
  5. package/dist/index.js +1589 -986
  6. package/package.json +1 -1
  7. package/src/assets/copyImg.svg +16 -0
  8. package/src/assets/zhankaitiaojian-icon.svg +18 -0
  9. package/src/components/Business/BsLayouts/index.tsx +17 -0
  10. package/src/components/Business/BsSulaQueryTable/index.tsx +17 -15
  11. package/src/components/Business/BsSulaQueryTable/utils.tsx +1 -1
  12. package/src/components/Business/DetailPageWrapper/index.less +1 -2
  13. package/src/components/Business/SearchSelect/BusinessUtils.tsx +774 -160
  14. package/src/components/Business/SearchSelect/index.md +180 -0
  15. package/src/components/Business/SearchSelect/index.tsx +2 -1
  16. package/src/components/Business/SearchSelect/utils.ts +4 -1
  17. package/src/components/Business/StateFlow/index.less +140 -124
  18. package/src/components/Business/StateFlow/index.tsx +3 -3
  19. package/src/components/Business/columnSettingTable/columnSetting.tsx +1 -1
  20. package/src/components/Business/columnSettingTable/index.tsx +3 -4
  21. package/src/components/Business/columnSettingTable/sulaSettingTable.tsx +3 -5
  22. package/src/components/Common/ParagraphCopier/index.tsx +2 -6
  23. package/src/components/Functional/QueryMutipleInput/index.less +51 -19
  24. package/src/components/Functional/QueryMutipleInput/index.tsx +26 -22
  25. package/src/components/Functional/SearchSelect/index.less +220 -74
  26. package/src/components/Functional/SearchSelect/index.tsx +264 -217
  27. package/src/components/Functional/SearchSelect/utils.ts +24 -0
  28. package/src/components/Solution/RuleComponent/index.js +4 -3
  29. package/src/components/Solution/RuleSetter/function.ts +2 -1
  30. package/src/styles/bsDefault.less +2 -13
  31. package/src/utils/TableUtils.tsx +1 -1
@@ -146,6 +146,11 @@ export default () => {
146
146
  // prefixUrl: { selectPrefix: '/bop/api', formSelectFix: '/bop/api' },
147
147
  selectProps,
148
148
  selectBusinessType: 'skuCommodity',
149
+ onSaveCallback: (rows) => {
150
+ console.log('save call', rows);
151
+ return Promise.resolve(true);
152
+ // return Promise.reject('FAILE')
153
+ }
149
154
  };
150
155
 
151
156
  const onTabChange = (key) => {
@@ -1393,6 +1398,123 @@ export default () => {
1393
1398
  };
1394
1399
  ```
1395
1400
 
1401
+
1402
+ ## 销售渠道选择器 Select-MARKET-CHANNEL-001
1403
+
1404
+ ```tsx
1405
+ import React, { useState } from 'react';
1406
+ import { Tabs } from 'antd';
1407
+ import {BusinessSearchSelect} from '../../../index.ts';
1408
+
1409
+ const { TabPane } = Tabs;
1410
+
1411
+ export default () => {
1412
+ const selectProps = {
1413
+ // mode: 'multiple',
1414
+ // maxTagCount: 1,
1415
+ // disabled: true
1416
+ }
1417
+ const selectPropsMultiple = {
1418
+ mode: 'multiple',
1419
+ maxTagCount: 1,
1420
+ }
1421
+
1422
+ const [ tabKey, setTabKey ] = useState('single')
1423
+ const [value, setValue] = useState(selectProps?.mode ? [] : null);
1424
+
1425
+ const props = {
1426
+ value,
1427
+ onChange: (value: any) => {
1428
+ console.log(value)
1429
+ setValue(value)
1430
+ },
1431
+ selectProps,
1432
+ selectBusinessType: 'market-channel',
1433
+ };
1434
+
1435
+ const onTabChange = (key) => {
1436
+ setTabKey(key)
1437
+ setValue(key === 'single' ? null: [])
1438
+ }
1439
+
1440
+ return (
1441
+ <div>
1442
+ <Tabs onChange={onTabChange} activeKey={tabKey}>
1443
+ <TabPane tab='单选' key='single'>
1444
+ {tabKey === 'single' && (
1445
+ <BusinessSearchSelect {...props} />
1446
+ )}
1447
+ </TabPane>
1448
+ <TabPane tab='多选' key='multiple'>
1449
+ {tabKey === 'multiple' && (
1450
+ <BusinessSearchSelect {...props} selectProps={selectPropsMultiple} />
1451
+ )}
1452
+ </TabPane>
1453
+ </Tabs>
1454
+ </div>
1455
+ );
1456
+ };
1457
+ ```
1458
+
1459
+
1460
+ ## 业务组织选择器 Select-BUSINESS-ORGANIZATION-001
1461
+
1462
+ ```tsx
1463
+ import React, { useState } from 'react';
1464
+ import { Tabs } from 'antd';
1465
+ import {BusinessSearchSelect} from '../../../index.ts';
1466
+
1467
+ const { TabPane } = Tabs;
1468
+
1469
+ export default () => {
1470
+ const selectProps = {
1471
+ // mode: 'multiple',
1472
+ // maxTagCount: 1,
1473
+ // disabled: true
1474
+ }
1475
+ const selectPropsMultiple = {
1476
+ mode: 'multiple',
1477
+ maxTagCount: 1,
1478
+ }
1479
+
1480
+ const [ tabKey, setTabKey ] = useState('single')
1481
+ const [value, setValue] = useState(selectProps?.mode ? [] : null);
1482
+
1483
+ const props = {
1484
+ value,
1485
+ onChange: (value: any) => {
1486
+ console.log(value)
1487
+ setValue(value)
1488
+ },
1489
+ selectProps,
1490
+ selectBusinessType: 'business-organization',
1491
+ };
1492
+
1493
+ const onTabChange = (key) => {
1494
+ setTabKey(key)
1495
+ setValue(key === 'single' ? null: [])
1496
+ }
1497
+
1498
+ return (
1499
+ <div>
1500
+ <Tabs onChange={onTabChange} activeKey={tabKey}>
1501
+ <TabPane tab='单选' key='single'>
1502
+ {tabKey === 'single' && (
1503
+ <BusinessSearchSelect {...props} />
1504
+ )}
1505
+ </TabPane>
1506
+ <TabPane tab='多选' key='multiple'>
1507
+ {tabKey === 'multiple' && (
1508
+ <BusinessSearchSelect {...props} selectProps={selectPropsMultiple} />
1509
+ )}
1510
+ </TabPane>
1511
+ </Tabs>
1512
+ </div>
1513
+ );
1514
+ };
1515
+ ```
1516
+
1517
+
1396
1518
  ## 人员选择器 Select-PERSON-001
1397
1519
 
1398
1520
  ```tsx
@@ -1567,4 +1689,62 @@ export default () => {
1567
1689
  ```
1568
1690
 
1569
1691
 
1692
+ ## 销售组织选择器 Select-SALES-ORGANIZATION-001
1693
+
1694
+ ```tsx
1695
+ import React, { useState } from 'react';
1696
+ import { Tabs } from 'antd';
1697
+ import {BusinessSearchSelect} from '../../../index.ts';
1698
+
1699
+ const { TabPane } = Tabs;
1700
+
1701
+ export default () => {
1702
+ const selectProps = {
1703
+ // mode: 'multiple',
1704
+ // maxTagCount: 1,
1705
+ // disabled: true
1706
+ }
1707
+ const selectPropsMultiple = {
1708
+ mode: 'multiple',
1709
+ maxTagCount: 1,
1710
+ }
1711
+
1712
+ const [ tabKey, setTabKey ] = useState('single')
1713
+ const [value, setValue] = useState(selectProps?.mode ? [] : null);
1714
+
1715
+ const props = {
1716
+ value,
1717
+ onChange: (value: any) => {
1718
+ console.log(value)
1719
+ setValue(value)
1720
+ },
1721
+ selectProps,
1722
+ selectBusinessType: 'sales-organization',
1723
+ };
1724
+
1725
+ const onTabChange = (key) => {
1726
+ setTabKey(key)
1727
+ setValue(key === 'single' ? null: [])
1728
+ }
1729
+
1730
+ return (
1731
+ <div>
1732
+ <Tabs onChange={onTabChange} activeKey={tabKey}>
1733
+ <TabPane tab='单选' key='single'>
1734
+ {tabKey === 'single' && (
1735
+ <BusinessSearchSelect {...props} />
1736
+ )}
1737
+ </TabPane>
1738
+ <TabPane tab='多选' key='multiple'>
1739
+ {tabKey === 'multiple' && (
1740
+ <BusinessSearchSelect {...props} selectProps={selectPropsMultiple} />
1741
+ )}
1742
+ </TabPane>
1743
+ </Tabs>
1744
+ </div>
1745
+ );
1746
+ };
1747
+ ```
1748
+
1749
+
1570
1750
  More skills for writing demo: https://d.umijs.org/guide/demo-principle
@@ -17,10 +17,11 @@ const BusinessSearchSelect = forwardRef((props: any, ref: any) => {
17
17
  const prefixUrl = props?.prefixUrl || { selectPrefix: handleDefaultPrefixUrl(businessType), formSelectFix: handleDefaultPrefixUrl(businessType) };
18
18
  const innerRef = useRef();
19
19
 
20
- const { requestConfig, modalTableProps, needModalTable } = commonFun(businessType, prefixUrl, props?.requestConfig || {}, props?.modalTableProps || {}, props?.hiddenFields || [] );
20
+ const { requestConfig, selectProps, modalTableProps, needModalTable } = commonFun(businessType, prefixUrl, props);
21
21
  const currentProps = useMemo(() => {
22
22
  return {
23
23
  ...props,
24
+ selectProps,
24
25
  requestConfig,
25
26
  needModalTable,
26
27
  modalTableProps
@@ -76,7 +76,7 @@ const loadSelectSource = (url: string, params?: any) => {
76
76
  const handleDefaultPrefixUrl = (type: string) => {
77
77
  let result;
78
78
  switch (type){
79
- case 'supplier2': case 'customer2': case 'shopFile2': case 'platCompany':
79
+ case 'supplier2': case 'customer2': case 'shopFile2': case 'platCompany': case 'market-channel':
80
80
  result = '/channel-manage';
81
81
  break;
82
82
  case 'skuCommodity': case 'skuPropertyValue': case 'spuCommodity': case 'skcCommodity': case 'brand':
@@ -91,6 +91,9 @@ const handleDefaultPrefixUrl = (type: string) => {
91
91
  case 'deliveryMode': case 'ruleTemplate': case 'priceItem':
92
92
  result = '/basic';
93
93
  break;
94
+ case 'sales-organization': case 'business-organization':
95
+ result = '/drp-ops';
96
+ break;
94
97
  default:
95
98
  result = '/bop/api';
96
99
  break
@@ -1,131 +1,147 @@
1
- .form-status-label {
2
- height: 48px;
3
- margin-right: 12px;
4
- // flex-grow: 1;
5
- // flex-shrink: 1;
6
- display: inline-block;
7
- position: relative;
8
- background-color: #B0B4B7;
9
- align-items: center;
10
- }
11
- .choosed-status-label.form-status-label {
12
- background-color: #005CFF;
13
- }
14
-
15
- .form-status-label:last-child {
16
- margin-right: 0px;
17
- }
18
-
19
- .form-status-label:first-child::after {
20
- position: absolute;
21
- display: block;
22
- content: '';
23
- right: -48px;
24
- top: 0;
25
- width: 48px;
26
- height: 48px;
27
- border: 24px solid;
28
- border-color: transparent transparent transparent transparent;
29
- border-left: 12px solid #B0B4B7;
30
- }
31
-
32
- .choosed-status-label.form-status-label::after {
33
- border-left: 12px solid #005CFF;
34
- }
35
-
36
- .choosed-status-label.form-status-label:not(:first-child):not(:last-child)::after {
37
- border-left: 12px solid #005CFF;
38
- }
39
-
40
- .form-status-label:last-child::after {
41
- position: absolute;
42
- display: block;
43
- content: '';
44
- left: 0;
45
- top: 0;
46
- width: 48px;
47
- height: 48px;
48
- border: 24px solid;
49
- border-color: transparent transparent transparent transparent;
50
- border-left: 12px solid #ffffff;
51
- }
52
-
53
- .form-status-label:not(:first-child):not(:last-child)::before {
54
- position: absolute;
55
- display: block;
56
- content: '';
57
- left: 0;
58
- top: 0;
59
- width: 48px;
60
- height: 48px;
61
- border: 24px solid;
62
- border-color: transparent transparent transparent transparent;
63
- border-left: 12px solid #ffffff;
64
- }
65
-
66
- .form-status-label:not(:first-child):not(:last-child)::after {
67
- position: absolute;
68
- display: block;
69
- content: '';
70
- right: -48px;
71
- top: 0;
72
- width: 48px;
73
- height: 48px;
74
- border: 24px solid;
75
- border-color: transparent transparent transparent transparent;
76
- border-left: 12px solid #B0B4B7;
77
- }
78
-
79
- .status-label-index {
80
- display: inline-block;
81
- width: 24px;
82
- height: 24px;
83
- border: 1px solid #FFFFFF;
84
- color: #FFFFFF;
85
- border-radius: 50%;
86
- font-family: Montserrat;
87
- font-size: 14px;line-height: 24px;
88
- text-align: center;
89
- margin: 0 6px 0 20px;
90
- }
91
-
92
- .status-label-key {
93
- width: 50px;
94
- height: 100%;
95
- display: inline-flex;
96
- float: left;
97
- // flex-grow: 0;
98
- // flex-shrink: 0;
99
- align-items: center;
100
- justify-content: center;
101
- }
102
-
103
- .status-label-operate {
104
- // flex-grow: 1;
105
- // flex-shrink: 1;
106
- float: left;
107
- width: calc(100% - 50px);
108
- overflow: hidden;
109
- text-overflow: ellipsis;
110
- white-space: nowrap;
111
- height: 100%;
112
- margin: 4px 0;
113
- &>div {
114
- font-size: 12px;
115
- height: 20px;
116
- line-height: 20px;
1
+ .state-flow {
2
+ .form-status-label {
3
+ height: 28px;
4
+ margin-right: 12px;
5
+ // flex-grow: 1;
6
+ // flex-shrink: 1;
7
+ display: inline-block;
8
+ position: relative;
9
+ background-color: #B0B4B7;
10
+ align-items: center;
11
+ }
12
+ .choosed-status-label.form-status-label {
13
+ background-color: #005CFF;
14
+ }
15
+
16
+ .form-status-label:last-child {
17
+ margin-right: 0px;
18
+ }
19
+
20
+ .form-status-label:first-child::after {
21
+ position: absolute;
22
+ display: block;
23
+ content: '';
24
+ right: -28px;
25
+ top: 0;
26
+ width: 28px;
27
+ height: 28px;
28
+ border: 14px solid;
29
+ border-color: transparent transparent transparent transparent;
30
+ border-left: 12px solid #B0B4B7;
31
+ }
32
+
33
+ .choosed-status-label.form-status-label::after {
34
+ border-left: 12px solid #005CFF;
35
+ }
36
+
37
+ .choosed-status-label.form-status-label:not(:first-child):not(:last-child)::after {
38
+ border-left: 12px solid #005CFF;
39
+ }
40
+
41
+ .form-status-label:last-child::after {
42
+ position: absolute;
43
+ display: block;
44
+ content: '';
45
+ left: 0;
46
+ top: 0;
47
+ width: 28px;
48
+ height: 28px;
49
+ border: 14px solid;
50
+ border-color: transparent transparent transparent transparent;
51
+ border-left: 12px solid #ffffff;
52
+ }
53
+
54
+ .form-status-label:first-child {
55
+ padding-left: 10px;
56
+ }
57
+
58
+ .form-status-label:not(:first-child) {
59
+ padding-left: 15px;
60
+ }
61
+
62
+ .form-status-label:not(:first-child):not(:last-child)::before {
63
+ position: absolute;
64
+ display: block;
65
+ content: '';
66
+ left: 0;
67
+ top: 0;
68
+ width: 28px;
69
+ height: 28px;
70
+ border: 14px solid;
71
+ border-color: transparent transparent transparent transparent;
72
+ border-left: 12px solid #ffffff;
73
+ }
74
+
75
+ .form-status-label:not(:first-child):not(:last-child)::after {
76
+ position: absolute;
77
+ display: block;
78
+ content: '';
79
+ right: -28px;
80
+ top: 0;
81
+ width: 28px;
82
+ height: 28px;
83
+ border: 14px solid;
84
+ border-color: transparent transparent transparent transparent;
85
+ border-left: 12px solid #B0B4B7;
86
+ }
87
+
88
+ .status-label-index {
89
+ display: inline-block;
90
+ width: 24px;
91
+ height: 24px;
92
+ border: 1px solid #FFFFFF;
93
+ color: #FFFFFF;
94
+ border-radius: 50%;
95
+ font-family: Montserrat;
96
+ font-size: 14px;line-height: 24px;
97
+ text-align: center;
98
+ margin: 0 6px 0 20px;
99
+ }
100
+
101
+ .status-label-key {
102
+ width: auto;
103
+ height: 100%;
104
+ display: inline-flex;
105
+ float: left;
106
+ // flex-grow: 0;
107
+ // flex-shrink: 0;
108
+ align-items: center;
109
+ justify-content: center;
117
110
  color: #FFFFFF;
118
- font-family: PingFangSC;
111
+ font-size: 14px;
112
+ }
113
+
114
+ .status-label-operate {
115
+ // flex-grow: 1;
116
+ // flex-shrink: 1;
117
+ float: left;
119
118
  overflow: hidden;
120
119
  text-overflow: ellipsis;
121
120
  white-space: nowrap;
121
+ height: 12px;
122
+ margin: 8px 0;
123
+ margin-left: 8px;
124
+ padding-left: 8px;
125
+ font-size: 10px;
126
+ border-left: 1px solid #FFFFFF;
127
+
128
+ &>div {
129
+ font-size: 12px;
130
+ height: 12px;
131
+ line-height: 12px;
132
+ color: #FFFFFF;
133
+ font-family: PingFangSC;
134
+ overflow: hidden;
135
+ text-overflow: ellipsis;
136
+ white-space: nowrap;
137
+ }
138
+ &>div:first-child {
139
+ font-size: 10px;
140
+ font-weight: 400;
141
+ }
122
142
  }
123
- &>div:first-child {
124
- font-size: 14px;
125
- font-weight: 600;
143
+
144
+ .only-one-child.form-status-label::after,.only-one-child.form-status-label::before {
145
+ border-left: 0px;
126
146
  }
127
- }
128
-
129
- .only-one-child.form-status-label::after,.only-one-child.form-status-label::before {
130
- border-left: 0px;
131
147
  }
@@ -4,16 +4,16 @@ import './index.less'
4
4
  export default (props: any) => {
5
5
  const { formStatusMapping = [] } = props;
6
6
  return (
7
- <div style={{display: 'flex', padding: '10px 60px 0px', background: '#FFFFFF'}}>
7
+ <div className="state-flow" style={{display: 'flex', padding: '10px 60px 0px', background: '#FFFFFF'}}>
8
8
  {
9
9
  formStatusMapping.map((item:any, index:number) => {
10
10
  return (
11
11
  <div style={{width: `${(100/formStatusMapping.length).toFixed(2)}%`}} className={`form-status-label ${item.isDone ? 'choosed-status-label' : ''} ${formStatusMapping.length === 1 ? 'only-one-child' : ''}`}>
12
12
  <div className='status-label-key'>
13
- <span className='status-label-index'>{index+1}</span>
13
+ <div style={!item.isDone ? {height: '40px', lineHeight: '40px'} : {}}>{item.text}</div>
14
14
  </div>
15
15
  <div className='status-label-operate'>
16
- <div style={!item.isDone ? {height: '40px', lineHeight: '40px'} : {}}>{item.text}</div>
16
+
17
17
  {
18
18
  item.isDone ? (
19
19
  <div title={`${item.modifyUserName || '--'} ${item.modifyTime || '--'}`}>{`${item.modifyUserName || '--'} ${item.modifyTime || '--'}`}</div>
@@ -859,7 +859,7 @@ class SortableTable extends React.Component<SortTableProps> {
859
859
  </div>
860
860
  </Modal>}
861
861
  <Tooltip title="列设置">
862
- <img width={32} onClick={this.showModal} src={shezhi} />
862
+ <div style={{background: '#f7f8fb'}}><img width={24} onClick={this.showModal} src={shezhi} /></div>
863
863
  </Tooltip>
864
864
  </div>
865
865
  );
@@ -204,9 +204,8 @@ export default class ColumnSettingTable extends React.Component {
204
204
  summary: showSummary,
205
205
  }
206
206
  return (
207
- <div>
208
- <div style={{ overflow: 'hidden', padding: '0 8px 10px 0' }}>
209
- <span style={{ float: 'right' }} className="ant-dropdown-link">
207
+ <div style={{ position: 'relative' }}>
208
+ <span style={{ position: 'absolute', zIndex: '10', right: '8px', top: '1px' }} className="ant-dropdown-link">
210
209
  <ColumnSetting
211
210
  setShowColumns={this.setShowColumns}
212
211
  showColumns={this.state.showColumns}
@@ -216,9 +215,9 @@ export default class ColumnSettingTable extends React.Component {
216
215
  appRequestConfig={appRequestConfig}
217
216
  />
218
217
  </span>
219
- </div>
220
218
  <Table
221
219
  columns={showCol}
220
+ border={true}
222
221
  components={{
223
222
  header: {
224
223
  cell: this.ResizeableTitle,
@@ -200,9 +200,8 @@ export default class ColumnSettingSulaTable extends React.Component {
200
200
  summary: showSummary,
201
201
  }
202
202
  return (
203
- <div>
204
- <div style={{ overflow: 'hidden', padding: '0 8px 10px 0' }}>
205
- <span style={{ float: 'right' }} className="ant-dropdown-link">
203
+ <div style={{ position: 'relative' }}>
204
+ <span style={{ position: 'absolute', zIndex: '10', right: '8px', top: '10px' }} className="ant-dropdown-link">
206
205
  <ColumnSetting
207
206
  setShowColumns={this.setShowColumns}
208
207
  showColumns={this.state.showColumns}
@@ -211,10 +210,9 @@ export default class ColumnSettingSulaTable extends React.Component {
211
210
  appRequestConfig={appRequestConfig}
212
211
  />
213
212
  </span>
214
- </div>
215
213
  <SulaTable
216
214
  ref={this.sulaTableRef}
217
- style={style}
215
+ border={true}
218
216
  columns={showCol}
219
217
  components={{
220
218
  header: {
@@ -1,10 +1,6 @@
1
1
  import React, { useState } from 'react';
2
2
  import { Typography } from 'antd';
3
- import { createFromIconfontCN } from '@ant-design/icons';
4
-
5
- const IconFont = createFromIconfontCN({
6
- scriptUrl: '//at.alicdn.com/t/c/font_4645959_8nhs21v6bnp.js',
7
- });
3
+ import copyImg from '../../../assets/copyImg.svg';
8
4
 
9
5
  const { Paragraph } = Typography;
10
6
 
@@ -34,7 +30,7 @@ const ParagraphCopier = (props: ParagraphCopierProps) => {
34
30
  // 拷贝选项,包含图标和提示信息
35
31
  const copyableOptions = {
36
32
  text: text,
37
- icon: <IconFont type="icon-qyhtfuzhi" style={{ fontSize: '14px' }} />,
33
+ icon: <img src={copyImg} />,
38
34
  tooltips: ['点击复制', '复制成功'],
39
35
  };
40
36