Commit 84323eed4c1cf9741497897b043b278f9e4a4bab
Merge branch 'warning' of http://39.108.227.113:8001/zhusen/canrd-erp-front into warning
Showing
4 changed files
with
4826 additions
and
19 deletions
Too many changes to show.
To preserve performance only 4 of 47 files are displayed.
.umirc.ts
@@ -141,10 +141,21 @@ export default defineConfig({ | @@ -141,10 +141,21 @@ export default defineConfig({ | ||
141 | }, | 141 | }, |
142 | { | 142 | { |
143 | name: '客户管理', | 143 | name: '客户管理', |
144 | - path: '/client', | ||
145 | - component: './Client', | 144 | + path: '/Client', |
146 | icon: 'BookOutlined', | 145 | icon: 'BookOutlined', |
147 | access: 'canReadAdminAndSales', | 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 | name: '打印', | 161 | name: '打印', |
dist.zip
0 → 100644
No preview for this file type
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,23 +6,34 @@ import { | ||
6 | postDistrictSelectByNameAndLevel, | 6 | postDistrictSelectByNameAndLevel, |
7 | postDistrictSelOrderProvince, | 7 | postDistrictSelOrderProvince, |
8 | postServiceConstClientLevels, | 8 | postServiceConstClientLevels, |
9 | + postServiceConstClientSource, | ||
9 | postServiceConstTradeStatus, | 10 | postServiceConstTradeStatus, |
10 | } from '@/services'; | 11 | } from '@/services'; |
12 | + | ||
11 | import { enumToSelect } from '@/utils'; | 13 | import { enumToSelect } from '@/utils'; |
12 | import { | 14 | import { |
13 | DrawerForm, | 15 | DrawerForm, |
14 | - ProFormDateTimePicker, | 16 | + ProFormDatePicker, |
15 | ProFormSelect, | 17 | ProFormSelect, |
16 | ProFormText, | 18 | ProFormText, |
17 | } from '@ant-design/pro-components'; | 19 | } from '@ant-design/pro-components'; |
18 | import { Button, Form, message } from 'antd'; | 20 | import { Button, Form, message } from 'antd'; |
21 | +// import { options } from 'node_modules/axios/index.cjs'; | ||
19 | import { useState } from 'react'; | 22 | import { useState } from 'react'; |
20 | 23 | ||
21 | export default ({ optType, record, onFinish }) => { | 24 | export default ({ optType, record, onFinish }) => { |
22 | const [form] = Form.useForm(); | 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 | const [province, setProvince] = useState(''); | 33 | const [province, setProvince] = useState(''); |
25 | const [city, setCity] = useState(''); | 34 | const [city, setCity] = useState(''); |
35 | + const [showReferrers, setShowReferrers] = useState(false); // 控制显示的状态,初始为false | ||
36 | + const [showQuoteDatetime, setShowQuoteDatetime] = useState(false); // 控制显示的状态,初始为false | ||
26 | const optTypeEnum = { | 37 | const optTypeEnum = { |
27 | add: { | 38 | add: { |
28 | text: '新增', | 39 | text: '新增', |
@@ -42,7 +53,7 @@ export default ({ optType, record, onFinish }) => { | @@ -42,7 +53,7 @@ export default ({ optType, record, onFinish }) => { | ||
42 | }, | 53 | }, |
43 | edit: { | 54 | edit: { |
44 | text: '编辑', | 55 | text: '编辑', |
45 | - button: <a type="primary">编辑</a>, | 56 | + button: <a type="link">编辑</a>, |
46 | readonly: false, | 57 | readonly: false, |
47 | onFinish: async (values) => { | 58 | onFinish: async (values) => { |
48 | const res = await postAdminClientModifyClientInfo({ | 59 | const res = await postAdminClientModifyClientInfo({ |
@@ -58,11 +69,43 @@ export default ({ optType, record, onFinish }) => { | @@ -58,11 +69,43 @@ export default ({ optType, record, onFinish }) => { | ||
58 | }, | 69 | }, |
59 | detail: { | 70 | detail: { |
60 | text: '详情', | 71 | text: '详情', |
61 | - button: <a type="primary">详情</a>, | 72 | + // button: <a type="primary">详情</a>, |
62 | readonly: true, | 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 | return ( | 109 | return ( |
67 | <DrawerForm | 110 | <DrawerForm |
68 | title={optTypeEnum[optType].text} | 111 | title={optTypeEnum[optType].text} |
@@ -73,7 +116,7 @@ export default ({ optType, record, onFinish }) => { | @@ -73,7 +116,7 @@ export default ({ optType, record, onFinish }) => { | ||
73 | maxWidth: window.innerWidth * 0.8, | 116 | maxWidth: window.innerWidth * 0.8, |
74 | minWidth: 300, | 117 | minWidth: 300, |
75 | }} | 118 | }} |
76 | - initialValues={record} | 119 | + initialValues={parsedRecord} |
77 | form={form} | 120 | form={form} |
78 | trigger={optTypeEnum[optType].button} | 121 | trigger={optTypeEnum[optType].button} |
79 | autoFocusFirstInput | 122 | autoFocusFirstInput |
@@ -98,7 +141,7 @@ export default ({ optType, record, onFinish }) => { | @@ -98,7 +141,7 @@ export default ({ optType, record, onFinish }) => { | ||
98 | }, | 141 | }, |
99 | ]} | 142 | ]} |
100 | /> | 143 | /> |
101 | - <ProFormText | 144 | + {/* <ProFormText |
102 | name="companyName" | 145 | name="companyName" |
103 | label="单位名称" | 146 | label="单位名称" |
104 | placeholder="请输入单位名称" | 147 | placeholder="请输入单位名称" |
@@ -108,7 +151,7 @@ export default ({ optType, record, onFinish }) => { | @@ -108,7 +151,7 @@ export default ({ optType, record, onFinish }) => { | ||
108 | message: '请输入单位名称', | 151 | message: '请输入单位名称', |
109 | }, | 152 | }, |
110 | ]} | 153 | ]} |
111 | - /> | 154 | + /> */} |
112 | <div | 155 | <div |
113 | style={{ | 156 | style={{ |
114 | display: 'flex', | 157 | display: 'flex', |
@@ -260,7 +303,7 @@ export default ({ optType, record, onFinish }) => { | @@ -260,7 +303,7 @@ export default ({ optType, record, onFinish }) => { | ||
260 | /> | 303 | /> |
261 | </div> | 304 | </div> |
262 | <ProFormText | 305 | <ProFormText |
263 | - name="companyAddress" | 306 | + name="detailAddress" |
264 | label="详细地址" | 307 | label="详细地址" |
265 | placeholder="请输入单位地址" | 308 | placeholder="请输入单位地址" |
266 | rules={[ | 309 | rules={[ |
@@ -271,6 +314,17 @@ export default ({ optType, record, onFinish }) => { | @@ -271,6 +314,17 @@ export default ({ optType, record, onFinish }) => { | ||
271 | ]} | 314 | ]} |
272 | /> | 315 | /> |
273 | <ProFormText | 316 | <ProFormText |
317 | + name="contacts" | ||
318 | + label="联系人" | ||
319 | + placeholder="请输入联系人" | ||
320 | + rules={[ | ||
321 | + { | ||
322 | + required: true, | ||
323 | + message: '请输入联系人', | ||
324 | + }, | ||
325 | + ]} | ||
326 | + /> | ||
327 | + <ProFormText | ||
274 | name="phoneNumber" | 328 | name="phoneNumber" |
275 | label="联系电话" | 329 | label="联系电话" |
276 | placeholder="请输入联系电话" | 330 | placeholder="请输入联系电话" |
@@ -281,23 +335,52 @@ export default ({ optType, record, onFinish }) => { | @@ -281,23 +335,52 @@ export default ({ optType, record, onFinish }) => { | ||
281 | }, | 335 | }, |
282 | ]} | 336 | ]} |
283 | /> | 337 | /> |
284 | - <ProFormText | 338 | + <ProFormSelect |
285 | name="source" | 339 | name="source" |
286 | label="客户来源" | 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 | name="requirements" | 364 | name="requirements" |
291 | label="客户需求" | 365 | label="客户需求" |
292 | placeholder="请输入客户需求" | 366 | placeholder="请输入客户需求" |
367 | + valueEnum={requirementsEnum} | ||
368 | + fieldProps={{ | ||
369 | + mode: 'multiple', | ||
370 | + }} | ||
293 | rules={[ | 371 | rules={[ |
294 | { | 372 | { |
295 | required: true, | 373 | required: true, |
296 | message: '请输入客户需求', | 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 | <ProFormSelect | 384 | <ProFormSelect |
302 | name="hasScheme" | 385 | name="hasScheme" |
303 | label="是否已报方案" | 386 | label="是否已报方案" |
@@ -318,12 +401,17 @@ export default ({ optType, record, onFinish }) => { | @@ -318,12 +401,17 @@ export default ({ optType, record, onFinish }) => { | ||
318 | message: '请选择是否已报方案', | 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 | <ProFormSelect | 415 | <ProFormSelect |
328 | name="level" | 416 | name="level" |
329 | label="客户等级" | 417 | label="客户等级" |
@@ -336,7 +424,17 @@ export default ({ optType, record, onFinish }) => { | @@ -336,7 +424,17 @@ export default ({ optType, record, onFinish }) => { | ||
336 | ]} | 424 | ]} |
337 | request={async () => { | 425 | request={async () => { |
338 | const res = await postServiceConstClientLevels(); | 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 | <ProFormSelect | 440 | <ProFormSelect |