neo-cmp-cli 1.12.8 → 1.12.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 (161) hide show
  1. package/README.md +204 -6
  2. package/dist/index2.js +1 -1
  3. package/dist/module/neoInitByCopy.js +1 -1
  4. package/dist/neo/env.js +1 -1
  5. package/dist/package.json.js +1 -1
  6. package/package.json +4 -1
  7. package/template/antd-custom-cmp-template/package.json +1 -1
  8. package/template/asset-manage-template/README.md +154 -0
  9. package/template/asset-manage-template/docs/README.md +244 -0
  10. package/template/asset-manage-template/neo.config.js +60 -0
  11. package/template/asset-manage-template/package.json +74 -0
  12. package/template/asset-manage-template/src/assets/img/chart.svg +1 -0
  13. package/template/asset-manage-template/src/components/README.md +3 -0
  14. package/template/asset-manage-template/src/components/assetManage__c/assetApi.ts +70 -0
  15. package/template/asset-manage-template/src/components/assetManage__c/cmps/AssetCreateModal.tsx +260 -0
  16. package/template/asset-manage-template/src/components/assetManage__c/cmps/AssetGrid.tsx +48 -0
  17. package/template/asset-manage-template/src/components/assetManage__c/cmps/AssetSidebar.tsx +74 -0
  18. package/template/asset-manage-template/src/components/assetManage__c/cmps/AssetToolbar.tsx +79 -0
  19. package/template/asset-manage-template/src/components/assetManage__c/cmps/assetDisplay.tsx +72 -0
  20. package/template/asset-manage-template/src/components/assetManage__c/constants.ts +28 -0
  21. package/template/asset-manage-template/src/components/assetManage__c/index.tsx +258 -0
  22. package/template/asset-manage-template/src/components/assetManage__c/model.ts +75 -0
  23. package/template/asset-manage-template/src/components/assetManage__c/style.scss +425 -0
  24. package/template/asset-manage-template/src/components/assetManage__c/types.ts +60 -0
  25. package/template/asset-manage-template/src/components/bidList__c/cmps/BidCard.tsx +47 -0
  26. package/template/asset-manage-template/src/components/bidList__c/constants.ts +6 -0
  27. package/template/asset-manage-template/src/components/bidList__c/formatUtils.ts +14 -0
  28. package/template/asset-manage-template/src/components/bidList__c/index.tsx +194 -0
  29. package/template/asset-manage-template/src/components/bidList__c/model.ts +57 -0
  30. package/template/asset-manage-template/src/components/bidList__c/style.scss +179 -0
  31. package/template/asset-manage-template/src/components/bidList__c/types.ts +10 -0
  32. package/template/asset-manage-template/src/components/bidPackage__c/cmps/BidPackageHeader.tsx +140 -0
  33. package/template/asset-manage-template/src/components/bidPackage__c/cmps/PackageItemTable.tsx +148 -0
  34. package/template/asset-manage-template/src/components/bidPackage__c/index.tsx +394 -0
  35. package/template/asset-manage-template/src/components/bidPackage__c/mainTableColumns.tsx +57 -0
  36. package/template/asset-manage-template/src/components/bidPackage__c/model.ts +86 -0
  37. package/template/asset-manage-template/src/components/bidPackage__c/style.scss +256 -0
  38. package/template/asset-manage-template/src/components/bidPackage__c/types.ts +35 -0
  39. package/template/asset-manage-template/src/components/bidPackage__c/utils.ts +19 -0
  40. package/template/{neo-bi-cmps → asset-manage-template}/src/utils/axiosFetcher.ts +0 -0
  41. package/template/{neo-bi-cmps → asset-manage-template}/src/utils/queryObjectData.ts +36 -0
  42. package/template/asset-manage-template/src/utils/url.ts +82 -0
  43. package/template/{neo-bi-cmps → asset-manage-template}/src/utils/xobjects.ts +0 -0
  44. package/template/asset-manage-template/tsconfig.json +40 -0
  45. package/template/echarts-custom-cmp-template/package.json +1 -1
  46. package/template/empty-custom-cmp-template/package.json +2 -2
  47. package/template/neo-custom-cmp-template/package.json +5 -2
  48. package/template/neo-custom-cmp-template/src/components/entityTable__c/index.tsx +62 -6
  49. package/template/neo-custom-cmp-template/src/utils/queryObjectData.ts +36 -0
  50. package/template/neo-custom-cmp-template/tsconfig.json +1 -2
  51. package/template/neo-h5-cmps/neo.config.js +1 -6
  52. package/template/neo-h5-cmps/package.json +7 -4
  53. package/template/neo-h5-cmps/src/utils/queryObjectData.ts +36 -0
  54. package/template/neo-h5-cmps/tsconfig.json +3 -4
  55. package/template/neo-order-cmps/package.json +2 -2
  56. package/template/neo-order-cmps/src/utils/queryObjectData.ts +36 -0
  57. package/template/neo-web-cmps/@types/neo-ui-common.d.ts +36 -0
  58. package/template/neo-web-cmps/neo.config.js +53 -0
  59. package/template/{neo-bi-cmps → neo-web-cmps}/package.json +10 -7
  60. package/template/neo-web-cmps/src/assets/img/AIBtn.gif +0 -0
  61. package/template/neo-web-cmps/src/assets/img/aiLogo.png +0 -0
  62. package/template/neo-web-cmps/src/assets/img/card-list.svg +1 -0
  63. package/template/neo-web-cmps/src/assets/img/contact-form.svg +1 -0
  64. package/template/neo-web-cmps/src/assets/img/custom-form.svg +1 -0
  65. package/template/neo-web-cmps/src/assets/img/data-list.svg +1 -0
  66. package/template/neo-web-cmps/src/assets/img/detail.svg +1 -0
  67. package/template/neo-web-cmps/src/assets/img/map.svg +1 -0
  68. package/template/neo-web-cmps/src/assets/img/search.svg +1 -0
  69. package/template/neo-web-cmps/src/components/entityGrid2__c/index.tsx +72 -0
  70. package/template/neo-web-cmps/src/components/entityGrid2__c/model.ts +195 -0
  71. package/template/neo-web-cmps/src/components/entityGrid2__c/style.scss +13 -0
  72. package/template/neo-web-cmps/src/components/entityGrid__c/index.tsx +52 -0
  73. package/template/neo-web-cmps/src/components/entityGrid__c/model.ts +195 -0
  74. package/template/neo-web-cmps/src/components/entityGrid__c/style.scss +13 -0
  75. package/template/neo-web-cmps/src/utils/axiosFetcher.ts +37 -0
  76. package/template/neo-web-cmps/src/utils/queryObjectData.ts +112 -0
  77. package/template/{develop/neo-custom-cmp-template → neo-web-cmps}/src/utils/xobjects.ts +28 -64
  78. package/template/{neo-bi-cmps → neo-web-cmps}/tsconfig.json +2 -3
  79. package/template/react-custom-cmp-template/package.json +1 -1
  80. package/template/react-ts-custom-cmp-template/package.json +1 -1
  81. package/template/vue2-custom-cmp-template/package.json +1 -1
  82. package/template/develop/BI /351/241/271/347/233/256/345/210/206/346/236/220/346/212/245/345/221/212.md" +0 -562
  83. package/template/develop/ChatPage /347/273/204/344/273/266/344/275/277/347/224/250/350/257/264/346/230/216/346/226/207/346/241/243.md" +0 -507
  84. package/template/develop/EntityGrid Web /347/273/204/344/273/266/347/232/204/350/257/246/347/273/206/345/210/206/346/236/220/346/226/207/346/241/243.md" +0 -868
  85. package/template/develop/EntityList H5 /347/273/204/344/273/266/347/232/204/350/257/246/347/273/206/345/210/206/346/236/220/346/226/207/346/241/243.md" +0 -1386
  86. package/template/develop/GlobalSearch/347/273/204/344/273/266/345/257/271/346/257/224/345/210/206/346/236/220.md +0 -866
  87. package/template/develop/Neo /344/270/255/345/217/257/347/224/250 amis /347/273/204/344/273/266.md" +0 -1490
  88. package/template/develop/cmpEventFunctions.ts +0 -257
  89. package/template/develop/cmpEvents.ts +0 -864
  90. package/template/develop/comTree/347/224/237/346/210/220/350/277/207/347/250/213/345/210/206/346/236/220.md +0 -469
  91. package/template/develop/commonModules.js +0 -55
  92. package/template/develop/components-table.md +0 -50
  93. package/template/develop/neo-custom-cmp-template/README.md +0 -48
  94. package/template/develop/neo-custom-cmp-template/docs/README.md +0 -13
  95. package/template/develop/neo-custom-cmp-template/neo.config.js +0 -121
  96. package/template/develop/neo-custom-cmp-template/package.json +0 -63
  97. package/template/develop/neo-custom-cmp-template/src/components/contactCardList/README.md +0 -65
  98. package/template/develop/neo-custom-cmp-template/src/components/contactCardList/index.tsx +0 -180
  99. package/template/develop/neo-custom-cmp-template/src/components/contactCardList/model.ts +0 -50
  100. package/template/develop/neo-custom-cmp-template/src/components/contactCardList/style.scss +0 -260
  101. package/template/develop/neo-custom-cmp-template/src/components/contactForm/README.md +0 -94
  102. package/template/develop/neo-custom-cmp-template/src/components/contactForm/index.tsx +0 -252
  103. package/template/develop/neo-custom-cmp-template/src/components/contactForm/model.ts +0 -56
  104. package/template/develop/neo-custom-cmp-template/src/components/contactForm/style.scss +0 -120
  105. package/template/develop/neo-custom-cmp-template/src/components/neoEntityGrid/README.md +0 -115
  106. package/template/develop/neo-custom-cmp-template/src/components/neoEntityGrid/index.tsx +0 -304
  107. package/template/develop/neo-custom-cmp-template/src/components/neoEntityGrid/model.ts +0 -87
  108. package/template/develop/neo-custom-cmp-template/src/components/neoEntityGrid/style.scss +0 -127
  109. package/template/develop/neo-custom-cmp-template/src/utils/axiosFetcher.ts +0 -29
  110. package/template/develop/neo-custom-cmp-template/src/utils/queryObjectData.ts +0 -39
  111. package/template/develop/neo-custom-cmp-template/tsconfig.json +0 -68
  112. package/template/develop/neo-ui-component-h5.md +0 -105
  113. package/template/develop/neo-ui-component-web-xregister.md +0 -31
  114. package/template/develop/neo-ui-component-web.md +0 -292
  115. package/template/develop/neoCmps.ts +0 -7508
  116. package/template/develop/neoGlobalSearchInput /347/273/204/344/273/266/347/232/204/350/257/246/347/273/206/345/210/206/346/236/220/346/226/207/346/241/243.md" +0 -497
  117. package/template/develop/pageSchema1.json +0 -744
  118. package/template/develop//344/272/213/344/273/266/345/212/250/344/275/234/344/277/235/345/255/230/346/265/201/347/250/213/345/210/206/346/236/220.md +0 -390
  119. package/template/develop//345/215/225/345/205/203/346/265/213/350/257/225/344/275/277/347/224/250/350/257/264/346/230/216.md +0 -1139
  120. package/template/develop//345/261/236/346/200/247/351/205/215/347/275/256/351/241/271/347/261/273/345/236/213/346/261/207/346/200/273.md +0 -558
  121. package/template/neo-bi-cmps/neo.config.js +0 -124
  122. package/template/neo-bi-cmps/src/components/targetNumber__c/README.md +0 -100
  123. package/template/neo-bi-cmps/src/components/targetNumber__c/customStyleConfig/configSchema.ts +0 -253
  124. package/template/neo-bi-cmps/src/components/targetNumber__c/customStyleConfig/index.scss +0 -76
  125. package/template/neo-bi-cmps/src/components/targetNumber__c/customStyleConfig/index.tsx +0 -148
  126. package/template/neo-bi-cmps/src/components/targetNumber__c/index.tsx +0 -440
  127. package/template/neo-bi-cmps/src/components/targetNumber__c/model.ts +0 -128
  128. package/template/neo-bi-cmps/src/components/targetNumber__c/style.scss +0 -173
  129. /package/template/{develop/neo-custom-cmp-template → asset-manage-template}/.prettierrc.js +0 -0
  130. /package/template/{neo-bi-cmps → asset-manage-template}/@types/neo-ui-common.d.ts +0 -0
  131. /package/template/{develop/neo-custom-cmp-template → asset-manage-template}/commitlint.config.js +0 -0
  132. /package/template/{develop/neo-custom-cmp-template → asset-manage-template}/public/css/base.css +0 -0
  133. /package/template/{develop/neo-custom-cmp-template → asset-manage-template}/public/scripts/app/bluebird.js +0 -0
  134. /package/template/{develop/neo-custom-cmp-template → asset-manage-template}/public/template.html +0 -0
  135. /package/template/{develop/neo-custom-cmp-template → asset-manage-template}/src/assets/css/common.scss +0 -0
  136. /package/template/{develop/neo-custom-cmp-template → asset-manage-template}/src/assets/css/mixin.scss +0 -0
  137. /package/template/{neo-bi-cmps → asset-manage-template}/src/assets/img/AIBtn.gif +0 -0
  138. /package/template/{develop/neo-custom-cmp-template → asset-manage-template}/src/assets/img/NeoCRM.jpg +0 -0
  139. /package/template/{neo-bi-cmps → asset-manage-template}/src/assets/img/aiLogo.png +0 -0
  140. /package/template/{neo-bi-cmps → asset-manage-template}/src/assets/img/card-list.svg +0 -0
  141. /package/template/{neo-bi-cmps → asset-manage-template}/src/assets/img/contact-form.svg +0 -0
  142. /package/template/{neo-bi-cmps → asset-manage-template}/src/assets/img/custom-form.svg +0 -0
  143. /package/template/{develop/neo-custom-cmp-template → asset-manage-template}/src/assets/img/custom-widget.svg +0 -0
  144. /package/template/{neo-bi-cmps → asset-manage-template}/src/assets/img/data-list.svg +0 -0
  145. /package/template/{neo-bi-cmps → asset-manage-template}/src/assets/img/detail.svg +0 -0
  146. /package/template/{develop/neo-custom-cmp-template → asset-manage-template}/src/assets/img/favicon.png +0 -0
  147. /package/template/{neo-bi-cmps → asset-manage-template}/src/assets/img/map.svg +0 -0
  148. /package/template/{neo-bi-cmps → asset-manage-template}/src/assets/img/search.svg +0 -0
  149. /package/template/{develop/neo-custom-cmp-template → asset-manage-template}/src/assets/img/table.svg +0 -0
  150. /package/template/{neo-bi-cmps → neo-web-cmps}/.prettierrc.js +0 -0
  151. /package/template/{neo-bi-cmps → neo-web-cmps}/README.md +0 -0
  152. /package/template/{neo-bi-cmps → neo-web-cmps}/commitlint.config.js +0 -0
  153. /package/template/{neo-bi-cmps → neo-web-cmps}/public/css/base.css +0 -0
  154. /package/template/{neo-bi-cmps → neo-web-cmps}/public/scripts/app/bluebird.js +0 -0
  155. /package/template/{neo-bi-cmps → neo-web-cmps}/public/template.html +0 -0
  156. /package/template/{neo-bi-cmps → neo-web-cmps}/src/assets/css/common.scss +0 -0
  157. /package/template/{neo-bi-cmps → neo-web-cmps}/src/assets/css/mixin.scss +0 -0
  158. /package/template/{neo-bi-cmps → neo-web-cmps}/src/assets/img/NeoCRM.jpg +0 -0
  159. /package/template/{neo-bi-cmps → neo-web-cmps}/src/assets/img/custom-widget.svg +0 -0
  160. /package/template/{neo-bi-cmps → neo-web-cmps}/src/assets/img/favicon.png +0 -0
  161. /package/template/{neo-bi-cmps → neo-web-cmps}/src/assets/img/table.svg +0 -0
@@ -1,260 +0,0 @@
1
- .contact-card-list-container {
2
- position: relative;
3
- box-sizing: border-box;
4
- height: 100%;
5
- display: flex;
6
- flex-direction: column;
7
- margin: 6px 12px;
8
- padding: 12px;
9
- background-color: #fff;
10
- border-radius: 8px;
11
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
12
-
13
- .card-list-header {
14
- flex-shrink: 0;
15
- margin-bottom: 16px;
16
- border-bottom: 1px solid #f0f0f0;
17
- padding-bottom: 12px;
18
-
19
- .header-content {
20
- display: flex;
21
- justify-content: space-between;
22
- align-items: center;
23
- gap: 16px;
24
- }
25
-
26
- .header-title {
27
- margin: 0;
28
- font-family: PingFangSC-Medium, -apple-system, BlinkMacSystemFont,
29
- 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
30
- font-size: 18px;
31
- font-weight: 500;
32
- line-height: 1.4;
33
- color: #262626;
34
- flex: 1;
35
- }
36
-
37
- .refresh-button {
38
- flex-shrink: 0;
39
- border-radius: 6px;
40
- font-size: 13px;
41
- height: 32px;
42
- padding: 4px 12px;
43
- box-shadow: 0 2px 4px rgba(24, 144, 255, 0.2);
44
- transition: all 0.3s ease;
45
-
46
- &:hover {
47
- box-shadow: 0 4px 8px rgba(24, 144, 255, 0.3);
48
- transform: translateY(-1px);
49
- }
50
-
51
- &:active {
52
- transform: translateY(0);
53
- }
54
-
55
- .anticon {
56
- font-size: 12px;
57
- }
58
- }
59
- }
60
-
61
- .card-list-content {
62
- flex: 1;
63
- overflow-y: auto;
64
-
65
- .error-container {
66
- display: flex;
67
- justify-content: center;
68
- align-items: center;
69
- min-height: 300px;
70
- padding: 20px;
71
-
72
- .retry-button {
73
- padding: 8px 16px;
74
- background-color: #1890ff;
75
- color: white;
76
- border: none;
77
- border-radius: 4px;
78
- cursor: pointer;
79
- font-size: 14px;
80
- transition: background-color 0.3s;
81
-
82
- &:hover {
83
- background-color: #40a9ff;
84
- }
85
-
86
- &:active {
87
- background-color: #096dd9;
88
- }
89
- }
90
- }
91
- }
92
-
93
- .contact-card {
94
- height: 100%;
95
- border-radius: 12px;
96
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
97
- transition: all 0.3s ease;
98
- border: 1px solid #f0f0f0;
99
-
100
- &:hover {
101
- box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
102
- transform: translateY(-2px);
103
- border-color: #d9d9d9;
104
- }
105
-
106
- .ant-card-body {
107
- padding: 16px;
108
- height: 100%;
109
- display: flex;
110
- align-items: center;
111
- }
112
-
113
- .contact-card-content {
114
- display: flex;
115
- align-items: center;
116
- width: 100%;
117
- gap: 12px;
118
-
119
- .contact-avatar {
120
- flex-shrink: 0;
121
-
122
- .avatar-icon {
123
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
124
- border: 2px solid #fff;
125
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
126
- }
127
- }
128
-
129
- .contact-info {
130
- flex: 1;
131
- min-width: 0;
132
-
133
- .contact-name,
134
- .contact-phone {
135
- display: flex;
136
- align-items: center;
137
- margin-bottom: 4px;
138
- gap: 6px;
139
-
140
- &:last-child {
141
- margin-bottom: 0;
142
- }
143
-
144
- .info-icon {
145
- font-size: 12px;
146
- color: #8c8c8c;
147
- flex-shrink: 0;
148
- }
149
-
150
- .name-text,
151
- .phone-text {
152
- font-size: 14px;
153
- line-height: 1.4;
154
- overflow: hidden;
155
- text-overflow: ellipsis;
156
- white-space: nowrap;
157
- }
158
-
159
- .name-text {
160
- color: #262626;
161
- font-weight: 500;
162
- }
163
-
164
- .phone-text {
165
- color: #595959;
166
- font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo,
167
- Courier, monospace;
168
- }
169
- }
170
-
171
- .contact-name {
172
- margin-bottom: 8px;
173
- }
174
- }
175
- }
176
- }
177
-
178
- // 响应式设计
179
- @media (max-width: 768px) {
180
- margin: 4px 8px;
181
- padding: 8px;
182
-
183
- .card-list-header {
184
- margin-bottom: 12px;
185
- padding-bottom: 8px;
186
-
187
- .header-content {
188
- gap: 12px;
189
- }
190
-
191
- .header-title {
192
- font-size: 16px;
193
- }
194
-
195
- .refresh-button {
196
- height: 28px;
197
- padding: 2px 8px;
198
- font-size: 12px;
199
-
200
- .anticon {
201
- font-size: 11px;
202
- }
203
- }
204
- }
205
-
206
- .contact-card {
207
- .ant-card-body {
208
- padding: 12px;
209
- }
210
-
211
- .contact-card-content {
212
- gap: 8px;
213
-
214
- .contact-avatar {
215
- .avatar-icon {
216
- width: 40px !important;
217
- height: 40px !important;
218
- line-height: 40px !important;
219
- }
220
- }
221
-
222
- .contact-info {
223
- .contact-name,
224
- .contact-phone {
225
- .name-text,
226
- .phone-text {
227
- font-size: 13px;
228
- }
229
- }
230
- }
231
- }
232
- }
233
- }
234
-
235
- @media (max-width: 480px) {
236
- .contact-card {
237
- .contact-card-content {
238
- flex-direction: column;
239
- text-align: center;
240
- gap: 8px;
241
-
242
- .contact-info {
243
- .contact-name,
244
- .contact-phone {
245
- justify-content: center;
246
- }
247
- }
248
- }
249
- }
250
- }
251
- }
252
-
253
- // 全局样式覆盖
254
- .ant-spin-container {
255
- min-height: 200px;
256
- }
257
-
258
- .ant-empty {
259
- padding: 40px 20px;
260
- }
@@ -1,94 +0,0 @@
1
- # 联系人表单组件
2
-
3
- 基于 Ant Design 的联系人表单组件,支持姓名、所有人、业务类型、所属部门、手机号等字段的输入和提交。
4
-
5
- ## 功能特性
6
-
7
- - ✅ 基于 Ant Design 4.x 组件库
8
- - ✅ 表单字段验证(姓名和手机号为必填项)
9
- - ✅ 手机号格式验证
10
- - ✅ 数据提交到 Neo 平台 API
11
- - ✅ 加载状态显示
12
- - ✅ 成功/错误消息提示
13
- - ✅ 响应式设计
14
- - ✅ 使用 React state 管理表单数据
15
-
16
- ## 表单字段
17
-
18
- | 字段名 | 类型 | 必填 | 说明 |
19
- |--------|------|------|------|
20
- | 姓名 | text | ✅ | 联系人姓名 |
21
- | 所有人 | number | ❌ | 联系人用户ID (userId) |
22
- | 业务类型 | select | ❌ | 销售/市场/客服/技术/其他 (entityType) |
23
- | 所属部门 | number | ❌ | 联系人所属部门ID (dimDepart) |
24
- | 手机号 | number | ✅ | 联系人手机号(格式验证)(phone__c) |
25
-
26
- ## API 接口
27
-
28
- 组件会将表单数据提交到以下接口:
29
-
30
- ```
31
- POST /rest/data/v2.0/xobjects/customContact__c
32
- ```
33
-
34
- ### 请求数据格式
35
-
36
- ```json
37
- {
38
- "name": "张三",
39
- "userId": 12345,
40
- "entityType": 3998003734470119,
41
- "dimDepart": 67890,
42
- "phone__c": "13800138000"
43
- }
44
- ```
45
-
46
- ## 组件属性
47
-
48
- | 属性名 | 类型 | 默认值 | 说明 |
49
- |--------|------|--------|------|
50
- | title | string | '创建联系人' | 表单标题 |
51
- | data | object | {} | Neo 平台数据(包含用户信息和系统信息) |
52
-
53
- ## 使用示例
54
-
55
- ```tsx
56
- import ContactForm from './components/contact-form';
57
-
58
- // 在页面中使用
59
- <ContactForm
60
- title="创建新联系人"
61
- data={amisData}
62
- />
63
- ```
64
-
65
- ## 技术栈
66
-
67
- - React 16.9.0
68
- - TypeScript
69
- - Ant Design 4.x
70
- - SCSS
71
-
72
- ## 样式定制
73
-
74
- 组件基于 Ant Design 设计规范,支持通过 SCSS 进行样式定制:
75
-
76
- ```scss
77
- .contact-form-container {
78
- .contact-form-card {
79
- // 卡片样式定制
80
- }
81
-
82
- .contact-form {
83
- // 表单样式定制
84
- }
85
- }
86
- ```
87
-
88
- ## 注意事项
89
-
90
- 1. 确保 Neo 平台已正确配置 `customContact__c` 对象
91
- 2. 组件依赖 `antd` 和 `axios` 进行 UI 渲染和 API 调用
92
- 3. 需要确保用户有创建联系人的权限
93
- 4. 手机号格式验证仅支持中国大陆手机号(1开头的11位数字)
94
- 5. 组件使用 React state 管理表单数据,无需手动处理 ref
@@ -1,252 +0,0 @@
1
- import * as React from 'react';
2
- import { Form, Input, Select, Button, message, Card } from 'antd';
3
- import { getEntityTypeList, createXObject } from '../../utils/xobjects';
4
- const { Option } = Select;
5
-
6
- import './style.scss';
7
-
8
- interface ContactFormProps {
9
- title: string;
10
- data?: any;
11
- }
12
-
13
- interface ContactFormState {
14
- formData: {
15
- name: string;
16
- entityType?: number;
17
- phone__c: string;
18
- };
19
- title: string;
20
- entityTypeList: any[];
21
- loading: boolean;
22
- }
23
-
24
- export default class ContactForm extends React.PureComponent<
25
- ContactFormProps,
26
- ContactFormState
27
- > {
28
- private formRef: any;
29
-
30
- constructor(props: ContactFormProps) {
31
- super(props);
32
-
33
- this.state = {
34
- formData: {
35
- name: 'wibetter',
36
- phone__c: '15900000003',
37
- },
38
- entityTypeList: [],
39
- loading: false,
40
- };
41
-
42
- // 获取业务类型列表
43
- getEntityTypeList('customContact__c').then((res: any) => {
44
- if (res && res.code === '200') {
45
- const result = res.data || {};
46
- this.setState({
47
- entityTypeList: result.records || [],
48
- });
49
- }
50
- });
51
-
52
- this.handleInputChange = this.handleInputChange.bind(this);
53
- this.handleSubmit = this.handleSubmit.bind(this);
54
- this.resetForm = this.resetForm.bind(this);
55
- }
56
-
57
- handleInputChange(
58
- field: keyof ContactFormState['formData'],
59
- value: string | number,
60
- ) {
61
- this.setState((prevState) => ({
62
- formData: {
63
- ...prevState.formData,
64
- [field]: value,
65
- },
66
- }));
67
- }
68
-
69
- validateForm() {
70
- const { formData } = this.state;
71
-
72
- if (!formData.name.trim()) {
73
- message.error('请输入联系人姓名');
74
- return false;
75
- }
76
-
77
- if (!formData.phone__c.trim()) {
78
- message.error('请输入手机号');
79
- return false;
80
- }
81
-
82
- // 手机号格式验证
83
- const phoneRegex = /^1[3-9]\d{9}$/;
84
- if (!phoneRegex.test(formData.phone__c)) {
85
- message.error('请输入正确的手机号格式');
86
- return false;
87
- }
88
-
89
- return true;
90
- }
91
-
92
- async handleSubmit() {
93
- if (!this.validateForm()) {
94
- return;
95
- }
96
- this.setState({ loading: true });
97
-
98
- try {
99
- const { formData } = this.state;
100
- // 获取当前用户信息
101
- const curAmisData = this.props.data || {};
102
- const userInfo = curAmisData.__NeoCurrentUser;
103
-
104
- // 准备提交的数据
105
- let submitData = {
106
- name: formData.name.trim(),
107
- phone__c: formData.phone__c.trim(),
108
- entityType: formData.entityType
109
- };
110
-
111
- if (userInfo && userInfo.id) {
112
- submitData = Object.assign(submitData, {
113
- userId: userInfo.id,
114
- dimDepart: userInfo.departId,
115
- });
116
- }
117
-
118
- console.log('提交联系人数据:', submitData);
119
-
120
- // 调用 API 提交数据
121
- const response: any = await createXObject('customContact__c', {
122
- method: 'POST',
123
- data: submitData,
124
- });
125
-
126
- if (response && response.code === '200') {
127
- console.log('联系人创建成功:', response.data);
128
-
129
- message.success('联系人创建成功!');
130
- // 成功后重置表单
131
- setTimeout(() => {
132
- this.resetForm();
133
- }, 1000);
134
- } else {
135
- message.error('创建联系人失败:', response.message);
136
- }
137
- } catch (error: any) {
138
- message.error('创建联系人失败:', error);
139
- } finally {
140
- this.setState({ loading: false });
141
- }
142
- }
143
-
144
- resetForm() {
145
- this.setState({
146
- formData: {
147
- name: '',
148
- phone__c: '',
149
- },
150
- });
151
-
152
- // 重置 Ant Design 表单
153
- if (this.formRef) {
154
- this.formRef.resetFields();
155
- }
156
- }
157
-
158
- render() {
159
- const { title } = this.props;
160
- const { formData, loading, entityTypeList } = this.state;
161
- const curAmisData = this.props.data || {};
162
- const systemInfo = curAmisData.__NeoSystemInfo || {};
163
-
164
- return (
165
- <div className="contact-form-container">
166
- <Card
167
- title={title || '创建联系人'}
168
- extra={systemInfo.tenantName ? `【${systemInfo.tenantName}】` : ''}
169
- className="contact-form-card"
170
- >
171
- <Form
172
- ref={(ref) => {
173
- this.formRef = ref;
174
- }}
175
- layout="vertical"
176
- className="contact-form"
177
- initialValues={formData}
178
- >
179
- <Form.Item
180
- label="姓名"
181
- required
182
- rules={[{ required: true, message: '请输入联系人姓名' }]}
183
- >
184
- <Input
185
- value={formData.name}
186
- onChange={(e) => this.handleInputChange('name', e.target.value)}
187
- placeholder="请输入联系人姓名"
188
- disabled={loading}
189
- />
190
- </Form.Item>
191
-
192
- <Form.Item
193
- label="手机号"
194
- required
195
- rules={[
196
- { required: true, message: '请输入手机号' },
197
- { pattern: /^1[3-9]\d{9}$/, message: '请输入正确的手机号格式' },
198
- ]}
199
- >
200
- <Input
201
- value={formData.phone__c}
202
- onChange={(e) =>
203
- this.handleInputChange('phone__c', e.target.value)
204
- }
205
- placeholder="请输入手机号"
206
- disabled={loading}
207
- />
208
- </Form.Item>
209
-
210
- <Form.Item label="业务类型">
211
- <Select
212
- value={formData.entityType}
213
- onChange={(value) =>
214
- this.handleInputChange('entityType', value)
215
- }
216
- placeholder="请选择业务类型"
217
- disabled={loading}
218
- >
219
- {entityTypeList.map((item) => (
220
- <Option
221
- key={item.apiKey}
222
- value={item.id}
223
- disabled={!item.active}
224
- >
225
- {item.label}
226
- </Option>
227
- ))}
228
- </Select>
229
- </Form.Item>
230
-
231
- <Form.Item className="form-actions">
232
- <Button
233
- onClick={this.resetForm}
234
- disabled={loading}
235
- style={{ marginRight: 8 }}
236
- >
237
- 重置
238
- </Button>
239
- <Button
240
- type="primary"
241
- onClick={this.handleSubmit}
242
- loading={loading}
243
- >
244
- 保存联系人
245
- </Button>
246
- </Form.Item>
247
- </Form>
248
- </Card>
249
- </div>
250
- );
251
- }
252
- }
@@ -1,56 +0,0 @@
1
- /**
2
- * @file 自定义组件对接编辑器的描述文件
3
- */
4
- export class ContactFormModel {
5
- /**
6
- * cmpType 为自定义组件名称,用于标识组件的唯一性
7
- * 在构建时根据当前组件目录名称自动生成
8
- */
9
- // cmpType: string = 'contact-form';
10
-
11
- // 组件名称,用于设置在编辑器左侧组件面板中展示的名称
12
- label: string = '联系人表单';
13
-
14
- // 组件描述,用于设置在编辑器左侧组件面板中展示的描述
15
- description: string =
16
- '基于 Ant Design 的联系人表单组件,支持姓名、所有人、业务类型、所属部门、手机号等字段';
17
-
18
- // 分类标签,用于设置在编辑器左侧组件面板哪个分类中展示
19
- // tags: string[] = ['自定义组件'];
20
-
21
- // 组件图标,用于设置在编辑器左侧组件面板中展示的图标
22
- iconUrl: string = 'https://custom-widgets.bj.bcebos.com/contact-form.svg';
23
-
24
- // 初次插入页面的默认属性数据
25
- defaultComProps = {
26
- title: '创建联系人',
27
- label: '联系人表单',
28
- };
29
-
30
- // 设计器端预览时展示的默认数据
31
- previewComProps = {
32
- label: '联系人表单',
33
- };
34
-
35
- /**
36
- * 组件面板配置,用于生成编辑器右侧属性配置面板内容
37
- */
38
- propsSchema = [
39
- {
40
- type: 'textarea',
41
- name: 'title',
42
- label: '表单标题',
43
- value: '创建联系人',
44
- placeholder: '请输入表单标题',
45
- },
46
- ];
47
-
48
- // 支持 函数式写法:propsSchemaCreator,com 为组件实例。优先级比 propsSchema 高
49
- /*
50
- propsSchemaCreator = (com: any) => {
51
- return [];
52
- };
53
- */
54
- }
55
-
56
- export default ContactFormModel;