Commit 42506df2bc1673fd20301b8081729db26177a02b
Merge branch 'by' into warning
Showing
3 changed files
with
4826 additions
and
19 deletions
Too many changes to show.
To preserve performance only 3 of 45 files are displayed.
.umirc.ts
... | ... | @@ -141,10 +141,21 @@ export default defineConfig({ |
141 | 141 | }, |
142 | 142 | { |
143 | 143 | name: '客户管理', |
144 | - path: '/client', | |
145 | - component: './Client', | |
144 | + path: '/Client', | |
146 | 145 | icon: 'BookOutlined', |
147 | 146 | access: 'canReadAdminAndSales', |
147 | + routes: [ | |
148 | + { | |
149 | + name: '客户列表', | |
150 | + path: 'clint', | |
151 | + component: './Client/Client', | |
152 | + }, | |
153 | + { | |
154 | + name: '跟进记录', | |
155 | + path: 'FollowRecord', | |
156 | + component: './Client/FollowRecord', | |
157 | + }, | |
158 | + ], | |
148 | 159 | }, |
149 | 160 | { |
150 | 161 | name: '打印', | ... | ... |
order-erp.service-1.0-SNAPSHOT.jar
0 → 100644
No preview for this file type
src/pages/Client/Components/ClientDrawer.tsx renamed to src/pages/Client/Client/Components/ClientDrawer.tsx
... | ... | @@ -6,23 +6,34 @@ import { |
6 | 6 | postDistrictSelectByNameAndLevel, |
7 | 7 | postDistrictSelOrderProvince, |
8 | 8 | postServiceConstClientLevels, |
9 | + postServiceConstClientSource, | |
9 | 10 | postServiceConstTradeStatus, |
10 | 11 | } from '@/services'; |
12 | + | |
11 | 13 | import { enumToSelect } from '@/utils'; |
12 | 14 | import { |
13 | 15 | DrawerForm, |
14 | - ProFormDateTimePicker, | |
16 | + ProFormDatePicker, | |
15 | 17 | ProFormSelect, |
16 | 18 | ProFormText, |
17 | 19 | } from '@ant-design/pro-components'; |
18 | 20 | import { Button, Form, message } from 'antd'; |
21 | +// import { options } from 'node_modules/axios/index.cjs'; | |
19 | 22 | import { useState } from 'react'; |
20 | 23 | |
21 | 24 | export default ({ optType, record, onFinish }) => { |
22 | 25 | const [form] = Form.useForm(); |
26 | + const requirementsEnum = { | |
27 | + EXPERIMENTAL_EQUIPMENT: '实验设备', | |
28 | + EXPERIMENTAL_MATERIALS: '实验材料', | |
29 | + OTHER: '其他', | |
30 | + PILOT_TEST_VALIDATION_SERVICES: '中式验证服务', | |
31 | + }; | |
23 | 32 | //省市区 |
24 | 33 | const [province, setProvince] = useState(''); |
25 | 34 | const [city, setCity] = useState(''); |
35 | + const [showReferrers, setShowReferrers] = useState(false); // 控制显示的状态,初始为false | |
36 | + const [showQuoteDatetime, setShowQuoteDatetime] = useState(false); // 控制显示的状态,初始为false | |
26 | 37 | const optTypeEnum = { |
27 | 38 | add: { |
28 | 39 | text: '新增', |
... | ... | @@ -42,7 +53,7 @@ export default ({ optType, record, onFinish }) => { |
42 | 53 | }, |
43 | 54 | edit: { |
44 | 55 | text: '编辑', |
45 | - button: <a type="primary">编辑</a>, | |
56 | + button: <a type="link">编辑</a>, | |
46 | 57 | readonly: false, |
47 | 58 | onFinish: async (values) => { |
48 | 59 | const res = await postAdminClientModifyClientInfo({ |
... | ... | @@ -58,11 +69,43 @@ export default ({ optType, record, onFinish }) => { |
58 | 69 | }, |
59 | 70 | detail: { |
60 | 71 | text: '详情', |
61 | - button: <a type="primary">详情</a>, | |
72 | + // button: <a type="primary">详情</a>, | |
62 | 73 | readonly: true, |
63 | 74 | }, |
64 | 75 | }; |
65 | 76 | |
77 | + const handleSourceChange = (value) => { | |
78 | + if (value === 'REFERRAL_BY_ACQUAINTANCE') { | |
79 | + setShowReferrers(true); | |
80 | + } else { | |
81 | + setShowReferrers(false); | |
82 | + } | |
83 | + // 在这里可以添加其他逻辑,比如根据选择更新其他表单项的值 | |
84 | + }; | |
85 | + const handleSchemeChange = (value) => { | |
86 | + console.log(value); | |
87 | + if (value === true) { | |
88 | + setShowQuoteDatetime(true); | |
89 | + } else { | |
90 | + setShowQuoteDatetime(false); | |
91 | + } | |
92 | + // 在这里可以添加其他逻辑,比如根据选择更新其他表单项的值 | |
93 | + }; | |
94 | + | |
95 | + // MODIFIED: 增加处理非 JSON 格式字符串的逻辑 | |
96 | + const parsedRecord = record | |
97 | + ? { | |
98 | + ...record, | |
99 | + requirements: (() => { | |
100 | + try { | |
101 | + return JSON.parse(record.requirements); // 尝试解析 JSON | |
102 | + } catch (error) { | |
103 | + return record.requirements ? record.requirements.split(',') : []; // 如果不是 JSON,则按逗号分隔字符串 | |
104 | + } | |
105 | + })(), | |
106 | + } | |
107 | + : {}; // 如果 record 为空,返回一个空对象 | |
108 | + | |
66 | 109 | return ( |
67 | 110 | <DrawerForm |
68 | 111 | title={optTypeEnum[optType].text} |
... | ... | @@ -73,7 +116,7 @@ export default ({ optType, record, onFinish }) => { |
73 | 116 | maxWidth: window.innerWidth * 0.8, |
74 | 117 | minWidth: 300, |
75 | 118 | }} |
76 | - initialValues={record} | |
119 | + initialValues={parsedRecord} | |
77 | 120 | form={form} |
78 | 121 | trigger={optTypeEnum[optType].button} |
79 | 122 | autoFocusFirstInput |
... | ... | @@ -98,7 +141,7 @@ export default ({ optType, record, onFinish }) => { |
98 | 141 | }, |
99 | 142 | ]} |
100 | 143 | /> |
101 | - <ProFormText | |
144 | + {/* <ProFormText | |
102 | 145 | name="companyName" |
103 | 146 | label="单位名称" |
104 | 147 | placeholder="请输入单位名称" |
... | ... | @@ -108,7 +151,7 @@ export default ({ optType, record, onFinish }) => { |
108 | 151 | message: '请输入单位名称', |
109 | 152 | }, |
110 | 153 | ]} |
111 | - /> | |
154 | + /> */} | |
112 | 155 | <div |
113 | 156 | style={{ |
114 | 157 | display: 'flex', |
... | ... | @@ -260,7 +303,7 @@ export default ({ optType, record, onFinish }) => { |
260 | 303 | /> |
261 | 304 | </div> |
262 | 305 | <ProFormText |
263 | - name="companyAddress" | |
306 | + name="detailAddress" | |
264 | 307 | label="详细地址" |
265 | 308 | placeholder="请输入单位地址" |
266 | 309 | rules={[ |
... | ... | @@ -271,6 +314,17 @@ export default ({ optType, record, onFinish }) => { |
271 | 314 | ]} |
272 | 315 | /> |
273 | 316 | <ProFormText |
317 | + name="contacts" | |
318 | + label="联系人" | |
319 | + placeholder="请输入联系人" | |
320 | + rules={[ | |
321 | + { | |
322 | + required: true, | |
323 | + message: '请输入联系人', | |
324 | + }, | |
325 | + ]} | |
326 | + /> | |
327 | + <ProFormText | |
274 | 328 | name="phoneNumber" |
275 | 329 | label="联系电话" |
276 | 330 | placeholder="请输入联系电话" |
... | ... | @@ -281,23 +335,52 @@ export default ({ optType, record, onFinish }) => { |
281 | 335 | }, |
282 | 336 | ]} |
283 | 337 | /> |
284 | - <ProFormText | |
338 | + <ProFormSelect | |
285 | 339 | name="source" |
286 | 340 | label="客户来源" |
287 | - placeholder="请输入客户来源" | |
341 | + placeholder="请选择客户来源" | |
342 | + request={async () => { | |
343 | + const res = await postServiceConstClientSource(); | |
344 | + return enumToSelect(res.data); | |
345 | + }} | |
346 | + rules={[ | |
347 | + { | |
348 | + required: true, | |
349 | + message: '请选择客户来源', | |
350 | + }, | |
351 | + ]} | |
352 | + fieldProps={{ | |
353 | + onChange: handleSourceChange, // 添加onChange事件处理函数 | |
354 | + }} | |
288 | 355 | /> |
289 | - <ProFormText | |
356 | + {showReferrers && ( | |
357 | + <ProFormText | |
358 | + name="referrers" | |
359 | + label="推荐人" | |
360 | + placeholder="请输入推荐人" | |
361 | + /> | |
362 | + )} | |
363 | + <ProFormSelect | |
290 | 364 | name="requirements" |
291 | 365 | label="客户需求" |
292 | 366 | placeholder="请输入客户需求" |
367 | + valueEnum={requirementsEnum} | |
368 | + fieldProps={{ | |
369 | + mode: 'multiple', | |
370 | + }} | |
293 | 371 | rules={[ |
294 | 372 | { |
295 | 373 | required: true, |
296 | 374 | message: '请输入客户需求', |
375 | + type: 'array', | |
297 | 376 | }, |
298 | 377 | ]} |
378 | + // request={async () => { | |
379 | + // const res = await postServiceConstClientRequirements(); | |
380 | + // console.log(res.data, '5656require'); | |
381 | + // return enumToSelect(res.data); | |
382 | + // }} | |
299 | 383 | /> |
300 | - <ProFormText name="referrers" label="推荐人" placeholder="请输入推荐人" /> | |
301 | 384 | <ProFormSelect |
302 | 385 | name="hasScheme" |
303 | 386 | label="是否已报方案" |
... | ... | @@ -318,12 +401,17 @@ export default ({ optType, record, onFinish }) => { |
318 | 401 | message: '请选择是否已报方案', |
319 | 402 | }, |
320 | 403 | ]} |
404 | + fieldProps={{ | |
405 | + onChange: handleSchemeChange, // 添加onChange事件处理函数 | |
406 | + }} | |
321 | 407 | /> |
322 | - <ProFormDateTimePicker | |
323 | - name="quoteDatetime" | |
324 | - label="报价时间" | |
325 | - placeholder="请输入报价时间" | |
326 | - /> | |
408 | + {showQuoteDatetime && ( | |
409 | + <ProFormDatePicker | |
410 | + name="quoteDatetime" | |
411 | + label="报价时间" | |
412 | + placeholder="请输入报价时间" | |
413 | + /> | |
414 | + )} | |
327 | 415 | <ProFormSelect |
328 | 416 | name="level" |
329 | 417 | label="客户等级" |
... | ... | @@ -336,7 +424,17 @@ export default ({ optType, record, onFinish }) => { |
336 | 424 | ]} |
337 | 425 | request={async () => { |
338 | 426 | const res = await postServiceConstClientLevels(); |
339 | - return enumToSelect(res.data); | |
427 | + function enumToSelectLevel(data: any) { | |
428 | + const order = [ | |
429 | + 'PRIMARY_CLIENT', | |
430 | + 'SECONDARY_CLIENT', | |
431 | + 'TERTIARY_CLIENT', | |
432 | + ]; | |
433 | + return order.map((key) => { | |
434 | + return { label: data[key], value: key }; | |
435 | + }); | |
436 | + } | |
437 | + return enumToSelectLevel(res.data); | |
340 | 438 | }} |
341 | 439 | /> |
342 | 440 | <ProFormSelect | ... | ... |