Commit 3fa117553e9a6db352becd627fe423a46cec81bb
1 parent
7d171173
feat(Order): 课题组新需求
● 去掉审核按钮,新增课题组无需审核 ● 列表中去掉审核状态 ● 查询条件中去掉审核状态 ● 新增课题组页面,课题组名称输入框提示语修改为:请按规范输入,如:张三老师 ● 数据判重,当添加数据的课题组名称和单位名称同时存在时,提交时提示:该课题组已存在! ● 课题组名称和单位名称不允许输入除了汉字、字母和数字之外的特殊字符;须支持空格的输入,部分海外客户课题组为英文,单词之间会存在空格 ● 新增后的课题组仅管理员可修改、删除
Showing
6 changed files
with
109 additions
and
75 deletions
src/pages/Order/OrderList/OrderDrawer.tsx
... | ... | @@ -598,6 +598,21 @@ export default ({ onClose, data, subOrders, orderOptType }) => { |
598 | 598 | form.setFieldValue('totalPayment', totalPayment); |
599 | 599 | } |
600 | 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 | + | |
601 | 616 | /** |
602 | 617 | * 检查用户额度 |
603 | 618 | * @param option |
... | ... | @@ -726,18 +741,6 @@ export default ({ onClose, data, subOrders, orderOptType }) => { |
726 | 741 | } |
727 | 742 | } |
728 | 743 | |
729 | - const validateContactNumber = (_: any, value: any) => { | |
730 | - const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; | |
731 | - const phoneRegex = /^\d{1,11}(-\d{1,11})?$/; | |
732 | - | |
733 | - if (emailRegex.test(value) || phoneRegex.test(value)) { | |
734 | - return Promise.resolve(); | |
735 | - } | |
736 | - return Promise.reject( | |
737 | - new Error('联系方式必须是邮箱或手机号格式(不能包含空格等特殊符号)'), | |
738 | - ); | |
739 | - }; | |
740 | - | |
741 | 744 | /** |
742 | 745 | * 刪除草稿数据 |
743 | 746 | */ |
... | ... | @@ -1205,10 +1208,7 @@ export default ({ onClose, data, subOrders, orderOptType }) => { |
1205 | 1208 | loadAccountOptions(v.target.value); |
1206 | 1209 | }, |
1207 | 1210 | }} |
1208 | - rules={[ | |
1209 | - { required: true, message: '联系方式必填' }, | |
1210 | - { validator: validateContactNumber }, | |
1211 | - ]} | |
1211 | + rules={[{ required: true, message: '联系方式必填' }]} | |
1212 | 1212 | /> |
1213 | 1213 | <ProFormText |
1214 | 1214 | width="lg" |
... | ... | @@ -1712,6 +1712,18 @@ export default ({ onClose, data, subOrders, orderOptType }) => { |
1712 | 1712 | return Promise.resolve(); |
1713 | 1713 | }, |
1714 | 1714 | }, |
1715 | + { | |
1716 | + validator: (_, value) => { | |
1717 | + // 自定义校验逻辑 | |
1718 | + if ( | |
1719 | + form.getFieldValue('totalPayment') === 0 && | |
1720 | + value !== 'UN_INVOICE' | |
1721 | + ) { | |
1722 | + return Promise.reject('金额为0订单不能开票'); | |
1723 | + } | |
1724 | + return Promise.resolve(); | |
1725 | + }, | |
1726 | + }, | |
1715 | 1727 | ]} |
1716 | 1728 | /> |
1717 | 1729 | <ProFormSelect | ... | ... |
src/pages/ResearchGroup/components/ResearchGroupAddModal.tsx
... | ... | @@ -347,7 +347,7 @@ export default ({ setVisible, researchGroupId, onClose }) => { |
347 | 347 | name="groupName" |
348 | 348 | label="课题组名称" |
349 | 349 | placeholder="请输入课题组名称" |
350 | - rules={[{ required: true, message: '请输入课题组名称' }]} | |
350 | + rules={[{ required: true, message: '请按规范输入,如:张三老师' }]} | |
351 | 351 | /> |
352 | 352 | <ProFormText |
353 | 353 | name="companyName" | ... | ... |
src/pages/ResearchGroup/constant.tsx
1 | -import { postServiceConstListResearchGroupsStatus } from '@/services'; | |
2 | -import { enumToProTableEnumValue, enumToSelect } from '@/utils'; | |
3 | -import { MessageTwoTone } from '@ant-design/icons'; | |
4 | -import { Space, Tooltip } from 'antd'; | |
1 | +import { enumToProTableEnumValue } from '@/utils'; | |
2 | + | |
5 | 3 | export const AUDIT_STATUS_OPTIONS = { |
6 | 4 | CREATED: '未审核', |
7 | 5 | AUDIT_PASS: '审核通过', |
... | ... | @@ -55,38 +53,6 @@ export const RESEARCH_GROUP_COLUMNS = [ |
55 | 53 | hideInSearch: true, |
56 | 54 | }, |
57 | 55 | { |
58 | - title: '状态', | |
59 | - dataIndex: 'statusText', | |
60 | - key: 'statusText', | |
61 | - hideInSearch: true, | |
62 | - render: (_, record) => { | |
63 | - console.log('1111' + JSON.stringify(record)); | |
64 | - return ( | |
65 | - <> | |
66 | - <Space> | |
67 | - {record.statusText} | |
68 | - {record.statusNotes && ( | |
69 | - <Tooltip title={record.statusNotes}> | |
70 | - <MessageTwoTone /> | |
71 | - </Tooltip> | |
72 | - )} | |
73 | - </Space> | |
74 | - </> | |
75 | - ); | |
76 | - }, | |
77 | - }, | |
78 | - { | |
79 | - title: '状态', | |
80 | - dataIndex: 'status', | |
81 | - key: 'status', | |
82 | - valueType: 'select', | |
83 | - request: async () => { | |
84 | - const groupStatus = await postServiceConstListResearchGroupsStatus(); | |
85 | - return enumToSelect(groupStatus.data); | |
86 | - }, | |
87 | - hideInTable: true, | |
88 | - }, | |
89 | - { | |
90 | 56 | title: '预存手机号', |
91 | 57 | dataIndex: 'accountPhone', |
92 | 58 | key: 'accountPhone', |
... | ... | @@ -224,11 +190,11 @@ export const RESEARCH_GROUP_MEMBER_REQUEST_COLUMNS = [ |
224 | 190 | valueEnum: { |
225 | 191 | ADD_MEMBER: { |
226 | 192 | text: '新增成员', |
227 | - status: 'ADD_MEMBER' | |
193 | + status: 'ADD_MEMBER', | |
228 | 194 | }, |
229 | 195 | ADD_ACCOUNT: { |
230 | 196 | text: '新增课题组', |
231 | - status: 'ADD_ACCOUNT' | |
197 | + status: 'ADD_ACCOUNT', | |
232 | 198 | }, |
233 | 199 | }, |
234 | 200 | hideInTable: true, | ... | ... |
src/pages/ResearchGroup/index.tsx
... | ... | @@ -573,11 +573,6 @@ const PrepaidPage = () => { |
573 | 573 | let ids = selectedRows.map((item: any) => { |
574 | 574 | return item.id; |
575 | 575 | }); |
576 | - let canAudit = | |
577 | - selectedRows.length > 0 && | |
578 | - selectedRows.every((item) => { | |
579 | - return item.paths?.includes('ADD_AUDIT'); | |
580 | - }); | |
581 | 576 | return ( |
582 | 577 | <Space size={16}> |
583 | 578 | <ButtonConfirm |
... | ... | @@ -592,21 +587,6 @@ const PrepaidPage = () => { |
592 | 587 | <Button type="link" onClick={onCleanSelected}> |
593 | 588 | 取消选中 |
594 | 589 | </Button> |
595 | - | |
596 | - { | |
597 | - <Button | |
598 | - key="audit" | |
599 | - type="link" | |
600 | - disabled={!canAudit} | |
601 | - onClick={async () => { | |
602 | - setAuditIds(ids); | |
603 | - setAuditModalVisible(true); | |
604 | - setAuditType('research_groups_add_audit'); | |
605 | - }} | |
606 | - > | |
607 | - 审核 | |
608 | - </Button> | |
609 | - } | |
610 | 590 | </Space> |
611 | 591 | ); |
612 | 592 | }} | ... | ... |
src/services/definition.ts
src/services/request.ts
... | ... | @@ -21212,6 +21212,77 @@ export const postServiceOrderExport = /* #__PURE__ */ (() => { |
21212 | 21212 | return request; |
21213 | 21213 | })(); |
21214 | 21214 | |
21215 | +/** @description request parameter type for postServiceOrderExportLockOrders */ | |
21216 | +export interface PostServiceOrderExportLockOrdersOption { | |
21217 | + /** | |
21218 | + * @description | |
21219 | + * dto | |
21220 | + */ | |
21221 | + body: { | |
21222 | + /** | |
21223 | + @description | |
21224 | + dto */ | |
21225 | + dto: QueryWarningOrderStatistics; | |
21226 | + }; | |
21227 | +} | |
21228 | + | |
21229 | +/** @description response type for postServiceOrderExportLockOrders */ | |
21230 | +export interface PostServiceOrderExportLockOrdersResponse { | |
21231 | + /** | |
21232 | + * @description | |
21233 | + * OK | |
21234 | + */ | |
21235 | + 200: any; | |
21236 | + /** | |
21237 | + * @description | |
21238 | + * Created | |
21239 | + */ | |
21240 | + 201: any; | |
21241 | + /** | |
21242 | + * @description | |
21243 | + * Unauthorized | |
21244 | + */ | |
21245 | + 401: any; | |
21246 | + /** | |
21247 | + * @description | |
21248 | + * Forbidden | |
21249 | + */ | |
21250 | + 403: any; | |
21251 | + /** | |
21252 | + * @description | |
21253 | + * Not Found | |
21254 | + */ | |
21255 | + 404: any; | |
21256 | +} | |
21257 | + | |
21258 | +export type PostServiceOrderExportLockOrdersResponseSuccess = | |
21259 | + PostServiceOrderExportLockOrdersResponse[200]; | |
21260 | +/** | |
21261 | + * @description | |
21262 | + * exportLockOrders | |
21263 | + * @tags 内部订单 | |
21264 | + * @produces * | |
21265 | + * @consumes application/json | |
21266 | + */ | |
21267 | +export const postServiceOrderExportLockOrders = /* #__PURE__ */ (() => { | |
21268 | + const method = 'post'; | |
21269 | + const url = '/service/order/exportLockOrders'; | |
21270 | + function request( | |
21271 | + option: PostServiceOrderExportLockOrdersOption, | |
21272 | + ): Promise<PostServiceOrderExportLockOrdersResponseSuccess> { | |
21273 | + return requester(request.url, { | |
21274 | + method: request.method, | |
21275 | + ...option, | |
21276 | + }) as unknown as Promise<PostServiceOrderExportLockOrdersResponseSuccess>; | |
21277 | + } | |
21278 | + | |
21279 | + /** http method */ | |
21280 | + request.method = method; | |
21281 | + /** request url */ | |
21282 | + request.url = url; | |
21283 | + return request; | |
21284 | +})(); | |
21285 | + | |
21215 | 21286 | /** @description response type for postServiceOrderExportTemplate */ |
21216 | 21287 | export interface PostServiceOrderExportTemplateResponse { |
21217 | 21288 | /** | ... | ... |