Commit 31183be40797484f1ce3946c7a9b7502ca4ec912
Merge remote-tracking branch 'origin/dev' into dev
Showing
5 changed files
with
421 additions
and
176 deletions
Too many changes to show.
To preserve performance only 5 of 23 files are displayed.
.umirc.ts
@@ -139,9 +139,20 @@ export default defineConfig({ | @@ -139,9 +139,20 @@ export default defineConfig({ | ||
139 | { | 139 | { |
140 | name: '课题组管理', | 140 | name: '课题组管理', |
141 | path: '/researchGroup', | 141 | path: '/researchGroup', |
142 | - component: './ResearchGroup', | ||
143 | icon: 'AccountBookOutlined', | 142 | icon: 'AccountBookOutlined', |
144 | access: 'canReadAdminAndSales', | 143 | access: 'canReadAdminAndSales', |
144 | + routes: [ | ||
145 | + { | ||
146 | + name: '课题组列表', | ||
147 | + path: 'researchGroup', | ||
148 | + component: './ResearchGroup/ResearchGroup', | ||
149 | + }, | ||
150 | + { | ||
151 | + name: '课题组风险名单', | ||
152 | + path: 'researchGroupAccess', | ||
153 | + component: './ResearchGroup/ResearchGroupAccess', | ||
154 | + }, | ||
155 | + ], | ||
145 | }, | 156 | }, |
146 | { | 157 | { |
147 | name: '分期账单', | 158 | name: '分期账单', |
src/pages/Order/FeedBack/OrderList.tsx
@@ -2585,9 +2585,11 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) => { | @@ -2585,9 +2585,11 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) => { | ||
2585 | </span> | 2585 | </span> |
2586 | </div> | 2586 | </div> |
2587 | <span> | 2587 | <span> |
2588 | - <span className="text-[#8C8C8C]">联系人:</span> | 2588 | + <span className="text-[#8C8C8C]">课题组:</span> |
2589 | <span className="text-slate-700"> | 2589 | <span className="text-slate-700"> |
2590 | - {record.institutionContactName + ' '} | 2590 | + {record.institutionContactName |
2591 | + ? record.institutionContactName + ' ' | ||
2592 | + : '空'} | ||
2591 | </span> | 2593 | </span> |
2592 | </span> | 2594 | </span> |
2593 | </> | 2595 | </> |
src/pages/Order/OrderList/OrderDrawer.tsx
@@ -768,73 +768,69 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | @@ -768,73 +768,69 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | ||
768 | }> | 768 | }> |
769 | open | 769 | open |
770 | width={1000} | 770 | width={1000} |
771 | - title={drawerTitle} | ||
772 | - resize={{ | ||
773 | - onResize() { | ||
774 | - console.log('resize!'); | ||
775 | - }, | ||
776 | - maxWidth: window.innerWidth * 0.8, | ||
777 | - minWidth: 400, | 771 | + modalProps={{ |
772 | + destroyOnClose: true, | ||
773 | + maskClosable: true, | ||
774 | + title: ( | ||
775 | + <div | ||
776 | + style={{ display: 'flex', alignItems: 'center', width: '100%' }} | ||
777 | + > | ||
778 | + <span>{drawerTitle}</span> | ||
779 | + {hasLocalData && ( | ||
780 | + <Button | ||
781 | + key="useLocalData" | ||
782 | + type="link" | ||
783 | + onClick={() => { | ||
784 | + useLocalFormData(); | ||
785 | + }} | ||
786 | + > | ||
787 | + 使用草稿 | ||
788 | + </Button> | ||
789 | + )} | ||
790 | + </div> | ||
791 | + ), | ||
778 | }} | 792 | }} |
779 | onFinishFailed={() => { | 793 | onFinishFailed={() => { |
780 | message.error('表单项存在错误,请检查'); | 794 | message.error('表单项存在错误,请检查'); |
781 | setSubmitBtnLoading(false); | 795 | setSubmitBtnLoading(false); |
782 | }} | 796 | }} |
783 | submitter={{ | 797 | submitter={{ |
784 | - render: (props) => { | ||
785 | - return [ | ||
786 | - <Button | ||
787 | - key="cancel" | ||
788 | - onClick={() => { | ||
789 | - onClose(); | ||
790 | - }} | ||
791 | - > | ||
792 | - 取消 | ||
793 | - </Button>, | ||
794 | - <Button | ||
795 | - key="localSave" | ||
796 | - loading={localSaveLoading} | ||
797 | - hidden={!optType('add') && !optType('copy')} | ||
798 | - onClick={() => { | ||
799 | - setLocalSaveLoading(true); | ||
800 | - saveFormDataToLocal(); | ||
801 | - }} | ||
802 | - > | ||
803 | - 本地保存 | ||
804 | - </Button>, | ||
805 | - <Button | ||
806 | - key="ok" | ||
807 | - type="primary" | ||
808 | - loading={submitBtnLoading} | ||
809 | - disabled={optType('after-sales-check')} | ||
810 | - onClick={() => { | ||
811 | - setSubmitBtnLoading(true); | ||
812 | - props.submit(); | ||
813 | - }} | ||
814 | - > | ||
815 | - 提交 | ||
816 | - </Button>, | ||
817 | - ]; | ||
818 | - }, | ||
819 | - }} | ||
820 | - form={form} | ||
821 | - autoFocusFirstInput | ||
822 | - drawerProps={{ | ||
823 | - destroyOnClose: true, | ||
824 | - maskClosable: false, | ||
825 | - extra: [ | 798 | + render: (props) => [ |
799 | + <Button | ||
800 | + key="cancel" | ||
801 | + onClick={() => { | ||
802 | + onClose(); | ||
803 | + }} | ||
804 | + > | ||
805 | + 取消 | ||
806 | + </Button>, | ||
826 | <Button | 807 | <Button |
827 | - key="useLocalData" | ||
828 | - hidden={!hasLocalData} | ||
829 | - type="link" | 808 | + key="localSave" |
809 | + loading={localSaveLoading} | ||
810 | + hidden={!optType('add') && !optType('copy')} | ||
830 | onClick={() => { | 811 | onClick={() => { |
831 | - useLocalFormData(); | 812 | + setLocalSaveLoading(true); |
813 | + saveFormDataToLocal(); | ||
832 | }} | 814 | }} |
833 | > | 815 | > |
834 | - 使用草稿 | 816 | + 本地保存 |
817 | + </Button>, | ||
818 | + <Button | ||
819 | + key="ok" | ||
820 | + type="primary" | ||
821 | + loading={submitBtnLoading} | ||
822 | + disabled={optType('after-sales-check')} | ||
823 | + onClick={() => { | ||
824 | + setSubmitBtnLoading(true); | ||
825 | + props.submit(); | ||
826 | + }} | ||
827 | + > | ||
828 | + 提交 | ||
835 | </Button>, | 829 | </Button>, |
836 | ], | 830 | ], |
837 | }} | 831 | }} |
832 | + form={form} | ||
833 | + autoFocusFirstInput | ||
838 | submitTimeout={2000} | 834 | submitTimeout={2000} |
839 | onFinish={async (values) => { | 835 | onFinish={async (values) => { |
840 | let res = {}; | 836 | let res = {}; |
src/pages/Order/OrderList/OrderList.tsx
@@ -2627,9 +2627,11 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) => { | @@ -2627,9 +2627,11 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) => { | ||
2627 | </span> | 2627 | </span> |
2628 | </div> | 2628 | </div> |
2629 | <span> | 2629 | <span> |
2630 | - <span className="text-[#8C8C8C]">联系人:</span> | 2630 | + <span className="text-[#8C8C8C]">课题组:</span> |
2631 | <span className="text-slate-700"> | 2631 | <span className="text-slate-700"> |
2632 | - {record.institutionContactName + ' '} | 2632 | + {record.institutionContactName |
2633 | + ? record.institutionContactName + ' ' | ||
2634 | + : '空'} | ||
2633 | </span> | 2635 | </span> |
2634 | </span> | 2636 | </span> |
2635 | </> | 2637 | </> |
src/pages/Order/OrderWarning/components/OrderDrawer.tsx
@@ -11,6 +11,10 @@ import { | @@ -11,6 +11,10 @@ import { | ||
11 | postKingdeeRepMaterialUnit, | 11 | postKingdeeRepMaterialUnit, |
12 | postKingdeeRepMeasureUnit, | 12 | postKingdeeRepMeasureUnit, |
13 | postPrepaidPhoneAvailableList, | 13 | postPrepaidPhoneAvailableList, |
14 | + postResearchGroupsNameSet, | ||
15 | + postServiceConstCompanyType, | ||
16 | + postServiceConstOrderSource, | ||
17 | + postServiceConstPlatformType, | ||
14 | postServiceOrderAddOrder, | 18 | postServiceOrderAddOrder, |
15 | postServiceOrderAfterSalesQuerySnapshotOrder, | 19 | postServiceOrderAfterSalesQuerySnapshotOrder, |
16 | postServiceOrderApplyAfterSales, | 20 | postServiceOrderApplyAfterSales, |
@@ -28,17 +32,21 @@ import { getTeacherCustomFieldNumber } from '@/utils/kingdee'; | @@ -28,17 +32,21 @@ import { getTeacherCustomFieldNumber } from '@/utils/kingdee'; | ||
28 | import { getSalesCodeOptions } from '@/utils/order'; | 32 | import { getSalesCodeOptions } from '@/utils/order'; |
29 | import { getDefaultString } from '@/utils/StringUtil'; | 33 | import { getDefaultString } from '@/utils/StringUtil'; |
30 | import { | 34 | import { |
31 | - DrawerForm, | ||
32 | FormListActionType, | 35 | FormListActionType, |
36 | + ModalForm, | ||
33 | ProCard, | 37 | ProCard, |
38 | + ProFormDatePicker, | ||
34 | ProFormDateTimePicker, | 39 | ProFormDateTimePicker, |
40 | + ProFormDependency, | ||
35 | ProFormDigit, | 41 | ProFormDigit, |
36 | ProFormList, | 42 | ProFormList, |
43 | + ProFormRadio, | ||
37 | ProFormSelect, | 44 | ProFormSelect, |
38 | ProFormText, | 45 | ProFormText, |
39 | ProFormTextArea, | 46 | ProFormTextArea, |
40 | ProFormUploadDragger, | 47 | ProFormUploadDragger, |
41 | } from '@ant-design/pro-components'; | 48 | } from '@ant-design/pro-components'; |
49 | +import { Group } from '@ant-design/pro-form'; | ||
42 | import { Button, Form, message, Modal } from 'antd'; | 50 | import { Button, Form, message, Modal } from 'antd'; |
43 | import { cloneDeep } from 'lodash'; | 51 | import { cloneDeep } from 'lodash'; |
44 | import { useEffect, useRef, useState } from 'react'; | 52 | import { useEffect, useRef, useState } from 'react'; |
@@ -48,15 +56,15 @@ import { | @@ -48,15 +56,15 @@ import { | ||
48 | INVOCING_STATUS_OPTIONS_OLD, | 56 | INVOCING_STATUS_OPTIONS_OLD, |
49 | PAYEE_OPTIONS, | 57 | PAYEE_OPTIONS, |
50 | PAYMENT_CHANNEL_OPTIONS, | 58 | PAYMENT_CHANNEL_OPTIONS, |
51 | - PAYMENT_METHOD_OPTIONS, | 59 | + PAYMENT_METHOD_OPTIONS_4_ADD, |
52 | PRODUCT_BELONG_DEPARTMENT_OPTIONS, | 60 | PRODUCT_BELONG_DEPARTMENT_OPTIONS, |
53 | SHIPPING_WAREHOUSE_OPTIONS, | 61 | SHIPPING_WAREHOUSE_OPTIONS, |
54 | -} from '../../constant'; | 62 | +} from '../constant'; |
55 | import KingdeeCustomerModal from './KingdeeCustomerModal'; | 63 | import KingdeeCustomerModal from './KingdeeCustomerModal'; |
56 | 64 | ||
57 | export default ({ onClose, data, subOrders, orderOptType }) => { | 65 | export default ({ onClose, data, subOrders, orderOptType }) => { |
58 | const [invoicingStatus, setInvoicingStatus] = useState(''); | 66 | const [invoicingStatus, setInvoicingStatus] = useState(''); |
59 | - const [salesCodeOptions] = useState([]); | 67 | + const [salesCodeOptions, setSalesCodeOptions] = useState([]); |
60 | const [submitBtnLoading, setSubmitBtnLoading] = useState(false); | 68 | const [submitBtnLoading, setSubmitBtnLoading] = useState(false); |
61 | const [drawerTitle, setDrawerTitle] = useState(''); | 69 | const [drawerTitle, setDrawerTitle] = useState(''); |
62 | const [hasLocalData, setHasLocalData] = useState(false); | 70 | const [hasLocalData, setHasLocalData] = useState(false); |
@@ -80,41 +88,7 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | @@ -80,41 +88,7 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | ||
80 | const [district, setDistrict] = useState(''); | 88 | const [district, setDistrict] = useState(''); |
81 | // const [productCustomerContactOptions, setProductCustomerContactOptions] = | 89 | // const [productCustomerContactOptions, setProductCustomerContactOptions] = |
82 | // useState([]); //客户的收货人选项 | 90 | // useState([]); //客户的收货人选项 |
83 | - const [form] = Form.useForm<{ | ||
84 | - isLocalData: boolean; | ||
85 | - salesCode: ''; | ||
86 | - customerName: ''; | ||
87 | - customerContactNumber: ''; | ||
88 | - institution: ''; | ||
89 | - institutionContactName: ''; | ||
90 | - customerShippingAddress: ''; | ||
91 | - totalPayment: ''; | ||
92 | - paymentChannel: ''; | ||
93 | - paymentMethod: ''; | ||
94 | - productBelongBusiness: ''; | ||
95 | - invoicingStatus: ''; | ||
96 | - invoiceIdentificationNumber: ''; | ||
97 | - invoicingTime: ''; | ||
98 | - bank: ''; | ||
99 | - bankAccountNumber: ''; | ||
100 | - deleteSubOrderLists: []; | ||
101 | - filePaths: []; | ||
102 | - notes: ''; | ||
103 | - invoiceFirst: boolean; | ||
104 | - list: [ | ||
105 | - { | ||
106 | - productCode: ''; | ||
107 | - productName: ''; | ||
108 | - quantity: ''; | ||
109 | - productPrice: ''; | ||
110 | - parameters: ''; | ||
111 | - subOrderPayment: ''; | ||
112 | - unit: ''; | ||
113 | - serialNumber: ''; | ||
114 | - notes: ''; | ||
115 | - }, | ||
116 | - ]; | ||
117 | - }>(); | 91 | + const [form] = Form.useForm(); |
118 | const [accountOptions, setAccountOptions] = useState<any>([]); | 92 | const [accountOptions, setAccountOptions] = useState<any>([]); |
119 | 93 | ||
120 | let copyData = cloneDeep(data); | 94 | let copyData = cloneDeep(data); |
@@ -134,7 +108,8 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | @@ -134,7 +108,8 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | ||
134 | */ | 108 | */ |
135 | const loadSalesCodeOptions = async () => { | 109 | const loadSalesCodeOptions = async () => { |
136 | let options = await getSalesCodeOptions(); | 110 | let options = await getSalesCodeOptions(); |
137 | - console.log('options ', JSON.stringify(options)); | 111 | + setSalesCodeOptions(options); |
112 | + | ||
138 | if (optType('copy') || optType('edit')) { | 113 | if (optType('copy') || optType('edit')) { |
139 | let includeFlag = false; | 114 | let includeFlag = false; |
140 | //销售代码校验,如果是旧的销售代码,则提示并清空 | 115 | //销售代码校验,如果是旧的销售代码,则提示并清空 |
@@ -623,6 +598,21 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | @@ -623,6 +598,21 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | ||
623 | form.setFieldValue('totalPayment', totalPayment); | 598 | form.setFieldValue('totalPayment', totalPayment); |
624 | } | 599 | } |
625 | 600 | ||
601 | + /*function computeTotalPayment() { | ||
602 | + let list = form.getFieldValue('list'); | ||
603 | + let totalPaymentInMicro = 0; // 以"1 万分"为单位计算 | ||
604 | + | ||
605 | + list?.forEach((subOrder: any) => { | ||
606 | + let subOrderPayment = subOrder?.subOrderPayment; | ||
607 | + if (subOrderPayment !== '' && subOrderPayment !== undefined) { | ||
608 | + totalPaymentInMicro += Math.round(subOrderPayment * 10000); // 转换成整数(1 万分) | ||
609 | + } | ||
610 | + }); | ||
611 | + | ||
612 | + let totalPayment = totalPaymentInMicro / 10000; // 计算完后转换回元 | ||
613 | + form.setFieldValue('totalPayment', totalPayment.toFixed(2)); // 保留 4 位小数 | ||
614 | + }*/ | ||
615 | + | ||
626 | /** | 616 | /** |
627 | * 检查用户额度 | 617 | * 检查用户额度 |
628 | * @param option | 618 | * @param option |
@@ -751,18 +741,6 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | @@ -751,18 +741,6 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | ||
751 | } | 741 | } |
752 | } | 742 | } |
753 | 743 | ||
754 | - const validateContactNumber = (_: any, value: any) => { | ||
755 | - const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; | ||
756 | - const phoneRegex = /^\d{1,11}(-\d{1,11})?$/; | ||
757 | - | ||
758 | - if (emailRegex.test(value) || phoneRegex.test(value)) { | ||
759 | - return Promise.resolve(); | ||
760 | - } | ||
761 | - return Promise.reject( | ||
762 | - new Error('联系方式必须是邮箱或手机号格式(不能包含空格等特殊符号)'), | ||
763 | - ); | ||
764 | - }; | ||
765 | - | ||
766 | /** | 744 | /** |
767 | * 刪除草稿数据 | 745 | * 刪除草稿数据 |
768 | */ | 746 | */ |
@@ -782,22 +760,14 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | @@ -782,22 +760,14 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | ||
782 | 760 | ||
783 | return ( | 761 | return ( |
784 | <> | 762 | <> |
785 | - <DrawerForm<{ | 763 | + <ModalForm<{ |
786 | isLocalData: any; | 764 | isLocalData: any; |
787 | deleteSubOrderLists: any; | 765 | deleteSubOrderLists: any; |
788 | name: string; | 766 | name: string; |
789 | company: string; | 767 | company: string; |
790 | }> | 768 | }> |
791 | open | 769 | open |
792 | - width="35%" | ||
793 | - title={drawerTitle} | ||
794 | - resize={{ | ||
795 | - onResize() { | ||
796 | - console.log('resize!'); | ||
797 | - }, | ||
798 | - maxWidth: window.innerWidth * 0.8, | ||
799 | - minWidth: 400, | ||
800 | - }} | 770 | + width={1000} |
801 | onFinishFailed={() => { | 771 | onFinishFailed={() => { |
802 | message.error('表单项存在错误,请检查'); | 772 | message.error('表单项存在错误,请检查'); |
803 | setSubmitBtnLoading(false); | 773 | setSubmitBtnLoading(false); |
@@ -841,21 +811,27 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | @@ -841,21 +811,27 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | ||
841 | }} | 811 | }} |
842 | form={form} | 812 | form={form} |
843 | autoFocusFirstInput | 813 | autoFocusFirstInput |
844 | - drawerProps={{ | 814 | + modalProps={{ |
845 | destroyOnClose: true, | 815 | destroyOnClose: true, |
846 | - maskClosable: false, | ||
847 | - extra: [ | ||
848 | - <Button | ||
849 | - key="useLocalData" | ||
850 | - hidden={!hasLocalData} | ||
851 | - type="link" | ||
852 | - onClick={() => { | ||
853 | - useLocalFormData(); | ||
854 | - }} | 816 | + maskClosable: true, |
817 | + title: ( | ||
818 | + <div | ||
819 | + style={{ display: 'flex', alignItems: 'center', width: '100%' }} | ||
855 | > | 820 | > |
856 | - 使用草稿 | ||
857 | - </Button>, | ||
858 | - ], | 821 | + <span>{drawerTitle}</span> |
822 | + {hasLocalData && ( | ||
823 | + <Button | ||
824 | + key="useLocalData" | ||
825 | + type="link" | ||
826 | + onClick={() => { | ||
827 | + useLocalFormData(); | ||
828 | + }} | ||
829 | + > | ||
830 | + 使用草稿 | ||
831 | + </Button> | ||
832 | + )} | ||
833 | + </div> | ||
834 | + ), | ||
859 | }} | 835 | }} |
860 | submitTimeout={2000} | 836 | submitTimeout={2000} |
861 | onFinish={async (values) => { | 837 | onFinish={async (values) => { |
@@ -869,11 +845,46 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | @@ -869,11 +845,46 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | ||
869 | }); | 845 | }); |
870 | return item; | 846 | return item; |
871 | }); | 847 | }); |
872 | - | 848 | + list = list.map((item, index) => { |
849 | + // //记录部门修改时间 | ||
850 | + if ( | ||
851 | + optType('edit') && | ||
852 | + copyData?.subOrderInformationLists[index] | ||
853 | + ?.productBelongBusiness && | ||
854 | + item.productBelongBusiness !== | ||
855 | + copyData?.subOrderInformationLists[index]?.productBelongBusiness | ||
856 | + ) { | ||
857 | + const date = new Date(); | ||
858 | + const year = date.getFullYear(); | ||
859 | + const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始,需要加1 | ||
860 | + const day = String(date.getDate()).padStart(2, '0'); | ||
861 | + const hours = String(date.getHours()).padStart(2, '0'); | ||
862 | + const minutes = String(date.getMinutes()).padStart(2, '0'); | ||
863 | + const seconds = String(date.getSeconds()).padStart(2, '0'); | ||
864 | + | ||
865 | + const formattedDate = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; | ||
866 | + values.productBelongBusinessUpdateTime = formattedDate; | ||
867 | + } else if (optType('add') || optType('copy')) { | ||
868 | + const date = new Date(); | ||
869 | + const year = date.getFullYear(); | ||
870 | + const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始,需要加1 | ||
871 | + const day = String(date.getDate()).padStart(2, '0'); | ||
872 | + const hours = String(date.getHours()).padStart(2, '0'); | ||
873 | + const minutes = String(date.getMinutes()).padStart(2, '0'); | ||
874 | + const seconds = String(date.getSeconds()).padStart(2, '0'); | ||
875 | + const formattedDate = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; | ||
876 | + values.productBelongBusinessUpdateTime = formattedDate; | ||
877 | + } else { | ||
878 | + values.productBelongBusinessUpdateTime = | ||
879 | + data.productBelongBusinessUpdateTime; | ||
880 | + } | ||
881 | + return item; | ||
882 | + }); | ||
873 | values.list = list; | 883 | values.list = list; |
874 | values.institution = values.institution?.trim(); | 884 | values.institution = values.institution?.trim(); |
875 | values.institutionContactName = values.institutionContactName?.trim(); | 885 | values.institutionContactName = values.institutionContactName?.trim(); |
876 | values.customerName = values.customerNameString.trim(); | 886 | values.customerName = values.customerNameString.trim(); |
887 | + | ||
877 | // values.customerShippingAddress = | 888 | // values.customerShippingAddress = |
878 | // province + city + district + values.customerShippingAddress; | 889 | // province + city + district + values.customerShippingAddress; |
879 | 890 | ||
@@ -907,7 +918,6 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | @@ -907,7 +918,6 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | ||
907 | }); | 918 | }); |
908 | let diff = originIds.filter((item) => !curIds.includes(item)); | 919 | let diff = originIds.filter((item) => !curIds.includes(item)); |
909 | values.deleteSubOrderLists = diff; | 920 | values.deleteSubOrderLists = diff; |
910 | - | ||
911 | if (optType('edit')) { | 921 | if (optType('edit')) { |
912 | values.province = province; | 922 | values.province = province; |
913 | values.city = city; | 923 | values.city = city; |
@@ -1129,7 +1139,10 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | @@ -1129,7 +1139,10 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | ||
1129 | console.log(form.getFieldValue('id')); | 1139 | console.log(form.getFieldValue('id')); |
1130 | if (form.getFieldValue('id') !== undefined) { | 1140 | if (form.getFieldValue('id') !== undefined) { |
1131 | const resp = await postDistrictSelOrderProvince({ | 1141 | const resp = await postDistrictSelOrderProvince({ |
1132 | - data: form.getFieldValue('id'), | 1142 | + data: { |
1143 | + oId: form.getFieldValue('id'), | ||
1144 | + orderType: orderOptType, | ||
1145 | + }, | ||
1133 | }); | 1146 | }); |
1134 | if (resp && resp.data) { | 1147 | if (resp && resp.data) { |
1135 | if (resp.data.province) { | 1148 | if (resp.data.province) { |
@@ -1193,10 +1206,7 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | @@ -1193,10 +1206,7 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | ||
1193 | loadAccountOptions(v.target.value); | 1206 | loadAccountOptions(v.target.value); |
1194 | }, | 1207 | }, |
1195 | }} | 1208 | }} |
1196 | - rules={[ | ||
1197 | - { required: true, message: '联系方式必填' }, | ||
1198 | - { validator: validateContactNumber }, | ||
1199 | - ]} | 1209 | + rules={[{ required: true, message: '联系方式必填' }]} |
1200 | /> | 1210 | /> |
1201 | <ProFormText | 1211 | <ProFormText |
1202 | width="lg" | 1212 | width="lg" |
@@ -1206,45 +1216,163 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | @@ -1206,45 +1216,163 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | ||
1206 | placeholder="请输入单位" | 1216 | placeholder="请输入单位" |
1207 | rules={[{ required: true, message: '单位必填' }]} | 1217 | rules={[{ required: true, message: '单位必填' }]} |
1208 | /> | 1218 | /> |
1209 | - <ProFormText | 1219 | + {/*<ProFormText |
1210 | width="lg" | 1220 | width="lg" |
1211 | key="institutionContactName" | 1221 | key="institutionContactName" |
1212 | name="institutionContactName" | 1222 | name="institutionContactName" |
1213 | label="课题组" | 1223 | label="课题组" |
1214 | placeholder="请输入课题组" | 1224 | placeholder="请输入课题组" |
1215 | rules={[{ required: true, message: '课题组必填' }]} | 1225 | rules={[{ required: true, message: '课题组必填' }]} |
1216 | - /> | ||
1217 | - {/*<ProFormSelect | ||
1218 | - key={'institutionContactName'} | 1226 | + />*/} |
1227 | + <Group> | ||
1228 | + <ProFormSelect | ||
1229 | + request={async () => { | ||
1230 | + const res = await postServiceConstCompanyType(); | ||
1231 | + return Object.entries(res?.data).map(([value, label]) => ({ | ||
1232 | + label, | ||
1233 | + value, | ||
1234 | + })); | ||
1235 | + }} | ||
1219 | width="md" | 1236 | width="md" |
1220 | - showSearch | ||
1221 | - name="institutionContactName" | ||
1222 | - rules={[{ required: true, message: '请输入课题组名称!' }]} | ||
1223 | - request={async (value) => { | ||
1224 | - const keywords = value.keyWords; | ||
1225 | - const res = await postResearchGroupsNameSet({ | ||
1226 | - data: { | ||
1227 | - groupName: keywords, | ||
1228 | - }, | ||
1229 | - }); | ||
1230 | - let options = res?.data?.map((c: any) => { | ||
1231 | - return { | ||
1232 | - label: c, | ||
1233 | - value: c, | ||
1234 | - key: c, | ||
1235 | - }; | ||
1236 | - }); | ||
1237 | - return options; | 1237 | + onChange={() => { |
1238 | + form.setFieldValue('platformType', ''); | ||
1238 | }} | 1239 | }} |
1239 | - fieldProps={{ | ||
1240 | - filterOption() { | ||
1241 | - return true; | ||
1242 | - }, | 1240 | + rules={[{ required: true, message: '单位类型必填' }]} |
1241 | + name="companyType" | ||
1242 | + label="单位类型" | ||
1243 | + /> | ||
1244 | + <ProFormDependency name={['companyType']}> | ||
1245 | + {({ companyType }) => { | ||
1246 | + const renderInstitutionContactName = () => ( | ||
1247 | + <> | ||
1248 | + <ProFormSelect | ||
1249 | + key="institutionContactName" | ||
1250 | + width="md" | ||
1251 | + showSearch | ||
1252 | + name="institutionContactName" | ||
1253 | + rules={[{ required: true, message: '请输入课题组名称!' }]} | ||
1254 | + request={async (value) => { | ||
1255 | + const keywords = value?.keyWords || ''; | ||
1256 | + const res = await postResearchGroupsNameSet({ | ||
1257 | + data: { status: 'ADD_AUDIT_PASS', groupName: keywords }, | ||
1258 | + }); | ||
1259 | + return Object.entries(res?.data || {}).map( | ||
1260 | + ([researchGroupsId, researchGroupsName]) => ({ | ||
1261 | + label: researchGroupsName, | ||
1262 | + value: researchGroupsName, // 使用 researchGroupsId 作为 value | ||
1263 | + key: researchGroupsId, | ||
1264 | + id: researchGroupsId, | ||
1265 | + }), | ||
1266 | + ); | ||
1267 | + }} | ||
1268 | + fieldProps={{ | ||
1269 | + filterOption: () => true, | ||
1270 | + onChange: (_, option) => { | ||
1271 | + form.setFieldsValue({ | ||
1272 | + researchGroupId: option?.id || '', | ||
1273 | + }); | ||
1274 | + }, | ||
1275 | + }} | ||
1276 | + debounceTime={1000} | ||
1277 | + label="课题组名称" | ||
1278 | + placeholder="请输入名称" | ||
1279 | + /> | ||
1280 | + <ProFormText | ||
1281 | + hidden={true} | ||
1282 | + key="researchGroupId" | ||
1283 | + name="researchGroupId" | ||
1284 | + ></ProFormText> | ||
1285 | + </> | ||
1286 | + ); | ||
1287 | + const renderPlatformType = (fieldKey) => ( | ||
1288 | + <ProFormSelect | ||
1289 | + key={fieldKey} | ||
1290 | + width="md" | ||
1291 | + showSearch | ||
1292 | + name="platformType" | ||
1293 | + rules={[{ required: true, message: '请选择平台类型!' }]} | ||
1294 | + request={async () => { | ||
1295 | + const res = await postServiceConstPlatformType({ | ||
1296 | + query: { companyType }, | ||
1297 | + }); | ||
1298 | + return Object.entries(res?.data).map(([value, label]) => ({ | ||
1299 | + label, | ||
1300 | + value, | ||
1301 | + })); | ||
1302 | + }} | ||
1303 | + fieldProps={{ | ||
1304 | + filterOption: (input, option) => | ||
1305 | + option?.label.toLowerCase().includes(input.toLowerCase()), // 自定义搜索过滤逻辑 | ||
1306 | + }} | ||
1307 | + debounceTime={1000} | ||
1308 | + label="平台类型" | ||
1309 | + placeholder="请输入平台类型" | ||
1310 | + /> | ||
1311 | + ); | ||
1312 | + | ||
1313 | + if (companyType === 'school') { | ||
1314 | + return renderInstitutionContactName(); | ||
1315 | + } else if ( | ||
1316 | + ['firm', 'ECommercePlatform', 'otherPlatform'].includes( | ||
1317 | + companyType, | ||
1318 | + ) | ||
1319 | + ) { | ||
1320 | + return ( | ||
1321 | + <Group> | ||
1322 | + {['ECommercePlatform', 'otherPlatform'].includes( | ||
1323 | + companyType, | ||
1324 | + ) && renderPlatformType(`platformType_${companyType}`)} | ||
1325 | + <ProFormText | ||
1326 | + width="md" | ||
1327 | + name="institutionContactName" | ||
1328 | + label="课题组名称" | ||
1329 | + placeholder="请输入名称" | ||
1330 | + /> | ||
1331 | + </Group> | ||
1332 | + ); | ||
1333 | + } else if (companyType === 'officialWebsite') { | ||
1334 | + return ( | ||
1335 | + <Group> | ||
1336 | + <ProFormSelect | ||
1337 | + request={async () => { | ||
1338 | + const res = await postServiceConstOrderSource(); | ||
1339 | + return Object.entries(res?.data).map( | ||
1340 | + ([value, label]) => ({ | ||
1341 | + label, | ||
1342 | + value, | ||
1343 | + }), | ||
1344 | + ); | ||
1345 | + }} | ||
1346 | + width="md" | ||
1347 | + name="orderSource" | ||
1348 | + label="订单来源" | ||
1349 | + /> | ||
1350 | + <ProFormDependency name={['orderSource']}> | ||
1351 | + {({ orderSource }) => { | ||
1352 | + if (orderSource === 'school') { | ||
1353 | + return renderInstitutionContactName(); | ||
1354 | + } else if (orderSource === 'company') { | ||
1355 | + return ( | ||
1356 | + <ProFormText | ||
1357 | + width="md" | ||
1358 | + name="institutionContactName" | ||
1359 | + label="课题组名称" | ||
1360 | + placeholder="请输入名称" | ||
1361 | + /> | ||
1362 | + ); | ||
1363 | + } | ||
1364 | + return null; | ||
1365 | + }} | ||
1366 | + </ProFormDependency> | ||
1367 | + </Group> | ||
1368 | + ); | ||
1369 | + } else { | ||
1370 | + return renderInstitutionContactName(); | ||
1371 | + } | ||
1243 | }} | 1372 | }} |
1244 | - debounceTime={1000} | ||
1245 | - label="课题组名称" | ||
1246 | - placeholder="请输入名称" | ||
1247 | - />*/} | 1373 | + </ProFormDependency> |
1374 | + </Group> | ||
1375 | + | ||
1248 | <div | 1376 | <div |
1249 | style={{ | 1377 | style={{ |
1250 | display: 'flex', | 1378 | display: 'flex', |
@@ -1315,7 +1443,10 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | @@ -1315,7 +1443,10 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | ||
1315 | console.log(form.getFieldValue('id')); | 1443 | console.log(form.getFieldValue('id')); |
1316 | if (form.getFieldValue('id')) { | 1444 | if (form.getFieldValue('id')) { |
1317 | const resp = await postDistrictSelOrderProvince({ | 1445 | const resp = await postDistrictSelOrderProvince({ |
1318 | - data: form.getFieldValue('id'), | 1446 | + data: { |
1447 | + oId: form.getFieldValue('id'), | ||
1448 | + orderType: orderOptType, | ||
1449 | + }, | ||
1319 | }); | 1450 | }); |
1320 | if ( | 1451 | if ( |
1321 | resp.data.province !== null && | 1452 | resp.data.province !== null && |
@@ -1375,7 +1506,10 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | @@ -1375,7 +1506,10 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | ||
1375 | let districtOptions = []; | 1506 | let districtOptions = []; |
1376 | if (form.getFieldValue('id')) { | 1507 | if (form.getFieldValue('id')) { |
1377 | const resp = await postDistrictSelOrderProvince({ | 1508 | const resp = await postDistrictSelOrderProvince({ |
1378 | - data: form.getFieldValue('id'), | 1509 | + data: { |
1510 | + oId: form.getFieldValue('id'), | ||
1511 | + orderType: orderOptType, | ||
1512 | + }, | ||
1379 | }); | 1513 | }); |
1380 | if (resp.data.city !== null && resp.data.city !== undefined) { | 1514 | if (resp.data.city !== null && resp.data.city !== undefined) { |
1381 | let res = await postDistrictSelectByNameAndLevel({ | 1515 | let res = await postDistrictSelectByNameAndLevel({ |
@@ -1477,7 +1611,7 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | @@ -1477,7 +1611,7 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | ||
1477 | onChange={(val: any) => { | 1611 | onChange={(val: any) => { |
1478 | setPaymentMethod(val); | 1612 | setPaymentMethod(val); |
1479 | }} | 1613 | }} |
1480 | - options={enumToSelect(PAYMENT_METHOD_OPTIONS)} | 1614 | + options={enumToSelect(PAYMENT_METHOD_OPTIONS_4_ADD)} |
1481 | rules={[{ required: true, message: '支付方式必填' }]} | 1615 | rules={[{ required: true, message: '支付方式必填' }]} |
1482 | disabled={optType('after-sales-check')} | 1616 | disabled={optType('after-sales-check')} |
1483 | /> | 1617 | /> |
@@ -1561,7 +1695,34 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | @@ -1561,7 +1695,34 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | ||
1561 | form.setFieldValue('invoiceFirst', false); | 1695 | form.setFieldValue('invoiceFirst', false); |
1562 | } | 1696 | } |
1563 | }} | 1697 | }} |
1564 | - rules={[{ required: true, message: '是否需要开票必填' }]} | 1698 | + rules={[ |
1699 | + { required: true, message: '是否需要开票必填' }, | ||
1700 | + { | ||
1701 | + validator: (_, value) => { | ||
1702 | + // 自定义校验逻辑 | ||
1703 | + if ( | ||
1704 | + form.getFieldValue('paymentMethod') === | ||
1705 | + 'WITHHOLDING_ADVANCE_DEPOSIT' && | ||
1706 | + value !== 'UN_INVOICE' | ||
1707 | + ) { | ||
1708 | + return Promise.reject('扣预存订单不能开票'); | ||
1709 | + } | ||
1710 | + return Promise.resolve(); | ||
1711 | + }, | ||
1712 | + }, | ||
1713 | + { | ||
1714 | + validator: (_, value) => { | ||
1715 | + // 自定义校验逻辑 | ||
1716 | + if ( | ||
1717 | + form.getFieldValue('totalPayment') === 0 && | ||
1718 | + value !== 'UN_INVOICE' | ||
1719 | + ) { | ||
1720 | + return Promise.reject('金额为0订单不能开票'); | ||
1721 | + } | ||
1722 | + return Promise.resolve(); | ||
1723 | + }, | ||
1724 | + }, | ||
1725 | + ]} | ||
1565 | /> | 1726 | /> |
1566 | <ProFormSelect | 1727 | <ProFormSelect |
1567 | placeholder="是否开票后发货" | 1728 | placeholder="是否开票后发货" |
@@ -1750,6 +1911,9 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | @@ -1750,6 +1911,9 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | ||
1750 | value: listMeta?.record?.materialId, | 1911 | value: listMeta?.record?.materialId, |
1751 | }} | 1912 | }} |
1752 | fieldProps={{ | 1913 | fieldProps={{ |
1914 | + popupMatchSelectWidth: false, | ||
1915 | + listHeight: 400, | ||
1916 | + dropdownStyle: { width: '55%' }, | ||
1753 | filterOption() { | 1917 | filterOption() { |
1754 | return true; | 1918 | return true; |
1755 | }, | 1919 | }, |
@@ -1946,6 +2110,76 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | @@ -1946,6 +2110,76 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | ||
1946 | rules={[{ required: true, message: '所属事业部必填' }]} | 2110 | rules={[{ required: true, message: '所属事业部必填' }]} |
1947 | disabled={optType('after-sales-check')} | 2111 | disabled={optType('after-sales-check')} |
1948 | />, | 2112 | />, |
2113 | + | ||
2114 | + <Group key="selfDevelop"> | ||
2115 | + <ProFormRadio.Group | ||
2116 | + key="selfDevelop" | ||
2117 | + name="selfDevelop" | ||
2118 | + label="是否自研产品" | ||
2119 | + initialValue={false} | ||
2120 | + options={[ | ||
2121 | + { | ||
2122 | + label: '是', | ||
2123 | + value: true, | ||
2124 | + }, | ||
2125 | + { | ||
2126 | + label: '否', | ||
2127 | + value: false, | ||
2128 | + }, | ||
2129 | + ]} | ||
2130 | + rules={[{ required: true, message: '是否自研产品必填' }]} | ||
2131 | + /> | ||
2132 | + <ProFormDependency name={['selfDevelop']}> | ||
2133 | + {({ selfDevelop }) => { | ||
2134 | + if (selfDevelop) { | ||
2135 | + return ( | ||
2136 | + <ProFormDatePicker | ||
2137 | + name="deliveryDatetime" | ||
2138 | + label="产品交期(填写前请先与工程师沟通)" | ||
2139 | + rules={[ | ||
2140 | + { required: true, message: '产品交期必填' }, | ||
2141 | + ]} | ||
2142 | + /> | ||
2143 | + ); | ||
2144 | + } | ||
2145 | + }} | ||
2146 | + </ProFormDependency> | ||
2147 | + </Group>, | ||
2148 | + <ProFormRadio.Group | ||
2149 | + key="proxy" | ||
2150 | + name="proxy" | ||
2151 | + label="是否代买代购" | ||
2152 | + //hidden={true} | ||
2153 | + initialValue={true} | ||
2154 | + options={[ | ||
2155 | + { | ||
2156 | + label: '是', | ||
2157 | + value: true, | ||
2158 | + }, | ||
2159 | + { | ||
2160 | + label: '否', | ||
2161 | + value: false, | ||
2162 | + }, | ||
2163 | + ]} | ||
2164 | + />, | ||
2165 | + <ProFormRadio.Group | ||
2166 | + key="discount" | ||
2167 | + name="discount" | ||
2168 | + label="是否竞标/打折" | ||
2169 | + //hidden={true} | ||
2170 | + initialValue={true} | ||
2171 | + options={[ | ||
2172 | + { | ||
2173 | + label: '是', | ||
2174 | + value: true, | ||
2175 | + }, | ||
2176 | + { | ||
2177 | + label: '否', | ||
2178 | + value: false, | ||
2179 | + }, | ||
2180 | + ]} | ||
2181 | + />, | ||
2182 | + | ||
1949 | <ProFormSelect | 2183 | <ProFormSelect |
1950 | key={'shippingWarehouse' + listMeta.index} | 2184 | key={'shippingWarehouse' + listMeta.index} |
1951 | placeholder="请选择发货仓库" | 2185 | placeholder="请选择发货仓库" |
@@ -1997,7 +2231,7 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | @@ -1997,7 +2231,7 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | ||
1997 | }} | 2231 | }} |
1998 | actionRef={actionRef} | 2232 | actionRef={actionRef} |
1999 | ></ProFormList> | 2233 | ></ProFormList> |
2000 | - </DrawerForm> | 2234 | + </ModalForm> |
2001 | {kingdeeCstomerModalVisible && ( | 2235 | {kingdeeCstomerModalVisible && ( |
2002 | <KingdeeCustomerModal | 2236 | <KingdeeCustomerModal |
2003 | setVisible={setKingdeeCstomerModalVisible} | 2237 | setVisible={setKingdeeCstomerModalVisible} |