Commit 84323eed4c1cf9741497897b043b278f9e4a4bab

Authored by 曾国涛
2 parents 19ca3d46 5f016613

Merge branch 'warning' of http://39.108.227.113:8001/zhusen/canrd-erp-front into warning

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 }) =&gt; { @@ -58,11 +69,43 @@ export default ({ optType, record, onFinish }) =&gt; {
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 }) =&gt; { @@ -73,7 +116,7 @@ export default ({ optType, record, onFinish }) =&gt; {
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 }) =&gt; { @@ -98,7 +141,7 @@ export default ({ optType, record, onFinish }) =&gt; {
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 }) =&gt; { @@ -108,7 +151,7 @@ export default ({ optType, record, onFinish }) =&gt; {
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 }) =&gt; { @@ -260,7 +303,7 @@ export default ({ optType, record, onFinish }) =&gt; {
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 }) =&gt; { @@ -271,6 +314,17 @@ export default ({ optType, record, onFinish }) =&gt; {
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 }) =&gt; { @@ -281,23 +335,52 @@ export default ({ optType, record, onFinish }) =&gt; {
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 }) =&gt; { @@ -318,12 +401,17 @@ export default ({ optType, record, onFinish }) =&gt; {
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 }) =&gt; { @@ -336,7 +424,17 @@ export default ({ optType, record, onFinish }) =&gt; {
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