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 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: '打印',
... ...
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 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 }) =&gt; {
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 }) =&gt; {
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 }) =&gt; {
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 }) =&gt; {
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 }) =&gt; {
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 }) =&gt; {
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 }) =&gt; {
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 }) =&gt; {
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 }) =&gt; {
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
... ...