neo-cmp-cli 1.13.11 → 1.13.13

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 (100) hide show
  1. package/dist/neo/neoService.js +1 -1
  2. package/dist/package.json.js +1 -1
  3. package/package.json +1 -1
  4. package/template/antd-custom-cmp-template/package.json +1 -1
  5. package/template/asset-manage-template/package.json +1 -1
  6. package/template/echarts-custom-cmp-template/package.json +1 -1
  7. package/template/empty-custom-cmp-template/package.json +1 -1
  8. package/template/map-custom-cmp-template/package.json +1 -1
  9. package/template/neo-bi-cmps/docs/gartner-pipeline-apis.md +279 -0
  10. package/template/neo-bi-cmps/docs/gartner-pipeline-prd.md +389 -0
  11. package/template/neo-bi-cmps/docs/neo-backend-dev/SKILL.md +188 -0
  12. package/template/neo-bi-cmps/docs/neo-backend-dev/references/01-Trigger/345/274/200/345/217/221.md +183 -0
  13. package/template/neo-bi-cmps/docs/neo-backend-dev/references/02-/350/207/252/345/256/232/344/271/211API/345/274/200/345/217/221.md +196 -0
  14. package/template/neo-bi-cmps/docs/neo-backend-dev/references/03-SDK/345/267/245/345/205/267/347/261/273/346/216/245/345/217/243.md +346 -0
  15. package/template/neo-bi-cmps/docs/neo-backend-dev/references/04-/350/256/241/345/210/222/344/275/234/344/270/232/345/274/200/345/217/221.md +188 -0
  16. package/template/neo-bi-cmps/docs/neo-backend-dev/references/05-/351/241/265/351/235/242/345/274/200/345/217/221.md +293 -0
  17. package/template/neo-bi-cmps/docs/neo-backend-dev/references/06-/346/265/201/347/250/213/346/211/251/345/261/225/345/274/200/345/217/221.md +175 -0
  18. package/template/neo-bi-cmps/docs/neo-backend-dev/references/PaaS/345/271/263/345/217/260/345/274/200/345/217/221/346/211/213/345/206/214/350/247/243/350/257/273.md +313 -0
  19. package/template/neo-bi-cmps/docs/neo-backend-dev/references/auth-config.md +77 -0
  20. package/template/neo-bi-cmps/docs/neo-backend-dev/scripts/deploy_server_script.py +118 -0
  21. package/template/neo-bi-cmps/docs/neo-backend-dev/scripts/download_server_script.py +74 -0
  22. package/template/neo-bi-cmps/docs/neo-backend-dev/scripts/gen_entity_desc.py +69 -0
  23. package/template/neo-bi-cmps/docs/neo-backend-dev/scripts/gen_entitylist.py +87 -0
  24. package/template/neo-bi-cmps/docs/neo-backend-dev/scripts/query_crm.py +65 -0
  25. package/template/neo-bi-cmps/docs/neo-backend-dev/scripts/uninstall_server_script.py +48 -0
  26. package/template/neo-bi-cmps/docs/neo-backend-dev/scripts/update_model_jar.py +49 -0
  27. package/template/neo-bi-cmps/docs/neo-frontend-dev/SKILL.md +138 -0
  28. package/template/neo-bi-cmps/docs/neo-frontend-dev/references/auth-config.md +77 -0
  29. package/template/neo-bi-cmps/docs/neo-frontend-dev/references/component-dev.md +205 -0
  30. package/template/neo-bi-cmps/docs/neo-frontend-dev/references/entityTable-example.md +167 -0
  31. package/template/neo-bi-cmps/docs/neo-frontend-dev/references/templates.md +38 -0
  32. package/template/neo-bi-cmps/docs/neo-frontend-dev/scripts/gen_entity_desc.py +69 -0
  33. package/template/neo-bi-cmps/docs/neo-frontend-dev/scripts/gen_entitylist.py +87 -0
  34. package/template/neo-bi-cmps/docs/neo-frontend-dev/scripts/query_crm.py +65 -0
  35. package/template/neo-bi-cmps/docs/prototype-pipeline-forecasting.html +2453 -0
  36. package/template/neo-bi-cmps/docs//350/264/246/345/217/267/347/233/270/345/205/263/344/277/241/346/201/257.md +10 -0
  37. package/template/neo-bi-cmps/package.json +1 -1
  38. package/template/neo-bi-cmps/src/components/aiCommitDrawer__c/README.md +52 -0
  39. package/template/neo-bi-cmps/src/components/aiCommitDrawer__c/index.tsx +176 -0
  40. package/template/neo-bi-cmps/src/components/aiCommitDrawer__c/model.ts +49 -0
  41. package/template/neo-bi-cmps/src/components/aiCommitDrawer__c/style.scss +218 -0
  42. package/template/neo-bi-cmps/src/components/filterBar__c/README.md +35 -0
  43. package/template/neo-bi-cmps/src/components/filterBar__c/index.tsx +186 -0
  44. package/template/neo-bi-cmps/src/components/filterBar__c/model.ts +72 -0
  45. package/template/neo-bi-cmps/src/components/filterBar__c/style.scss +212 -0
  46. package/template/neo-bi-cmps/src/components/forecastChart__c/README.md +31 -0
  47. package/template/neo-bi-cmps/src/components/forecastChart__c/index.tsx +161 -0
  48. package/template/neo-bi-cmps/src/components/forecastChart__c/model.ts +39 -0
  49. package/template/neo-bi-cmps/src/components/forecastChart__c/style.scss +154 -0
  50. package/template/neo-bi-cmps/src/components/forecastGrid__c/README.md +36 -0
  51. package/template/neo-bi-cmps/src/components/forecastGrid__c/index.tsx +86 -0
  52. package/template/neo-bi-cmps/src/components/forecastGrid__c/model.ts +34 -0
  53. package/template/neo-bi-cmps/src/components/forecastGrid__c/style.scss +48 -0
  54. package/template/neo-bi-cmps/src/components/gapCloser__c/README.md +24 -0
  55. package/template/neo-bi-cmps/src/components/gapCloser__c/index.tsx +95 -0
  56. package/template/neo-bi-cmps/src/components/gapCloser__c/model.ts +43 -0
  57. package/template/neo-bi-cmps/src/components/gapCloser__c/style.scss +60 -0
  58. package/template/neo-bi-cmps/src/components/kpiCards__c/README.md +35 -0
  59. package/template/neo-bi-cmps/src/components/kpiCards__c/index.tsx +70 -0
  60. package/template/neo-bi-cmps/src/components/kpiCards__c/model.ts +35 -0
  61. package/template/neo-bi-cmps/src/components/kpiCards__c/style.scss +33 -0
  62. package/template/neo-bi-cmps/src/components/oppList__c/README.md +52 -0
  63. package/template/neo-bi-cmps/src/components/oppList__c/index.tsx +228 -0
  64. package/template/neo-bi-cmps/src/components/oppList__c/model.ts +40 -0
  65. package/template/neo-bi-cmps/src/components/oppList__c/style.scss +133 -0
  66. package/template/neo-bi-cmps/src/components/pipelineFunnel__c/README.md +39 -0
  67. package/template/neo-bi-cmps/src/components/pipelineFunnel__c/index.tsx +128 -0
  68. package/template/neo-bi-cmps/src/components/pipelineFunnel__c/model.ts +42 -0
  69. package/template/neo-bi-cmps/src/components/pipelineFunnel__c/style.scss +133 -0
  70. package/template/neo-bi-cmps/src/components/stageSwitch__c/README.md +36 -0
  71. package/template/neo-bi-cmps/src/components/stageSwitch__c/index.tsx +103 -0
  72. package/template/neo-bi-cmps/src/components/stageSwitch__c/model.ts +37 -0
  73. package/template/neo-bi-cmps/src/components/stageSwitch__c/style.scss +89 -0
  74. package/template/neo-bi-cmps/src/components/stageTimeChart__c/README.md +37 -0
  75. package/template/neo-bi-cmps/src/components/stageTimeChart__c/index.tsx +126 -0
  76. package/template/neo-bi-cmps/src/components/stageTimeChart__c/model.ts +35 -0
  77. package/template/neo-bi-cmps/src/components/stageTimeChart__c/style.scss +140 -0
  78. package/template/neo-bi-cmps/src/components/tabSwitch__c/README.md +37 -0
  79. package/template/neo-bi-cmps/src/components/tabSwitch__c/index.tsx +80 -0
  80. package/template/neo-bi-cmps/src/components/tabSwitch__c/model.ts +45 -0
  81. package/template/neo-bi-cmps/src/components/tabSwitch__c/style.scss +37 -0
  82. package/template/neo-custom-cmp-template/package.json +1 -1
  83. package/template/neo-custom-cmp-template/src/components/entityForm__c/index.tsx +48 -54
  84. package/template/neo-custom-cmp-template/src/components/entityForm__c/model.ts +1 -1
  85. package/template/neo-custom-cmp-template/src/components/entityForm__c/style.scss +80 -77
  86. package/template/neo-h5-cmps/package.json +1 -1
  87. package/template/neo-order-cmps/package.json +1 -1
  88. package/template/neo-web-entity-grid/package.json +1 -1
  89. package/template/neo-web-entity-grid/src/components/createForm__c/index.tsx +46 -54
  90. package/template/neo-web-entity-grid/src/components/createForm__c/resetAntd.scss +74 -0
  91. package/template/neo-web-entity-grid/src/components/createForm__c/style.scss +81 -152
  92. package/template/neo-web-entity-grid/src/components/searchForm__c/index.tsx +47 -52
  93. package/template/neo-web-entity-grid/src/components/searchForm__c/style.scss +60 -74
  94. package/template/neo-web-form/package.json +1 -1
  95. package/template/neo-web-form/src/components/batchAddTable__c/index.tsx +16 -7
  96. package/template/neo-web-form/src/components/batchAddTable__c/style.scss +14 -0
  97. package/template/neo-web-form/src/components/batchAddTable__c/tableModal.scss +60 -13
  98. package/template/react-custom-cmp-template/package.json +1 -1
  99. package/template/react-ts-custom-cmp-template/package.json +1 -1
  100. package/template/vue2-custom-cmp-template/package.json +1 -1
@@ -0,0 +1,10 @@
1
+ Gartner 租户管理员账号:
2
+ tina.kung@qingmiaox.org
3
+ Gartner0718
4
+
5
+ pipeline设计稿:https://www.figma.com/design/n5orqOOhfsRNXGnOUYWSYp/%E5%95%86%E6%9C%BAPipeline%E5%92%8C%E9%A2%84%E6%B5%8B%EF%BC%88to26Gartner%EF%BC%89?node-id=14-10608&t=yFrDOnJuuaMFUACl-4
6
+
7
+ figma账号:summer_han23@163.com
8
+ 密码:neocrm123456
9
+
10
+ 环境:https://crm.xiaoshouyi.com/bff/neoweb#/neoPage/customPage/Pipeline
@@ -50,7 +50,7 @@
50
50
  "@types/react": "^16.9.11",
51
51
  "@types/react-dom": "^16.9.15",
52
52
  "@types/axios": "^0.14.0",
53
- "neo-cmp-cli": "^1.13.11",
53
+ "neo-cmp-cli": "^1.13.13",
54
54
  "husky": "^4.2.5",
55
55
  "lint-staged": "^10.2.9",
56
56
  "prettier": "^2.0.5"
@@ -0,0 +1,52 @@
1
+ # AiCommitDrawer 组件
2
+
3
+ AI推荐Commit抽屉组件,展示AI推荐的Commit商机。
4
+
5
+ ## 使用方式
6
+
7
+ ```tsx
8
+ import AiCommitDrawer from './components/aiCommitDrawer__c';
9
+
10
+ <AiCommitDrawer
11
+ visible={true}
12
+ totalAmount="$6,800,000"
13
+ closedAmount="$3,200,000"
14
+ tabs={[
15
+ { key: 'pipeline', label: 'From Open Pipeline', amount: '$2,500,000', count: 2 },
16
+ { key: 'commit', label: 'From Commit', amount: '$1,800,000', count: 2 },
17
+ ]}
18
+ pipelineDeals={[...]}
19
+ commitDeals={[...]}
20
+ onClose={() => console.log('Close')}
21
+ onPrioritize={(deal) => console.log('Prioritize:', deal)}
22
+ onDismiss={(deal) => console.log('Dismiss:', deal)}
23
+ />
24
+ ```
25
+
26
+ ## Props
27
+
28
+ | 属性 | 说明 | 类型 | 默认值 |
29
+ |------|------|------|--------|
30
+ | visible | 是否显示 | boolean | false |
31
+ | totalAmount | AI预测总额 | string | '$6,800,000' |
32
+ | closedAmount | 已关闭金额 | string | '$3,200,000' |
33
+ | closedCount | 已关闭数量 | number | 5 |
34
+ | tabs | Tab配置 | { key, label, amount, count }[] | [] |
35
+ | pipelineDeals | Pipeline商机 | CommitDeal[] | [] |
36
+ | commitDeals | Commit商机 | CommitDeal[] | [] |
37
+ | onClose | 关闭回调 | () => void | - |
38
+ | onPrioritize | 优先处理回调 | (deal: CommitDeal) => void | - |
39
+ | onDismiss | 忽略回调 | (deal: CommitDeal) => void | - |
40
+
41
+ ## CommitDeal
42
+
43
+ | 属性 | 说明 | 类型 |
44
+ |------|------|------|
45
+ | id | 唯一标识 | string |
46
+ | name | 商机名称 | string |
47
+ | account | 账户 | string |
48
+ | amount | 金额 | string |
49
+ | stage | 阶段 | string |
50
+ | closeDate | 关闭日期 | string |
51
+ | aiScore | AI评分 | string |
52
+ | description | 描述 | string |
@@ -0,0 +1,176 @@
1
+ /**
2
+ * @file AI推荐Commit抽屉组件
3
+ * @description 展示AI推荐的Commit商机,支持From Pipeline和From Commit两个Tab
4
+ */
5
+ import * as React from 'react';
6
+ // @ts-ignore
7
+ import { BaseCmp, StatusHoc, NeoEvent } from 'neo-ui-common';
8
+
9
+ import './style.scss';
10
+
11
+ interface CommitDeal {
12
+ id: string;
13
+ name: string;
14
+ account: string;
15
+ amount: string;
16
+ stage: string;
17
+ closeDate: string;
18
+ aiScore: string;
19
+ description?: string;
20
+ }
21
+
22
+ interface AiCommitDrawerProps {
23
+ visible?: boolean;
24
+ totalAmount?: string;
25
+ closedAmount?: string;
26
+ closedCount?: number;
27
+ tabs?: { key: string; label: string; amount: string; count: number }[];
28
+ pipelineDeals?: CommitDeal[];
29
+ commitDeals?: CommitDeal[];
30
+ onClose?: () => void;
31
+ onPrioritize?: (deal: CommitDeal) => void;
32
+ onDismiss?: (deal: CommitDeal) => void;
33
+ className?: string;
34
+ style?: React.CSSProperties;
35
+ }
36
+
37
+ interface AiCommitDrawerState {
38
+ activeTab: string;
39
+ }
40
+
41
+ class AiCommitDrawer extends BaseCmp<AiCommitDrawerProps, AiCommitDrawerState> {
42
+ constructor(props: AiCommitDrawerProps) {
43
+ super(props);
44
+ this.state = {
45
+ activeTab: props.tabs?.[0]?.key ?? 'pipeline',
46
+ };
47
+ }
48
+
49
+ componentDidMount() {
50
+ console.log('AiCommitDrawer 组件挂载');
51
+ }
52
+
53
+ componentWillReceiveProps(nextProps: AiCommitDrawerProps) {
54
+ if (nextProps.visible && !this.props.visible) {
55
+ this.setState({ activeTab: nextProps.tabs?.[0]?.key ?? 'pipeline' });
56
+ }
57
+ }
58
+
59
+ handleTabChange = (tab: string) => {
60
+ this.setState({ activeTab: tab });
61
+ };
62
+
63
+ handleClose = () => {
64
+ const { onClose } = this.props;
65
+ if (onClose) {
66
+ onClose();
67
+ }
68
+ };
69
+
70
+ renderDealCard = (deal: CommitDeal) => {
71
+ const { onPrioritize, onDismiss } = this.props;
72
+
73
+ return (
74
+ <div key={deal.id} className="deal-card">
75
+ <div className="deal-card-header">
76
+ <div className="deal-info">
77
+ <div className="deal-name">{deal.name}</div>
78
+ <div className="deal-account">{deal.account} · {deal.amount}</div>
79
+ <div className="deal-meta">
80
+ <span className="deal-stage">{deal.stage}</span>
81
+ <span> · Close: {deal.closeDate}</span>
82
+ </div>
83
+ </div>
84
+ <span className="deal-score">✨ {deal.aiScore}</span>
85
+ </div>
86
+ {deal.description && (
87
+ <div className="deal-description">{deal.description}</div>
88
+ )}
89
+ <div className="deal-actions">
90
+ <button
91
+ className="btn-prioritize"
92
+ onClick={() => onPrioritize?.(deal)}
93
+ >
94
+ Prioritize
95
+ </button>
96
+ <button
97
+ className="btn-dismiss"
98
+ onClick={() => onDismiss?.(deal)}
99
+ >
100
+ Dismiss
101
+ </button>
102
+ </div>
103
+ </div>
104
+ );
105
+ };
106
+
107
+ render() {
108
+ const {
109
+ visible = false,
110
+ totalAmount = '$6,800,000',
111
+ closedAmount = '$3,200,000',
112
+ closedCount = 5,
113
+ tabs = [],
114
+ pipelineDeals = [],
115
+ commitDeals = [],
116
+ className,
117
+ style,
118
+ } = this.props;
119
+
120
+ const { activeTab } = this.state;
121
+
122
+ if (!visible) {
123
+ return null;
124
+ }
125
+
126
+ return (
127
+ <div className={`ai-commit-drawer__c-overlay`} onClick={this.handleClose}>
128
+ <div
129
+ className={`ai-commit-drawer__c ${className || ''}`}
130
+ style={style}
131
+ onClick={(e) => e.stopPropagation()}
132
+ >
133
+ <div className="drawer-header">
134
+ <h3>✨ AI Forecast</h3>
135
+ <button className="close-btn" onClick={this.handleClose}>✕</button>
136
+ </div>
137
+
138
+ <div className="drawer-summary">
139
+ <span className="summary-amount">{totalAmount}</span>
140
+ <span className="summary-desc">Based on deal health and engagement signals</span>
141
+ </div>
142
+
143
+ {/* Closed Won 汇总 */}
144
+ <div className="closed-summary">
145
+ <div className="closed-info">
146
+ <div className="closed-label">Closed Won</div>
147
+ <div className="closed-amount">{closedAmount}</div>
148
+ </div>
149
+ <div className="closed-count">{closedCount} deals</div>
150
+ </div>
151
+
152
+ {/* Tab切换 */}
153
+ <div className="drawer-tabs">
154
+ {tabs.map((tab) => (
155
+ <button
156
+ key={tab.key}
157
+ className={`ai-commit-tab ${activeTab === tab.key ? 'active' : ''}`}
158
+ onClick={() => this.handleTabChange(tab.key)}
159
+ >
160
+ {tab.label} · {tab.amount} · {tab.count} deals
161
+ </button>
162
+ ))}
163
+ </div>
164
+
165
+ {/* Tab内容 */}
166
+ <div className="drawer-content">
167
+ {activeTab === 'pipeline' && pipelineDeals.map((deal) => this.renderDealCard(deal))}
168
+ {activeTab === 'commit' && commitDeals.map((deal) => this.renderDealCard(deal))}
169
+ </div>
170
+ </div>
171
+ </div>
172
+ );
173
+ }
174
+ }
175
+
176
+ export default StatusHoc(AiCommitDrawer);
@@ -0,0 +1,49 @@
1
+ export class AiCommitDrawerModel {
2
+ label: string = 'AI推荐抽屉';
3
+ description: string = '展示AI推荐的Commit商机,支持From Pipeline和From Commit两个Tab';
4
+ iconUrl: string = 'https://custom-widgets.bj.bcebos.com/aiCommitDrawer.svg';
5
+ targetPage: string[] = ['all'];
6
+ targetDevice: string = 'all';
7
+
8
+ defaultComProps = {
9
+ visible: false,
10
+ totalAmount: '$6,800,000',
11
+ closedAmount: '$3,200,000',
12
+ closedCount: 5,
13
+ tabs: [
14
+ { key: 'pipeline', label: 'From Open Pipeline', amount: '$2,500,000', count: 2 },
15
+ { key: 'commit', label: 'From Commit', amount: '$1,800,000', count: 2 },
16
+ ],
17
+ pipelineDeals: [
18
+ { id: '1', name: 'Starlight Initiative', account: 'Tencent', amount: '$500,000', stage: 'Pipeline', closeDate: '2026-05-20', aiScore: '52%', description: 'Strong engagement signals and past wins with this account' },
19
+ { id: '2', name: 'Galaxy Partnership', account: 'Alibaba', amount: '$2,000,000', stage: 'Best Case', closeDate: '2026-05-10', aiScore: '45%', description: 'High product usage and active engagement in last 7 days' },
20
+ ],
21
+ commitDeals: [
22
+ { id: '3', name: 'Aurora Solution', account: 'ByteDance', amount: '$800,000', stage: 'Commit', closeDate: '2026-04-30', aiScore: '91%' },
23
+ { id: '4', name: 'Apollo Project', account: 'Huawei Tech', amount: '$1,000,000', stage: 'Commit', closeDate: '2026-04-15', aiScore: '86%' },
24
+ ],
25
+ };
26
+
27
+ functions = [
28
+ {
29
+ apiKey: 'openDrawer',
30
+ label: '打开抽屉',
31
+ helpTextKey: '打开AI推荐抽屉',
32
+ },
33
+ {
34
+ apiKey: 'closeDrawer',
35
+ label: '关闭抽屉',
36
+ helpTextKey: '关闭AI推荐抽屉',
37
+ },
38
+ ];
39
+
40
+ propsSchema = [
41
+ {
42
+ type: 'boolean',
43
+ name: 'visible',
44
+ label: '是否显示',
45
+ },
46
+ ];
47
+ }
48
+
49
+ export default AiCommitDrawerModel;
@@ -0,0 +1,218 @@
1
+ .ai-commit-drawer__c-overlay {
2
+ position: fixed;
3
+ top: 0;
4
+ left: 0;
5
+ right: 0;
6
+ bottom: 0;
7
+ background: rgba(0, 0, 0, 0.3);
8
+ z-index: 150;
9
+ }
10
+
11
+ .ai-commit-drawer__c {
12
+ position: fixed;
13
+ top: 0;
14
+ right: 0;
15
+ width: 480px;
16
+ height: 100%;
17
+ background: #fff;
18
+ box-shadow: -4px 0 20px rgba(0, 0, 0, 0.1);
19
+ overflow-y: auto;
20
+ padding: 24px;
21
+
22
+ .drawer-header {
23
+ display: flex;
24
+ justify-content: space-between;
25
+ align-items: center;
26
+ margin-bottom: 20px;
27
+
28
+ h3 {
29
+ font-size: 16px;
30
+ margin: 0;
31
+ }
32
+
33
+ .close-btn {
34
+ border: none;
35
+ background: none;
36
+ font-size: 20px;
37
+ cursor: pointer;
38
+ color: #999;
39
+
40
+ &:hover {
41
+ color: #333;
42
+ }
43
+ }
44
+ }
45
+
46
+ .drawer-summary {
47
+ font-size: 12px;
48
+ color: #888;
49
+ margin-bottom: 20px;
50
+
51
+ .summary-amount {
52
+ font-weight: 700;
53
+ color: #6366f1;
54
+ font-size: 16px;
55
+ }
56
+
57
+ .summary-desc {
58
+ margin-left: 4px;
59
+ }
60
+ }
61
+
62
+ .closed-summary {
63
+ background: #f8f9fa;
64
+ border-radius: 10px;
65
+ padding: 16px;
66
+ margin-bottom: 20px;
67
+
68
+ .closed-info {
69
+ display: flex;
70
+ justify-content: space-between;
71
+ align-items: center;
72
+ }
73
+
74
+ .closed-label {
75
+ font-size: 12px;
76
+ color: #888;
77
+ margin-bottom: 2px;
78
+ }
79
+
80
+ .closed-amount {
81
+ font-size: 20px;
82
+ font-weight: 700;
83
+ }
84
+
85
+ .closed-count {
86
+ font-size: 12px;
87
+ color: #999;
88
+ }
89
+ }
90
+
91
+ .drawer-tabs {
92
+ display: flex;
93
+ gap: 0;
94
+ margin-bottom: 16px;
95
+ border-bottom: 2px solid #e5e7eb;
96
+ }
97
+
98
+ .ai-commit-tab {
99
+ padding: 8px 16px;
100
+ font-size: 13px;
101
+ font-weight: 600;
102
+ cursor: pointer;
103
+ border: none;
104
+ background: none;
105
+ color: #999;
106
+ border-bottom: 2px solid transparent;
107
+ margin-bottom: -2px;
108
+ transition: all 0.2s;
109
+ white-space: nowrap;
110
+
111
+ &:hover {
112
+ color: #6366f1;
113
+ }
114
+
115
+ &.active {
116
+ color: #6366f1;
117
+ border-bottom-color: #6366f1;
118
+ }
119
+ }
120
+
121
+ .drawer-content {
122
+ .deal-card {
123
+ border: 1px solid #e5e7eb;
124
+ border-left: 3px solid #6366f1;
125
+ border-radius: 10px;
126
+ padding: 14px;
127
+ margin-bottom: 10px;
128
+
129
+ .deal-card-header {
130
+ display: flex;
131
+ justify-content: space-between;
132
+ align-items: start;
133
+ margin-bottom: 6px;
134
+ }
135
+
136
+ .deal-info {
137
+ flex: 1;
138
+ }
139
+
140
+ .deal-name {
141
+ font-weight: 600;
142
+ font-size: 14px;
143
+ }
144
+
145
+ .deal-account {
146
+ font-size: 12px;
147
+ color: #888;
148
+ }
149
+
150
+ .deal-meta {
151
+ font-size: 11px;
152
+ color: #888;
153
+ margin-top: 2px;
154
+ }
155
+
156
+ .deal-stage {
157
+ background: #f0f0f0;
158
+ padding: 1px 6px;
159
+ border-radius: 3px;
160
+ font-size: 10px;
161
+ }
162
+
163
+ .deal-score {
164
+ color: #6366f1;
165
+ font-weight: 600;
166
+ font-size: 13px;
167
+ }
168
+
169
+ .deal-description {
170
+ font-size: 12px;
171
+ color: #666;
172
+ background: #f8f9fa;
173
+ padding: 6px 8px;
174
+ border-radius: 4px;
175
+ margin-bottom: 10px;
176
+ }
177
+
178
+ .deal-actions {
179
+ display: flex;
180
+ gap: 8px;
181
+ }
182
+
183
+ .btn-prioritize {
184
+ flex: 1;
185
+ padding: 7px;
186
+ border: none;
187
+ border-radius: 6px;
188
+ background: #6366f1;
189
+ color: #fff;
190
+ cursor: pointer;
191
+ font-size: 12px;
192
+ font-weight: 600;
193
+ transition: opacity 0.2s;
194
+
195
+ &:hover {
196
+ opacity: 0.9;
197
+ }
198
+ }
199
+
200
+ .btn-dismiss {
201
+ flex: 1;
202
+ padding: 7px;
203
+ border: 1px solid #ddd;
204
+ border-radius: 6px;
205
+ background: #fff;
206
+ cursor: pointer;
207
+ font-size: 12px;
208
+ color: #666;
209
+ transition: all 0.2s;
210
+
211
+ &:hover {
212
+ border-color: #6366f1;
213
+ color: #6366f1;
214
+ }
215
+ }
216
+ }
217
+ }
218
+ }
@@ -0,0 +1,35 @@
1
+ # FilterBar 组件
2
+
3
+ 筛选栏组件,支持日期范围、负责人、业务类型等多维度筛选。
4
+
5
+ ## 使用方式
6
+
7
+ ```tsx
8
+ import FilterBar from './components/filterBar__c';
9
+
10
+ <FilterBar
11
+ filters={[
12
+ { name: 'closeDate', label: 'Close Date', type: 'select', options: [...] },
13
+ { name: 'owner', label: 'Opportunity Owner', type: 'owner' },
14
+ ]}
15
+ onChange={(key, value) => console.log(key, value)}
16
+ />
17
+ ```
18
+
19
+ ## Props
20
+
21
+ | 属性 | 说明 | 类型 | 默认值 |
22
+ |------|------|------|--------|
23
+ | filters | 筛选配置数组 | FilterItem[] | [] |
24
+ | values | 筛选值 | Record<string, string> | {} |
25
+ | onChange | 筛选变化回调 | (key: string, value: string) => void | - |
26
+ | onSearch | 搜索按钮回调 | () => void | - |
27
+
28
+ ## FilterItem
29
+
30
+ | 属性 | 说明 | 类型 |
31
+ |------|------|------|
32
+ | name | 字段标识 | string |
33
+ | label | 显示标签 | string |
34
+ | type | 类型 | 'select' \| 'date' \| 'owner' \| 'custom' |
35
+ | options | 下拉选项 | FilterOption[] |