neo-cmp-cli 1.13.8 → 1.13.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 (57) hide show
  1. package/dist/neo/neoLogin.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 +4 -1
  5. package/template/asset-manage-template/package.json +4 -8
  6. package/template/echarts-custom-cmp-template/package.json +4 -1
  7. package/template/empty-custom-cmp-template/package.json +4 -1
  8. package/template/map-custom-cmp-template/package.json +4 -1
  9. package/template/neo-bi-cmps/package.json +3 -0
  10. package/template/neo-custom-cmp-template/package.json +1 -1
  11. package/template/neo-h5-cmps/package.json +1 -1
  12. package/template/neo-order-cmps/package.json +4 -1
  13. package/template/neo-web-entity-grid/package.json +1 -1
  14. package/template/neo-web-entity-grid/src/components/createForm__c/index.tsx +9 -4
  15. package/template/neo-web-entity-grid/src/components/createForm__c/model.ts +4 -2
  16. package/template/neo-web-entity-grid/src/components/entityGrid3__c/model.ts +2 -2
  17. package/template/neo-web-entity-grid/src/components/searchForm__c/index.tsx +6 -10
  18. package/template/neo-web-entity-grid/src/components/searchForm__c/model.ts +1 -1
  19. package/template/neo-web-entity-grid/src/components/searchForm__c/style.scss +205 -229
  20. package/template/neo-web-form/.prettierrc.js +12 -0
  21. package/template/neo-web-form/@types/neo-ui-common.d.ts +36 -0
  22. package/template/neo-web-form/README.md +99 -0
  23. package/template/neo-web-form/commitlint.config.js +59 -0
  24. package/template/neo-web-form/neo.config.js +57 -0
  25. package/template/neo-web-form/package.json +66 -0
  26. package/template/neo-web-form/public/css/base.css +283 -0
  27. package/template/neo-web-form/public/scripts/app/bluebird.js +6679 -0
  28. package/template/neo-web-form/public/template.html +13 -0
  29. package/template/neo-web-form/src/assets/css/common.scss +127 -0
  30. package/template/neo-web-form/src/assets/css/mixin.scss +47 -0
  31. package/template/neo-web-form/src/assets/img/AIBtn.gif +0 -0
  32. package/template/neo-web-form/src/assets/img/NeoCRM.jpg +0 -0
  33. package/template/neo-web-form/src/assets/img/aiLogo.png +0 -0
  34. package/template/neo-web-form/src/assets/img/card-list.svg +1 -0
  35. package/template/neo-web-form/src/assets/img/contact-form.svg +1 -0
  36. package/template/neo-web-form/src/assets/img/custom-form.svg +1 -0
  37. package/template/neo-web-form/src/assets/img/custom-widget.svg +1 -0
  38. package/template/neo-web-form/src/assets/img/data-list.svg +1 -0
  39. package/template/neo-web-form/src/assets/img/detail.svg +1 -0
  40. package/template/neo-web-form/src/assets/img/favicon.png +0 -0
  41. package/template/neo-web-form/src/assets/img/map.svg +1 -0
  42. package/template/neo-web-form/src/assets/img/search.svg +1 -0
  43. package/template/neo-web-form/src/assets/img/table.svg +1 -0
  44. package/template/neo-web-form/src/components/batchAddTable__c/index.tsx +1052 -0
  45. package/template/neo-web-form/src/components/batchAddTable__c/model.ts +90 -0
  46. package/template/neo-web-form/src/components/batchAddTable__c/style.scss +21 -0
  47. package/template/neo-web-form/src/components/batchAddTable__c/tableModal.scss +137 -0
  48. package/template/neo-web-form/src/components/listSummary__c/index.tsx +120 -0
  49. package/template/neo-web-form/src/components/listSummary__c/model.ts +69 -0
  50. package/template/neo-web-form/src/components/listSummary__c/style.scss +40 -0
  51. package/template/neo-web-form/src/utils/axiosFetcher.ts +37 -0
  52. package/template/neo-web-form/src/utils/queryObjectData.ts +112 -0
  53. package/template/neo-web-form/src/utils/xobjects.ts +167 -0
  54. package/template/neo-web-form/tsconfig.json +39 -0
  55. package/template/react-custom-cmp-template/package.json +1 -1
  56. package/template/react-ts-custom-cmp-template/package.json +4 -1
  57. package/template/vue2-custom-cmp-template/package.json +1 -1
@@ -1,38 +1,105 @@
1
+ /* 查询表单:仅作用于 .searchForm__c,避免污染全局 Ant 组件 */
1
2
  .searchForm__c {
3
+ --sf-accent: #1890ff;
4
+ --sf-accent-soft: rgba(24, 144, 255, 0.12);
5
+ --sf-text: #262626;
6
+ --sf-text-secondary: #595959;
7
+ --sf-text-muted: #8c8c8c;
8
+ --sf-border: rgba(0, 0, 0, 0.08);
9
+ --sf-radius: 10px;
10
+ --sf-radius-sm: 8px;
11
+ --sf-shadow: 0 1px 2px rgba(0, 0, 0, 0.04), 0 8px 24px rgba(0, 0, 0, 0.06);
12
+
13
+ color: var(--sf-text);
14
+
15
+ .searchForm__c-card {
16
+ border-radius: var(--sf-radius);
17
+ border: 1px solid var(--sf-border);
18
+ box-shadow: var(--sf-shadow);
19
+ background: #fff;
20
+ overflow: hidden;
21
+ transition: box-shadow 0.25s ease, border-color 0.25s ease;
22
+
23
+ &:hover {
24
+ border-color: rgba(24, 144, 255, 0.18);
25
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04), 0 12px 32px rgba(0, 0, 0, 0.08);
26
+ }
27
+
28
+ .ant-card-body {
29
+ padding: 20px 24px 22px;
30
+ }
31
+ }
32
+
2
33
  .form-header {
3
- margin-bottom: 24px;
34
+ display: flex;
35
+ align-items: flex-start;
36
+ gap: 14px;
37
+ margin: 0 0 20px;
4
38
  padding-bottom: 16px;
5
- border-bottom: 1px solid #f0f0f0;
39
+ border-bottom: 1px solid var(--sf-border);
40
+
41
+ &::before {
42
+ content: '';
43
+ flex-shrink: 0;
44
+ width: 4px;
45
+ min-height: 22px;
46
+ margin-top: 3px;
47
+ border-radius: 2px;
48
+ background: linear-gradient(180deg, var(--sf-accent) 0%, #69c0ff 100%);
49
+ }
50
+
51
+ .form-header-text {
52
+ flex: 1;
53
+ min-width: 0;
54
+ }
6
55
 
7
56
  .form-title {
8
57
  margin: 0;
9
- font-size: 18px;
58
+ font-size: 17px;
10
59
  font-weight: 600;
11
- color: #262626;
60
+ color: var(--sf-text);
61
+ letter-spacing: -0.02em;
62
+ line-height: 1.35;
63
+ }
64
+
65
+ .form-tenant {
66
+ margin-top: 6px;
67
+ font-size: 13px;
68
+ color: var(--sf-text-muted);
69
+ line-height: 1.4;
12
70
  }
13
71
  }
14
72
 
15
73
  .form-content {
74
+ .ant-spin-nested-loading > div > .ant-spin {
75
+ max-height: none;
76
+ }
77
+
78
+ .ant-spin {
79
+ .ant-spin-dot {
80
+ font-size: 22px;
81
+ }
82
+
83
+ .ant-spin-text {
84
+ color: var(--sf-text-muted);
85
+ font-size: 13px;
86
+ margin-top: 8px;
87
+ }
88
+ }
89
+
16
90
  .ant-form {
17
91
  .ant-form-item {
18
- margin-bottom: 20px;
92
+ margin-bottom: 18px;
19
93
 
20
94
  .ant-form-item-label {
21
- padding-bottom: 6px;
95
+ padding-bottom: 4px;
22
96
 
23
- label {
97
+ > label {
24
98
  font-weight: 500;
25
- color: #262626;
99
+ color: var(--sf-text-secondary);
26
100
  font-size: 14px;
27
-
28
- &::before {
29
- display: inline-block;
30
- margin-right: 4px;
31
- color: #ff4d4f;
32
- font-size: 14px;
33
- font-family: SimSun, sans-serif;
34
- line-height: 1;
35
- }
101
+ height: auto;
102
+ line-height: 1.5;
36
103
  }
37
104
  }
38
105
 
@@ -40,21 +107,21 @@
40
107
  .ant-select-selector,
41
108
  .ant-input-number,
42
109
  .ant-picker {
43
- border-radius: 4px;
44
- border: 1px solid #d9d9d9;
45
- transition: all 0.3s;
110
+ border-radius: var(--sf-radius-sm);
111
+ border-color: var(--sf-border);
112
+ transition: border-color 0.2s ease, box-shadow 0.2s ease;
46
113
 
47
114
  &:hover {
48
- border-color: #40a9ff;
115
+ border-color: #91d5ff;
49
116
  }
117
+ }
50
118
 
51
- &:focus,
52
- &.ant-input-focused,
53
- &.ant-select-focused .ant-select-selector,
54
- &.ant-picker-focused {
55
- border-color: #40a9ff;
56
- box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);
57
- }
119
+ .ant-input:focus,
120
+ .ant-input-focused,
121
+ .ant-select-focused:not(.ant-select-disabled) .ant-select-selector,
122
+ .ant-picker-focused {
123
+ border-color: var(--sf-accent);
124
+ box-shadow: 0 0 0 3px var(--sf-accent-soft);
58
125
  }
59
126
 
60
127
  .ant-input-number {
@@ -65,7 +132,8 @@
65
132
  textarea {
66
133
  resize: vertical;
67
134
  min-height: 80px;
68
- border-radius: 4px;
135
+ border-radius: var(--sf-radius-sm);
136
+ padding: 8px 11px;
69
137
  }
70
138
  }
71
139
 
@@ -78,7 +146,6 @@
78
146
  }
79
147
  }
80
148
 
81
- // 错误提示样式
82
149
  .ant-form-item-has-error {
83
150
  .ant-input,
84
151
  .ant-select-selector,
@@ -86,9 +153,10 @@
86
153
  .ant-picker {
87
154
  border-color: #ff4d4f;
88
155
 
89
- &:focus {
90
- border-color: #ff4d4f;
91
- box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.2);
156
+ &:focus,
157
+ &.ant-input-focused,
158
+ &.ant-picker-focused {
159
+ box-shadow: 0 0 0 3px rgba(255, 77, 79, 0.12);
92
160
  }
93
161
  }
94
162
  }
@@ -99,12 +167,12 @@
99
167
  padding: 12px 16px;
100
168
  background-color: #f6ffed;
101
169
  border: 1px solid #b7eb8f;
102
- border-radius: 4px;
170
+ border-radius: var(--sf-radius-sm);
103
171
  color: #52c41a;
104
172
  font-size: 14px;
105
173
  display: flex;
106
174
  align-items: center;
107
- animation: fadeIn 0.3s ease-in;
175
+ animation: searchFormFadeIn 0.3s ease;
108
176
 
109
177
  .anticon {
110
178
  margin-right: 8px;
@@ -113,79 +181,96 @@
113
181
  }
114
182
 
115
183
  .form-actions {
116
- margin-top: 32px;
117
- padding-top: 24px;
118
- border-top: 1px solid #f0f0f0;
119
- text-align: center;
184
+ display: flex;
185
+ justify-content: flex-end;
186
+ flex-wrap: wrap;
187
+ gap: 12px;
188
+ margin-top: 8px;
189
+ padding-top: 20px;
190
+ border-top: 1px solid var(--sf-border);
120
191
 
121
192
  .ant-space {
122
- .ant-btn {
123
- min-width: 100px;
124
- height: 40px;
125
- font-size: 15px;
126
- border-radius: 4px;
127
- font-weight: 500;
128
- transition: all 0.3s;
129
-
130
- &.ant-btn-primary {
131
- background: #1890ff;
132
- border-color: #1890ff;
133
-
134
- &:hover {
135
- background: #40a9ff;
136
- border-color: #40a9ff;
137
- transform: translateY(-2px);
138
- box-shadow: 0 4px 12px rgba(24, 144, 255, 0.3);
139
- }
140
-
141
- &:active {
142
- background: #096dd9;
143
- border-color: #096dd9;
144
- transform: translateY(0);
145
- }
146
-
147
- &:disabled {
148
- background: #f5f5f5;
149
- border-color: #d9d9d9;
150
- color: rgba(0, 0, 0, 0.25);
151
- transform: none;
152
- box-shadow: none;
153
- }
193
+ flex-wrap: wrap;
194
+ }
195
+
196
+ .ant-btn {
197
+ min-width: 96px;
198
+ height: 38px;
199
+ padding: 0 18px;
200
+ font-size: 14px;
201
+ border-radius: var(--sf-radius-sm);
202
+ font-weight: 500;
203
+ transition: border-color 0.2s ease, background 0.2s ease, box-shadow 0.2s ease;
204
+
205
+ &.ant-btn-primary {
206
+ background: var(--sf-accent);
207
+ border-color: var(--sf-accent);
208
+ box-shadow: 0 2px 0 rgba(0, 0, 0, 0.02);
209
+
210
+ &:hover:not(:disabled) {
211
+ background: #40a9ff;
212
+ border-color: #40a9ff;
213
+ box-shadow: 0 4px 12px rgba(24, 144, 255, 0.35);
214
+ }
215
+
216
+ &:active:not(:disabled) {
217
+ background: #096dd9;
218
+ border-color: #096dd9;
154
219
  }
155
220
 
156
- &:not(.ant-btn-primary) {
157
- &:hover {
158
- color: #40a9ff;
159
- border-color: #40a9ff;
160
- transform: translateY(-2px);
161
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
162
- }
163
-
164
- &:active {
165
- color: #096dd9;
166
- border-color: #096dd9;
167
- transform: translateY(0);
168
- }
221
+ &:disabled {
222
+ background: #f5f5f5;
223
+ border-color: #d9d9d9;
224
+ color: rgba(0, 0, 0, 0.25);
225
+ box-shadow: none;
226
+ }
227
+ }
228
+
229
+ &:not(.ant-btn-primary) {
230
+ border-color: var(--sf-border);
231
+ color: var(--sf-text-secondary);
232
+
233
+ &:hover:not(:disabled) {
234
+ color: var(--sf-accent);
235
+ border-color: #91d5ff;
169
236
  }
170
237
  }
171
238
  }
172
239
  }
173
240
 
174
241
  .ant-empty {
175
- padding: 40px 0;
242
+ padding: 36px 16px;
176
243
 
177
244
  .ant-empty-description {
178
- color: #8c8c8c;
245
+ color: var(--sf-text-muted);
179
246
  font-size: 14px;
180
247
  }
181
248
  }
182
249
  }
183
250
 
184
- // 动画效果
185
- @keyframes fadeIn {
251
+ .ant-input-number {
252
+ .ant-input-number-handler-wrap {
253
+ opacity: 0;
254
+ transition: opacity 0.2s ease;
255
+ }
256
+
257
+ &:hover .ant-input-number-handler-wrap {
258
+ opacity: 1;
259
+ }
260
+
261
+ .ant-input-number-handler {
262
+ border-left: 1px solid var(--sf-border);
263
+
264
+ &:hover {
265
+ background-color: #fafafa;
266
+ }
267
+ }
268
+ }
269
+
270
+ @keyframes searchFormFadeIn {
186
271
  from {
187
272
  opacity: 0;
188
- transform: translateY(-10px);
273
+ transform: translateY(-6px);
189
274
  }
190
275
  to {
191
276
  opacity: 1;
@@ -193,178 +278,69 @@
193
278
  }
194
279
  }
195
280
 
196
- // 响应式设计
197
281
  @media (max-width: 768px) {
282
+ .searchForm__c-card .ant-card-body {
283
+ padding: 16px 16px 18px;
284
+ }
285
+
198
286
  .form-header {
199
287
  margin-bottom: 16px;
200
288
  padding-bottom: 12px;
289
+ gap: 10px;
201
290
 
202
291
  .form-title {
203
292
  font-size: 16px;
204
293
  }
294
+
295
+ .form-tenant {
296
+ font-size: 12px;
297
+ }
205
298
  }
206
299
 
207
300
  .form-content {
208
- .ant-form {
209
- .ant-form-item {
210
- margin-bottom: 16px;
211
-
212
- .ant-form-item-label {
213
- label {
214
- font-size: 13px;
215
- }
216
- }
301
+ .ant-form .ant-form-item {
302
+ margin-bottom: 14px;
217
303
 
218
- .ant-input,
219
- .ant-select-selector,
220
- .ant-input-number,
221
- .ant-picker {
222
- font-size: 14px;
223
- }
304
+ .ant-form-item-label > label {
305
+ font-size: 13px;
224
306
  }
225
307
  }
226
308
 
227
- .form-actions {
228
- margin-top: 24px;
229
- padding-top: 16px;
230
-
231
- .ant-space {
232
- .ant-btn {
233
- min-width: 80px;
234
- height: 36px;
235
- font-size: 14px;
236
- }
237
- }
309
+ .form-actions .ant-btn {
310
+ min-width: 88px;
311
+ height: 36px;
312
+ font-size: 13px;
238
313
  }
239
314
  }
240
315
  }
241
316
 
242
317
  @media (max-width: 576px) {
243
- .form-header {
244
- .form-title {
245
- font-size: 15px;
246
- }
318
+ .form-header .form-title {
319
+ font-size: 15px;
247
320
  }
248
321
 
249
322
  .form-content {
250
- .ant-form {
251
- // 在小屏幕上强制单列显示
252
- .ant-row {
253
- .ant-col {
254
- max-width: 100% !important;
255
- flex: 0 0 100% !important;
256
- }
257
- }
258
-
259
- .ant-form-item {
260
- margin-bottom: 14px;
261
-
262
- .ant-form-item-label {
263
- label {
264
- font-size: 13px;
265
- }
266
- }
267
- }
323
+ .ant-form .ant-row .ant-col {
324
+ max-width: 100% !important;
325
+ flex: 0 0 100% !important;
268
326
  }
269
327
 
270
328
  .form-actions {
329
+ justify-content: stretch;
330
+
271
331
  .ant-space {
272
332
  width: 100%;
333
+ }
273
334
 
274
- .ant-space-item {
275
- flex: 1;
276
- }
335
+ .ant-space-item {
336
+ flex: 1;
337
+ }
277
338
 
278
- .ant-btn {
279
- width: 100%;
280
- min-width: auto;
281
- }
339
+ .ant-btn {
340
+ width: 100%;
341
+ min-width: 0;
282
342
  }
283
343
  }
284
344
  }
285
345
  }
286
346
  }
287
-
288
- // 全局样式覆盖
289
- .ant-card {
290
- border-radius: 6px;
291
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
292
-
293
- .ant-card-body {
294
- padding: 24px;
295
- }
296
- }
297
-
298
- // Spin 加载样式
299
- .ant-spin {
300
- .ant-spin-dot {
301
- font-size: 20px;
302
- }
303
-
304
- .ant-spin-text {
305
- color: #8c8c8c;
306
- font-size: 14px;
307
- }
308
- }
309
-
310
- // Select 下拉样式优化
311
- .ant-select-dropdown {
312
- border-radius: 4px;
313
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
314
-
315
- .ant-select-item {
316
- padding: 8px 12px;
317
-
318
- &:hover {
319
- background-color: #f5f5f5;
320
- }
321
-
322
- &.ant-select-item-option-selected {
323
- background-color: #e6f7ff;
324
- color: #1890ff;
325
- font-weight: 500;
326
- }
327
- }
328
- }
329
-
330
- // DatePicker 日期选择器样式优化
331
- .ant-picker-dropdown {
332
- .ant-picker-panel-container {
333
- border-radius: 4px;
334
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
335
- }
336
-
337
- .ant-picker-cell-selected {
338
- .ant-picker-cell-inner {
339
- background-color: #1890ff;
340
- }
341
- }
342
-
343
- .ant-picker-cell:hover:not(.ant-picker-cell-selected) {
344
- .ant-picker-cell-inner {
345
- background-color: #f5f5f5;
346
- }
347
- }
348
- }
349
-
350
- // InputNumber 数字输入框样式优化
351
- .ant-input-number {
352
- .ant-input-number-handler-wrap {
353
- opacity: 0;
354
- transition: opacity 0.3s;
355
- }
356
-
357
- &:hover {
358
- .ant-input-number-handler-wrap {
359
- opacity: 1;
360
- }
361
- }
362
-
363
- .ant-input-number-handler {
364
- border-left: 1px solid #d9d9d9;
365
-
366
- &:hover {
367
- background-color: #f5f5f5;
368
- }
369
- }
370
- }
@@ -0,0 +1,12 @@
1
+ /*
2
+ prettier 配置文件
3
+ 更多配置信息:https://prettier.io/docs/en/options.html
4
+ */
5
+ module.exports = {
6
+ semi: true, // Semicolons 分号,默认需要分号
7
+ tabWidth: 2, // 空格,默认 2,
8
+ useTabs: false,
9
+ singleQuote: true, // 单引号还是双引号,默认为false 双引号
10
+ trailingComma: 'all', // 逗号
11
+ jsxBracketSameLine: false, // 默认为false,Put the > of a multi-line JSX element at the end of the last line instead of being alone on the next line (does not apply to self closing elements).
12
+ };
@@ -0,0 +1,36 @@
1
+ import * as React from 'react';
2
+
3
+ /**
4
+ * BaseCmpProps 基础组件属性接口
5
+ */
6
+ export interface BaseCmpProps {
7
+ [key: string]: any;
8
+ }
9
+
10
+ /**
11
+ * ScopedComponentType 作用域组件类型接口
12
+ */
13
+ export interface ScopedComponentType {
14
+ [key: string]: any;
15
+ }
16
+
17
+ /**
18
+ * BaseCmp 基础组件类
19
+ * 继承自 React.PureComponent,提供基础组件功能
20
+ */
21
+ export declare class BaseCmp<
22
+ T extends BaseCmpProps = BaseCmpProps,
23
+ S = any
24
+ > extends React.PureComponent<T, S> implements ScopedComponentType {
25
+ props: Readonly<T> & Readonly<{ children?: React.ReactNode }>;
26
+ state: Readonly<S>;
27
+ setState<K extends keyof S>(
28
+ state:
29
+ | ((prevState: Readonly<S>, props: Readonly<T>) => Pick<S, K> | S | null)
30
+ | (Pick<S, K> | S | null),
31
+ callback?: () => void
32
+ ): void;
33
+ forceUpdate(callback?: () => void): void;
34
+ render(): React.ReactNode;
35
+ }
36
+