@bit-sun/business-component 4.0.11 → 4.0.12-alpha.2

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/.umirc.ts +10 -6
  2. package/dist/components/Business/BsSulaQueryTable/SearchItemSetting.d.ts +2 -4
  3. package/dist/components/Business/BsSulaQueryTable/utils.d.ts +1 -0
  4. package/dist/components/Business/SearchSelect/BusinessUtils.d.ts +2 -1
  5. package/dist/components/Functional/SearchSelect/utils.d.ts +11 -0
  6. package/dist/index.esm.js +1834 -967
  7. package/dist/index.js +1833 -966
  8. package/package.json +2 -2
  9. package/src/assets/copyImg.svg +16 -0
  10. package/src/assets/zhankaitiaojian-icon.svg +18 -0
  11. package/src/components/Business/BsLayouts/index.tsx +17 -0
  12. package/src/components/Business/BsSulaQueryTable/SearchItemSetting.tsx +45 -17
  13. package/src/components/Business/BsSulaQueryTable/index.less +21 -38
  14. package/src/components/Business/BsSulaQueryTable/index.tsx +26 -16
  15. package/src/components/Business/BsSulaQueryTable/setting.tsx +5 -5
  16. package/src/components/Business/BsSulaQueryTable/utils.tsx +36 -15
  17. package/src/components/Business/DetailPageWrapper/index.less +11 -3
  18. package/src/components/Business/DetailPageWrapper/index.tsx +27 -2
  19. package/src/components/Business/HomePageWrapper/index.less +9 -0
  20. package/src/components/Business/HomePageWrapper/index.tsx +1 -1
  21. package/src/components/Business/SearchSelect/BusinessUtils.tsx +834 -179
  22. package/src/components/Business/SearchSelect/index.md +181 -0
  23. package/src/components/Business/SearchSelect/index.tsx +2 -1
  24. package/src/components/Business/SearchSelect/utils.ts +4 -1
  25. package/src/components/Business/StateFlow/index.less +140 -124
  26. package/src/components/Business/StateFlow/index.tsx +3 -3
  27. package/src/components/Business/columnSettingTable/columnSetting.tsx +6 -6
  28. package/src/components/Business/columnSettingTable/index.less +33 -71
  29. package/src/components/Business/columnSettingTable/index.tsx +3 -4
  30. package/src/components/Business/columnSettingTable/sulaSettingTable.tsx +3 -5
  31. package/src/components/Common/ParagraphCopier/index.tsx +2 -6
  32. package/src/components/Functional/QueryMutipleInput/index.less +51 -19
  33. package/src/components/Functional/QueryMutipleInput/index.tsx +28 -22
  34. package/src/components/Functional/SearchSelect/index.less +236 -73
  35. package/src/components/Functional/SearchSelect/index.tsx +385 -259
  36. package/src/components/Functional/SearchSelect/utils.ts +35 -0
  37. package/src/components/Functional/TreeSearchSelect/index.tsx +1 -1
  38. package/src/components/Solution/RuleComponent/index.js +4 -3
  39. package/src/components/Solution/RuleSetter/function.ts +2 -1
  40. package/src/plugin/TableColumnSetting/index.less +38 -70
  41. package/src/plugin/TableColumnSetting/index.tsx +5 -5
  42. package/src/styles/bsDefault.less +132 -136
  43. package/src/utils/TableUtils.tsx +1 -1
  44. package/src/utils/utils.ts +5 -2
@@ -115,6 +115,11 @@ export default () => {
115
115
  const selectPropsMultiple = {
116
116
  mode: 'multiple',
117
117
  maxTagCount: 1,
118
+ onSaveCallback: (rows) => {
119
+ console.log('save call', rows);
120
+ return Promise.resolve(true);
121
+ // return Promise.reject('FAILE')
122
+ }
118
123
  }
119
124
 
120
125
  const singleConfirmModalTableProps = {
@@ -769,6 +774,7 @@ export default () => {
769
774
  setValue(value)
770
775
  },
771
776
  // requestConfig: {
777
+ // noOperate: true,
772
778
  // url: `/bop/api/customer`,
773
779
  // filter: 'qp-name,code-orGroup,like', // 过滤参数
774
780
  // mappingTextField: 'name',
@@ -1393,6 +1399,123 @@ export default () => {
1393
1399
  };
1394
1400
  ```
1395
1401
 
1402
+
1403
+ ## 销售渠道选择器 Select-MARKET-CHANNEL-001
1404
+
1405
+ ```tsx
1406
+ import React, { useState } from 'react';
1407
+ import { Tabs } from 'antd';
1408
+ import {BusinessSearchSelect} from '../../../index.ts';
1409
+
1410
+ const { TabPane } = Tabs;
1411
+
1412
+ export default () => {
1413
+ const selectProps = {
1414
+ // mode: 'multiple',
1415
+ // maxTagCount: 1,
1416
+ // disabled: true
1417
+ }
1418
+ const selectPropsMultiple = {
1419
+ mode: 'multiple',
1420
+ maxTagCount: 1,
1421
+ }
1422
+
1423
+ const [ tabKey, setTabKey ] = useState('single')
1424
+ const [value, setValue] = useState(selectProps?.mode ? [] : null);
1425
+
1426
+ const props = {
1427
+ value,
1428
+ onChange: (value: any) => {
1429
+ console.log(value)
1430
+ setValue(value)
1431
+ },
1432
+ selectProps,
1433
+ selectBusinessType: 'market-channel',
1434
+ };
1435
+
1436
+ const onTabChange = (key) => {
1437
+ setTabKey(key)
1438
+ setValue(key === 'single' ? null: [])
1439
+ }
1440
+
1441
+ return (
1442
+ <div>
1443
+ <Tabs onChange={onTabChange} activeKey={tabKey}>
1444
+ <TabPane tab='单选' key='single'>
1445
+ {tabKey === 'single' && (
1446
+ <BusinessSearchSelect {...props} />
1447
+ )}
1448
+ </TabPane>
1449
+ <TabPane tab='多选' key='multiple'>
1450
+ {tabKey === 'multiple' && (
1451
+ <BusinessSearchSelect {...props} selectProps={selectPropsMultiple} />
1452
+ )}
1453
+ </TabPane>
1454
+ </Tabs>
1455
+ </div>
1456
+ );
1457
+ };
1458
+ ```
1459
+
1460
+
1461
+ ## 业务组织选择器 Select-BUSINESS-ORGANIZATION-001
1462
+
1463
+ ```tsx
1464
+ import React, { useState } from 'react';
1465
+ import { Tabs } from 'antd';
1466
+ import {BusinessSearchSelect} from '../../../index.ts';
1467
+
1468
+ const { TabPane } = Tabs;
1469
+
1470
+ export default () => {
1471
+ const selectProps = {
1472
+ // mode: 'multiple',
1473
+ // maxTagCount: 1,
1474
+ // disabled: true
1475
+ }
1476
+ const selectPropsMultiple = {
1477
+ mode: 'multiple',
1478
+ maxTagCount: 1,
1479
+ }
1480
+
1481
+ const [ tabKey, setTabKey ] = useState('single')
1482
+ const [value, setValue] = useState(selectProps?.mode ? [] : null);
1483
+
1484
+ const props = {
1485
+ value,
1486
+ onChange: (value: any) => {
1487
+ console.log(value)
1488
+ setValue(value)
1489
+ },
1490
+ selectProps,
1491
+ selectBusinessType: 'business-organization',
1492
+ };
1493
+
1494
+ const onTabChange = (key) => {
1495
+ setTabKey(key)
1496
+ setValue(key === 'single' ? null: [])
1497
+ }
1498
+
1499
+ return (
1500
+ <div>
1501
+ <Tabs onChange={onTabChange} activeKey={tabKey}>
1502
+ <TabPane tab='单选' key='single'>
1503
+ {tabKey === 'single' && (
1504
+ <BusinessSearchSelect {...props} />
1505
+ )}
1506
+ </TabPane>
1507
+ <TabPane tab='多选' key='multiple'>
1508
+ {tabKey === 'multiple' && (
1509
+ <BusinessSearchSelect {...props} selectProps={selectPropsMultiple} />
1510
+ )}
1511
+ </TabPane>
1512
+ </Tabs>
1513
+ </div>
1514
+ );
1515
+ };
1516
+ ```
1517
+
1518
+
1396
1519
  ## 人员选择器 Select-PERSON-001
1397
1520
 
1398
1521
  ```tsx
@@ -1567,4 +1690,62 @@ export default () => {
1567
1690
  ```
1568
1691
 
1569
1692
 
1693
+ ## 销售组织选择器 Select-SALES-ORGANIZATION-001
1694
+
1695
+ ```tsx
1696
+ import React, { useState } from 'react';
1697
+ import { Tabs } from 'antd';
1698
+ import {BusinessSearchSelect} from '../../../index.ts';
1699
+
1700
+ const { TabPane } = Tabs;
1701
+
1702
+ export default () => {
1703
+ const selectProps = {
1704
+ // mode: 'multiple',
1705
+ // maxTagCount: 1,
1706
+ // disabled: true
1707
+ }
1708
+ const selectPropsMultiple = {
1709
+ mode: 'multiple',
1710
+ maxTagCount: 1,
1711
+ }
1712
+
1713
+ const [ tabKey, setTabKey ] = useState('single')
1714
+ const [value, setValue] = useState(selectProps?.mode ? [] : null);
1715
+
1716
+ const props = {
1717
+ value,
1718
+ onChange: (value: any) => {
1719
+ console.log(value)
1720
+ setValue(value)
1721
+ },
1722
+ selectProps,
1723
+ selectBusinessType: 'sales-organization',
1724
+ };
1725
+
1726
+ const onTabChange = (key) => {
1727
+ setTabKey(key)
1728
+ setValue(key === 'single' ? null: [])
1729
+ }
1730
+
1731
+ return (
1732
+ <div>
1733
+ <Tabs onChange={onTabChange} activeKey={tabKey}>
1734
+ <TabPane tab='单选' key='single'>
1735
+ {tabKey === 'single' && (
1736
+ <BusinessSearchSelect {...props} />
1737
+ )}
1738
+ </TabPane>
1739
+ <TabPane tab='多选' key='multiple'>
1740
+ {tabKey === 'multiple' && (
1741
+ <BusinessSearchSelect {...props} selectProps={selectPropsMultiple} />
1742
+ )}
1743
+ </TabPane>
1744
+ </Tabs>
1745
+ </div>
1746
+ );
1747
+ };
1748
+ ```
1749
+
1750
+
1570
1751
  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>
@@ -650,7 +650,7 @@ class SortableTable extends React.Component<SortTableProps> {
650
650
  return (
651
651
  <div className={'sort_table_wrapper'}>
652
652
  {visible && <Modal
653
- title="设置表头内容"
653
+ title="筛选条件设置"
654
654
  wrapClassName={'sort_table_wrapper'}
655
655
  width={820}
656
656
  visible={visible}
@@ -687,15 +687,15 @@ class SortableTable extends React.Component<SortTableProps> {
687
687
  <div className={'sort_table'}>
688
688
  <div className={'sort_table_column_wrapper'}>
689
689
  <span className={'sort_table_column_count'}>
690
- 可选字段 <span>(共{dataSource.length}个)</span>
690
+ <span>勾选你想使用的筛选条件</span>
691
691
  </span>
692
692
  <div className={'sort_table_column'}>
693
693
  <Input
694
694
  prefix={<SearchOutlined className="site-form-item-icon" />}
695
- placeholder="搜索"
695
+ placeholder="输入筛选条件名称搜索"
696
696
  allowClear
697
697
  onChange={this.onSearch}
698
- style={{ width: 540 }}
698
+ style={{ width: 525 }}
699
699
  />
700
700
  <div>
701
701
  {!searchDataSource && (
@@ -819,7 +819,7 @@ class SortableTable extends React.Component<SortTableProps> {
819
819
  </div>
820
820
  <div className={'sort_table_content_wrapper'}>
821
821
  <span className={'sort_table_content_count'}>
822
- 已选字段 <span>(共{sortDataSource.length}个)</span>
822
+ <span>已选择的搜索条件排序</span>
823
823
  </span>
824
824
  <div className={'sort_table_content'}>
825
825
  <span style={{ paddingLeft: '10px' }}>
@@ -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
  );