Commit 4fa3b8872e8c8c9570a8ec9a814e0669d6ed2a02
1 parent
1abb1273
feat: update 采购转发、下单
Showing
12 changed files
with
870 additions
and
71 deletions
src/access.ts
src/app.ts
src/pages/Order/components/CheckModal.tsx
1 | 1 | import { RESPONSE_CODE } from '@/constants/enum'; |
2 | 2 | import { |
3 | 3 | postServiceOrderCheckOrder, |
4 | + postServiceOrderFileProcess, | |
4 | 5 | postServiceOrderFinanceCheckOrder, |
5 | 6 | } from '@/services'; |
6 | 7 | import { ModalForm, ProFormTextArea } from '@ant-design/pro-components'; |
... | ... | @@ -9,6 +10,7 @@ import Upload, { RcFile, UploadProps } from 'antd/es/upload'; |
9 | 10 | import { useEffect, useRef, useState } from 'react'; |
10 | 11 | import { CHECK_TYPE, COMFIR_RECEIPT_IMAGES_NUMBER } from '../constant'; |
11 | 12 | // import { cloneDeep } from 'lodash'; |
13 | +import { transImageFile } from '@/utils'; | |
12 | 14 | import { PlusOutlined } from '@ant-design/icons'; |
13 | 15 | import { cloneDeep } from 'lodash'; |
14 | 16 | export default ({ |
... | ... | @@ -32,6 +34,7 @@ export default ({ |
32 | 34 | const [fileList, setFileList] = useState<UploadFile[]>([]); |
33 | 35 | const [uploading, setUploading] = useState(false); |
34 | 36 | const handleCancel = () => setPreviewOpen(false); |
37 | + const [messageApi, contextHolder] = message.useMessage(); | |
35 | 38 | console.log(uploading); |
36 | 39 | const handleChange: UploadProps['onChange'] = ({ fileList: newFileList }) => { |
37 | 40 | //fileListObj得在change里变化,change的参数是已经处理过的file数组 |
... | ... | @@ -121,7 +124,7 @@ export default ({ |
121 | 124 | |
122 | 125 | const handleBeforeUpload = (file: any) => { |
123 | 126 | setFileList([...fileList, file]); |
124 | - return true; | |
127 | + return false; | |
125 | 128 | }; |
126 | 129 | |
127 | 130 | const props: UploadProps = { |
... | ... | @@ -137,7 +140,7 @@ export default ({ |
137 | 140 | fileList, |
138 | 141 | onChange: handleChange, |
139 | 142 | accept: 'image/png, image/jpeg, image/png', |
140 | - action: '/api/service/order/fileProcess', | |
143 | + // action: '/api/service/order/fileProcess', | |
141 | 144 | name: 'files', |
142 | 145 | headers: { Authorization: localStorage.getItem('token') }, |
143 | 146 | }; |
... | ... | @@ -165,7 +168,64 @@ export default ({ |
165 | 168 | * |
166 | 169 | * @param body 财务审核 |
167 | 170 | */ |
168 | - async function doFinancailCheck(body: object) { | |
171 | + async function doFinancailCheck(values: any, isAgree: boolean) { | |
172 | + messageApi.open({ | |
173 | + type: 'loading', | |
174 | + content: '正在上传图片...', | |
175 | + duration: 0, | |
176 | + }); | |
177 | + //附件处理 | |
178 | + let formData = new FormData(); | |
179 | + //附件处理 | |
180 | + for (let file of fileList) { | |
181 | + //有url的话取url(源文件),没url取thumbUrl。有url的时候thumbUrl是略缩图 | |
182 | + if (file?.url === undefined || file?.url === null) { | |
183 | + formData.append( | |
184 | + 'files', | |
185 | + transImageFile(file?.thumbUrl), | |
186 | + file?.originFileObj?.name, | |
187 | + ); | |
188 | + } else { | |
189 | + formData.append( | |
190 | + 'files', | |
191 | + transImageFile(file?.url), | |
192 | + file?.originFileObj?.name, | |
193 | + ); | |
194 | + } | |
195 | + } | |
196 | + let res = await postServiceOrderFileProcess({ | |
197 | + data: formData, | |
198 | + }); | |
199 | + messageApi.destroy(); | |
200 | + if (res.result === RESPONSE_CODE.SUCCESS) { | |
201 | + message.success('上传成功!'); | |
202 | + | |
203 | + let fileUrls = res?.data?.map((item) => { | |
204 | + return { url: item }; | |
205 | + }); | |
206 | + //财务审核 | |
207 | + const data = await postServiceOrderFinanceCheckOrder({ | |
208 | + data: { | |
209 | + checkNotes: values.name, | |
210 | + ids: subOrderIds, | |
211 | + checkPassOrReject: isAgree, | |
212 | + invoicingCheckAnnex: fileUrls, | |
213 | + }, | |
214 | + }); | |
215 | + if (data.result === RESPONSE_CODE.SUCCESS) { | |
216 | + message.success(data.message); | |
217 | + onClose(); | |
218 | + } | |
219 | + } else { | |
220 | + message.success('上传失败'); | |
221 | + } | |
222 | + } | |
223 | + | |
224 | + /** | |
225 | + * | |
226 | + * @param body 售后审核 | |
227 | + */ | |
228 | + async function doAfterSalesCheck(body: object) { | |
169 | 229 | const data = await postServiceOrderFinanceCheckOrder({ |
170 | 230 | data: body, |
171 | 231 | }); |
... | ... | @@ -210,7 +270,7 @@ export default ({ |
210 | 270 | myDoms.push( |
211 | 271 | <Button |
212 | 272 | key="驳回" |
213 | - onClick={() => { | |
273 | + onClick={async () => { | |
214 | 274 | if (checkType(CHECK_TYPE.NORMAL)) { |
215 | 275 | doCheck({ |
216 | 276 | flag: false, |
... | ... | @@ -221,18 +281,20 @@ export default ({ |
221 | 281 | return; |
222 | 282 | } |
223 | 283 | |
224 | - //附件处理 | |
225 | - console.log(fileList); | |
226 | - let fileUrls = fileList?.map((file) => { | |
227 | - return { url: file.response?.data[0] }; | |
228 | - }); | |
229 | - //财务审核 | |
230 | - doFinancailCheck({ | |
231 | - checkNotes: form.getFieldValue('name'), | |
232 | - ids: subOrderIds, | |
233 | - checkPassOrReject: false, | |
234 | - invoicingCheckAnnex: fileUrls, | |
235 | - }); | |
284 | + if (checkType(CHECK_TYPE.AFTER_SALES)) { | |
285 | + doAfterSalesCheck({ | |
286 | + flag: false, | |
287 | + ids: subOrderIds, | |
288 | + externalProcurement: 0, | |
289 | + checkNotes: form.getFieldValue('name'), | |
290 | + }); | |
291 | + return; | |
292 | + } | |
293 | + | |
294 | + if (checkType(CHECK_TYPE.FINALCIAL)) { | |
295 | + let values = { name: form.getFieldValue('name') }; | |
296 | + doFinancailCheck(values, false); | |
297 | + } | |
236 | 298 | setUploading(false); |
237 | 299 | }} |
238 | 300 | > |
... | ... | @@ -240,7 +302,7 @@ export default ({ |
240 | 302 | </Button>, |
241 | 303 | ); |
242 | 304 | |
243 | - //如果不是财务审核,那么显示这个外部采购 | |
305 | + //如果是仓库审核,那么显示这个外部采购 | |
244 | 306 | if (checkType(CHECK_TYPE.NORMAL)) { |
245 | 307 | myDoms.push( |
246 | 308 | <Button |
... | ... | @@ -276,16 +338,19 @@ export default ({ |
276 | 338 | }); |
277 | 339 | } |
278 | 340 | |
279 | - //附件处理 | |
280 | - console.log(fileList); | |
341 | + if (checkType(CHECK_TYPE.AFTER_SALES)) { | |
342 | + //审核通过 | |
343 | + return doAfterSalesCheck({ | |
344 | + flag: true, | |
345 | + ids: subOrderIds, | |
346 | + externalProcurement: 0, | |
347 | + checkNotes: values.name, | |
348 | + }); | |
349 | + } | |
281 | 350 | |
282 | - //财务审核 | |
283 | - // return doFinancailCheck({ | |
284 | - // checkNotes: values.name, | |
285 | - // ids: subOrderIds, | |
286 | - // checkPassOrReject: true, | |
287 | - // invoicingCheckAnnex: fileUrls, | |
288 | - // }); | |
351 | + if (checkType(CHECK_TYPE.FINALCIAL)) { | |
352 | + doFinancailCheck(values, true); | |
353 | + } | |
289 | 354 | }} |
290 | 355 | onOpenChange={setCheckVisible} |
291 | 356 | > |
... | ... | @@ -317,6 +382,8 @@ export default ({ |
317 | 382 | > |
318 | 383 | <img alt="图片预览" style={{ width: '100%' }} src={previewImage} /> |
319 | 384 | </Modal> |
385 | + | |
386 | + {contextHolder} | |
320 | 387 | </> |
321 | 388 | ); |
322 | 389 | }; | ... | ... |
src/pages/Order/components/FinancialDrawer.tsx
... | ... | @@ -65,6 +65,9 @@ export default ({ |
65 | 65 | invoicingStatus: form.getFieldValue('invoicingStatus'), |
66 | 66 | mainorderOrSubOrderInvoicing: isMainOrder, |
67 | 67 | afterInvoicingStatus: form.getFieldValue('afterInvoicingStatus'), |
68 | + financialReceiptIssuanceTime: form.getFieldValue( | |
69 | + 'financialReceiptIssuanceTime', | |
70 | + ), | |
68 | 71 | }; |
69 | 72 | if (isEdit) { |
70 | 73 | res = await postServiceOrderEditOrder({ data: body }); |
... | ... | @@ -132,6 +135,13 @@ export default ({ |
132 | 135 | initialValue={subOrders[0]?.invoicingTime} |
133 | 136 | />, |
134 | 137 | <ProFormDatePicker |
138 | + key="financialReceiptIssuanceTime" | |
139 | + width="lg" | |
140 | + name="financialReceiptIssuanceTime" | |
141 | + label="开收据时间" | |
142 | + initialValue={subOrders[0]?.financialReceiptIssuanceTime} | |
143 | + />, | |
144 | + <ProFormDatePicker | |
135 | 145 | key="collectMoneyTime" |
136 | 146 | width="lg" |
137 | 147 | name="collectMoneyTime" | ... | ... |
src/pages/Order/components/FinancialEditDrawer.tsx
0 → 100644
1 | +// import { PlusOutlined } from '@ant-design/icons'; | |
2 | +import { RESPONSE_CODE } from '@/constants/enum'; | |
3 | +import { postServiceOrderNoNeedInvoicingEdit } from '@/services'; | |
4 | +import { DrawerForm, ProFormDatePicker } from '@ant-design/pro-components'; | |
5 | +import { Form, message } from 'antd'; | |
6 | + | |
7 | +export default ({ subOrders, setVisible, onClose }) => { | |
8 | + const subOrderIds = subOrders?.map((subOrder) => { | |
9 | + return subOrder?.id; | |
10 | + }); | |
11 | + const [form] = Form.useForm<{ collectMoneyTime: string; subIds: [] }>(); | |
12 | + return ( | |
13 | + <DrawerForm<{ | |
14 | + collectMoneyTime: string; | |
15 | + subIds: []; | |
16 | + }> | |
17 | + open | |
18 | + title="收款时间" | |
19 | + resize={{ | |
20 | + onResize() { | |
21 | + console.log('resize!'); | |
22 | + }, | |
23 | + maxWidth: window.innerWidth * 0.8, | |
24 | + minWidth: 400, | |
25 | + }} | |
26 | + initialValues={subOrders[0]} | |
27 | + form={form} | |
28 | + autoFocusFirstInput | |
29 | + drawerProps={{ | |
30 | + destroyOnClose: true, | |
31 | + }} | |
32 | + submitTimeout={2000} | |
33 | + onFinish={async () => { | |
34 | + let res = await postServiceOrderNoNeedInvoicingEdit({ | |
35 | + data: { | |
36 | + subIds: subOrderIds, | |
37 | + collectMoneyTime: form.getFieldValue('collectMoneyTime'), | |
38 | + }, | |
39 | + }); | |
40 | + if (res.result === RESPONSE_CODE.SUCCESS) { | |
41 | + message.success(res.message); | |
42 | + onClose(); | |
43 | + } | |
44 | + }} | |
45 | + onOpenChange={(val) => { | |
46 | + return !val && setVisible(val); | |
47 | + }} | |
48 | + > | |
49 | + <ProFormDatePicker | |
50 | + key="collectMoneyTime" | |
51 | + width="lg" | |
52 | + name="collectMoneyTime" | |
53 | + label="收款时间" | |
54 | + /> | |
55 | + </DrawerForm> | |
56 | + ); | |
57 | +}; | ... | ... |
src/pages/Order/components/OrderDrawer.tsx
... | ... | @@ -50,7 +50,7 @@ export default ({ onClose, data, subOrders, orderOptType }) => { |
50 | 50 | * @returns 获取开票选项 |
51 | 51 | */ |
52 | 52 | function getInvoicingSelect() { |
53 | - if (optType('edit') || optType('copy')) { | |
53 | + if (optType('edit')) { | |
54 | 54 | return enumToSelect(INVOCING_STATUS_OPTIONS_OLD); |
55 | 55 | } |
56 | 56 | return enumToSelect(INVOCING_STATUS_OPTIONS); |
... | ... | @@ -66,6 +66,12 @@ export default ({ onClose, data, subOrders, orderOptType }) => { |
66 | 66 | }, [data]); |
67 | 67 | // let mainInfoDisbled = optType('edit'); |
68 | 68 | if (optType('edit') || optType('copy')) { |
69 | + //如果是复制,需要开票,不回显是否需要开票字段 | |
70 | + if (optType('copy')) { | |
71 | + if (data.invoicingStatus === 'INVOICED') { | |
72 | + data.invoicingStatus = undefined; | |
73 | + } | |
74 | + } | |
69 | 75 | //订单修改和新增的子订单列表命名是list |
70 | 76 | data.list = data.subOrderInformationLists; |
71 | 77 | //主订单事业部默认显示子订单第一条的事业部 |
... | ... | @@ -350,7 +356,7 @@ export default ({ onClose, data, subOrders, orderOptType }) => { |
350 | 356 | {' | '} |
351 | 357 | <span style={{ color: '#666666' }}> |
352 | 358 | {item.institutionContactName === undefined |
353 | - ? '无单位联系人' | |
359 | + ? '无课题组' | |
354 | 360 | : item.institutionContactName} |
355 | 361 | </span> |
356 | 362 | {' | '} |
... | ... | @@ -411,9 +417,9 @@ export default ({ onClose, data, subOrders, orderOptType }) => { |
411 | 417 | width="lg" |
412 | 418 | key="institutionContactName" |
413 | 419 | name="institutionContactName" |
414 | - label="单位联系人" | |
415 | - placeholder="请输入单位联系人" | |
416 | - rules={[{ required: true, message: '单位联系人必填' }]} | |
420 | + label="课题组" | |
421 | + placeholder="请输入课题组" | |
422 | + rules={[{ required: true, message: '课题组必填' }]} | |
417 | 423 | // disabled={mainInfoDisbled} |
418 | 424 | /> |
419 | 425 | <ProFormTextArea |
... | ... | @@ -690,7 +696,7 @@ export default ({ onClose, data, subOrders, orderOptType }) => { |
690 | 696 | label={ |
691 | 697 | <> |
692 | 698 | <span>商品编码</span> |
693 | - <span className="text-gray-400 text-xs pl-2"> | |
699 | + <span className="pl-2 text-xs text-gray-400"> | |
694 | 700 | 新增商品时,商品编码由系统自动生成 |
695 | 701 | </span> |
696 | 702 | </> | ... | ... |
src/pages/Order/components/ProcureConvertModal.tsx
0 → 100644
1 | +import { RESPONSE_CODE } from '@/constants/enum'; | |
2 | +import { | |
3 | + postServiceOrderProcureConvertProcure, | |
4 | + postServiceOrderProvideProcurementRoles, | |
5 | +} from '@/services'; | |
6 | +import { | |
7 | + ModalForm, | |
8 | + ProFormSelect, | |
9 | + ProFormTextArea, | |
10 | +} from '@ant-design/pro-components'; | |
11 | +import { Form, message } from 'antd'; | |
12 | +export default ({ setVisible, subOrders, onClose }) => { | |
13 | + const [form] = Form.useForm<{ | |
14 | + procureName: string; | |
15 | + procureConvertNotes: string; | |
16 | + }>(); | |
17 | + | |
18 | + // const [checkNotes, setCheckNotes] = useState<string>(''); | |
19 | + | |
20 | + let subOrderIds: any[] = []; | |
21 | + //是单条子订单审核 | |
22 | + if (subOrders === undefined) { | |
23 | + subOrderIds = [data.id]; | |
24 | + } else { | |
25 | + subOrderIds = subOrders.map((subOrder) => subOrder.id); | |
26 | + } | |
27 | + | |
28 | + return ( | |
29 | + <ModalForm<{ | |
30 | + procureName: string; | |
31 | + procureConvertNotes: string; | |
32 | + }> | |
33 | + width={500} | |
34 | + open | |
35 | + title="采购转发" | |
36 | + form={form} | |
37 | + autoFocusFirstInput | |
38 | + modalProps={{ | |
39 | + okText: '确认', | |
40 | + cancelText: '取消', | |
41 | + destroyOnClose: true, | |
42 | + onCancel: () => { | |
43 | + setVisible(false); | |
44 | + }, | |
45 | + }} | |
46 | + submitter={{ | |
47 | + render: (props, defaultDoms) => { | |
48 | + return defaultDoms; | |
49 | + }, | |
50 | + }} | |
51 | + submitTimeout={2000} | |
52 | + onFinish={async (values) => { | |
53 | + const data = await postServiceOrderProcureConvertProcure({ | |
54 | + data: { | |
55 | + procureName: values.procureName, | |
56 | + procureConvertNotes: values.procureConvertNotes, | |
57 | + subIds: subOrderIds, | |
58 | + }, | |
59 | + }); | |
60 | + if (data.result === RESPONSE_CODE.SUCCESS) { | |
61 | + message.success(data.message); | |
62 | + onClose(); | |
63 | + } | |
64 | + }} | |
65 | + onOpenChange={setVisible} | |
66 | + > | |
67 | + <ProFormSelect | |
68 | + key="key" | |
69 | + label="采购名称" | |
70 | + width="lg" | |
71 | + name="procureName" | |
72 | + // options={options} | |
73 | + placeholder="请选择采购" | |
74 | + rules={[{ required: true, message: '采购必填' }]} | |
75 | + request={async () => { | |
76 | + const res = await postServiceOrderProvideProcurementRoles(); | |
77 | + return res.data?.map((item) => { | |
78 | + return { label: item, value: item }; | |
79 | + }); | |
80 | + }} | |
81 | + /> | |
82 | + | |
83 | + <ProFormTextArea | |
84 | + key="key" | |
85 | + label="转发备注" | |
86 | + width="lg" | |
87 | + name="procureConvertNotes" | |
88 | + // options={options} | |
89 | + placeholder="请填写转发备注" | |
90 | + /> | |
91 | + </ModalForm> | |
92 | + ); | |
93 | +}; | ... | ... |
src/pages/Order/constant.ts
... | ... | @@ -24,6 +24,7 @@ export const PRODUCT_BELONG_DEPARTMENT_OPTIONS = { |
24 | 24 | CUSTOMIZATION: '定制化事业部门', |
25 | 25 | EXPERIMENTAL_EQUIPMENT: '实验设备事业部门', |
26 | 26 | EXPERIMENTAL_CONSUMABLES: '实验耗材事业部门', |
27 | + CLAMPING_APPARATUS: '工夹具事业部', | |
27 | 28 | }; |
28 | 29 | |
29 | 30 | export const INVOCING_STATUS_OPTIONS_OLD = { |
... | ... | @@ -33,6 +34,11 @@ export const INVOCING_STATUS_OPTIONS_OLD = { |
33 | 34 | INVOICED: '需要开票', |
34 | 35 | }; |
35 | 36 | |
37 | +export const PROCURE_ORDER_STATUS = { | |
38 | + PROCUREMENT_HAS_BEEN_ORDERED: '已下单', | |
39 | + PROCURE_NOT_ORDERED: '未下单', | |
40 | +}; | |
41 | + | |
36 | 42 | export const INVOCING_STATUS_OPTIONS = { |
37 | 43 | UN_INVOICE: '不需开票', |
38 | 44 | SPECIALLY_INVOICED: '专票', |
... | ... | @@ -56,6 +62,7 @@ export const CHECK_TYPE = { |
56 | 62 | FINALCIAL: 'FINALCIAL', |
57 | 63 | PROCURE: 'PROCURE', |
58 | 64 | SUPPLIER: 'SUPPLIER', |
65 | + AFTER_SALES: 'AFTER_SALES', | |
59 | 66 | }; |
60 | 67 | |
61 | 68 | /** |
... | ... | @@ -159,53 +166,93 @@ export const TAGS_COLOR = new Map<string, string>([ |
159 | 166 | ['NO_NEED_SEND', 'success'], |
160 | 167 | ['PROCURE_CONVERT_WAREHOUSE_KEEPER', 'processing'], |
161 | 168 | ]); |
162 | - | |
163 | 169 | export const SALES_CODE_OPTIONS = [ |
164 | - { label: 'HQ_Linda', value: 'HQ_Linda' }, | |
165 | - { label: 'HQ-1_Rita', value: 'HQ-1_Rita' }, | |
166 | - { label: 'HQ-2_Lisa', value: 'HQ-2_Lisa' }, | |
167 | - { label: 'HQ-3_iris', value: 'HQ-3_iris' }, | |
168 | - { label: 'HQ-4_Lynn', value: 'HQ-4_Lynn' }, | |
169 | - { label: 'HQ-5_Jessica', value: 'HQ-5_Jessica' }, | |
170 | - { label: 'HQ-6_smile', value: 'HQ-6_smile' }, | |
171 | - { label: 'HQ-7_Yvonne', value: 'HQ-7_Yvonne' }, | |
172 | - { label: 'HQ-8_Daniel', value: 'HQ-8_Daniel' }, | |
173 | - { label: 'HQ-9_Wendy', value: 'HQ-9_Wendy' }, | |
174 | - { label: 'W_strong', value: 'W_strong' }, | |
175 | - { label: 'W-1_Alice', value: 'W-1_Alice' }, | |
176 | - { label: 'W-2_Demi', value: 'W-2_Demi' }, | |
177 | - { label: 'W-3_Nico', value: 'W-3_Nico' }, | |
178 | - { label: 'W-4_kk', value: 'W-4_kk' }, | |
179 | - { label: 'W-5_Alma', value: 'W-5_Alma' }, | |
180 | - { label: 'W-6_Dream', value: 'W-6_Dream' }, | |
181 | - { label: 'W-7_Aimee', value: 'W-7_Aimee' }, | |
182 | - { label: 'XX_Tina', value: 'XX_Tina' }, | |
183 | - { label: 'XX-2_Vivi', value: 'XX-2_Vivi' }, | |
184 | - { label: 'XX-A1_Ada', value: 'XX-A1_Ada' }, | |
185 | - { label: 'XX-A2_Amy', value: 'XX-A2_Amy' }, | |
186 | - { label: 'XX-N1_Nancy', value: 'XX-N1_Nancy' }, | |
187 | - { label: 'XX-N2_Sara', value: 'XX-N2_Sara' }, | |
188 | - { label: 'XX-C_CC', value: 'XX-C_CC' }, | |
189 | - { label: 'XX-L1_Lucy', value: 'XX-L1_Lucy' }, | |
190 | - { label: 'XX-L2_Lulu', value: 'XX-L2_Lulu' }, | |
191 | - { label: 'XX-P', value: 'XX-P' }, | |
170 | + { label: 'D-Linda', value: 'D-Linda' }, | |
171 | + { label: 'G-Rita', value: 'G-Rita' }, | |
172 | + { label: 'G-Iris', value: 'G-Iris' }, | |
173 | + { label: 'X-Jessica', value: 'X-Jessica' }, | |
174 | + { label: 'G-Daniel', value: 'G-Daniel' }, | |
175 | + { label: 'D-Strong', value: 'D-Strong' }, | |
176 | + { label: 'T-Alice', value: 'T-Alice' }, | |
177 | + { label: 'X-Demi', value: 'X-Demi' }, | |
178 | + { label: 'T-Nico', value: 'T-Nico' }, | |
179 | + { label: 'T-kk', value: 'T-kk' }, | |
180 | + { label: 'T-Alma', value: 'T-Alma' }, | |
181 | + { label: 'T-Dream', value: 'T-Dream' }, | |
182 | + { label: 'T-Aimee', value: 'T-Aimee' }, | |
183 | + { label: 'D-Tina', value: 'D-Tina' }, | |
184 | + { label: 'D-Vivi', value: 'D-Vivi' }, | |
185 | + { label: 'X-Ada', value: 'X-Ada' }, | |
186 | + { label: 'X-Amy', value: 'X-Amy' }, | |
187 | + { label: 'G-Nancy', value: 'G-Nancy' }, | |
188 | + { label: 'X-Sara', value: 'X-Sara' }, | |
189 | + { label: 'X-CC', value: 'X-CC' }, | |
190 | + { label: 'X-Lucy', value: 'X-Lucy' }, | |
191 | + { label: 'X-Lulu', value: 'X-Lulu' }, | |
192 | + { label: 'X-P', value: 'X-P' }, | |
192 | 193 | { label: 'TB', value: 'TB' }, |
193 | 194 | { label: 'HCTB', value: 'HCTB' }, |
194 | 195 | { label: 'TBC', value: 'TBC' }, |
195 | - { label: 'GW-3_iris', value: 'GW-3_iris' }, | |
196 | - { label: 'GW-4_Lynn', value: 'GW-4_Lynn' }, | |
197 | - { label: 'GW-6_smile', value: 'GW-6_smile' }, | |
198 | - { label: 'GW-7_Yvonne', value: 'GW-7_Yvonne' }, | |
199 | - { label: 'GW-9_Wendy', value: 'GW-9_Wendy' }, | |
200 | - { label: 'W-9_Jack', value: 'W-9_Jack' }, | |
201 | - { label: 'W-8_Andy', value: 'W-8_Andy' }, | |
196 | + { label: 'G-Lisa', value: 'G-Lisa' }, | |
197 | + { label: 'G-Lynn', value: 'G-Lynn' }, | |
198 | + { label: 'G-Smile', value: 'G-Smile' }, | |
199 | + { label: 'G-Yvonne', value: 'G-Yvonne' }, | |
200 | + { label: 'G-Wendy', value: 'G-Wendy' }, | |
201 | + { label: 'T-Andy', value: 'T-Andy' }, | |
202 | 202 | { label: 'CQ_Peter', value: 'CQ_Peter' }, |
203 | 203 | { label: 'MA_A_Mao', value: 'MA_A_Mao' }, |
204 | 204 | { label: 'CQ-2', value: 'CQ-2' }, |
205 | 205 | { label: 'JJ', value: 'JJ' }, |
206 | 206 | { label: 'CQ-3', value: 'CQ-3' }, |
207 | + { label: 'GW', value: 'GW' }, | |
207 | 208 | ]; |
208 | 209 | |
210 | +// export const SALES_CODE_OPTIONS = [ | |
211 | +// { label: 'HQ_Linda', value: 'HQ_Linda' }, | |
212 | +// { label: 'HQ-1_Rita', value: 'HQ-1_Rita' }, | |
213 | +// { label: 'HQ-2_Lisa', value: 'HQ-2_Lisa' }, | |
214 | +// { label: 'HQ-3_iris', value: 'HQ-3_iris' }, | |
215 | +// { label: 'HQ-4_Lynn', value: 'HQ-4_Lynn' }, | |
216 | +// { label: 'HQ-5_Jessica', value: 'HQ-5_Jessica' }, | |
217 | +// { label: 'HQ-6_smile', value: 'HQ-6_smile' }, | |
218 | +// { label: 'HQ-7_Yvonne', value: 'HQ-7_Yvonne' }, | |
219 | +// { label: 'HQ-8_Daniel', value: 'HQ-8_Daniel' }, | |
220 | +// { label: 'HQ-9_Wendy', value: 'HQ-9_Wendy' }, | |
221 | +// { label: 'W_strong', value: 'W_strong' }, | |
222 | +// { label: 'W-1_Alice', value: 'W-1_Alice' }, | |
223 | +// { label: 'W-2_Demi', value: 'W-2_Demi' }, | |
224 | +// { label: 'W-3_Nico', value: 'W-3_Nico' }, | |
225 | +// { label: 'W-4_kk', value: 'W-4_kk' }, | |
226 | +// { label: 'W-5_Alma', value: 'W-5_Alma' }, | |
227 | +// { label: 'W-6_Dream', value: 'W-6_Dream' }, | |
228 | +// { label: 'W-7_Aimee', value: 'W-7_Aimee' }, | |
229 | +// { label: 'XX_Tina', value: 'XX_Tina' }, | |
230 | +// { label: 'XX-2_Vivi', value: 'XX-2_Vivi' }, | |
231 | +// { label: 'XX-A1_Ada', value: 'XX-A1_Ada' }, | |
232 | +// { label: 'XX-A2_Amy', value: 'XX-A2_Amy' }, | |
233 | +// { label: 'XX-N1_Nancy', value: 'XX-N1_Nancy' }, | |
234 | +// { label: 'XX-N2_Sara', value: 'XX-N2_Sara' }, | |
235 | +// { label: 'XX-C_CC', value: 'XX-C_CC' }, | |
236 | +// { label: 'XX-L1_Lucy', value: 'XX-L1_Lucy' }, | |
237 | +// { label: 'XX-L2_Lulu', value: 'XX-L2_Lulu' }, | |
238 | +// { label: 'XX-P', value: 'XX-P' }, | |
239 | +// { label: 'TB', value: 'TB' }, | |
240 | +// { label: 'HCTB', value: 'HCTB' }, | |
241 | +// { label: 'TBC', value: 'TBC' }, | |
242 | +// { label: 'GW-3_iris', value: 'GW-3_iris' }, | |
243 | +// { label: 'GW-4_Lynn', value: 'GW-4_Lynn' }, | |
244 | +// { label: 'GW-6_smile', value: 'GW-6_smile' }, | |
245 | +// { label: 'GW-7_Yvonne', value: 'GW-7_Yvonne' }, | |
246 | +// { label: 'GW-9_Wendy', value: 'GW-9_Wendy' }, | |
247 | +// { label: 'W-9_Jack', value: 'W-9_Jack' }, | |
248 | +// { label: 'W-8_Andy', value: 'W-8_Andy' }, | |
249 | +// { label: 'CQ_Peter', value: 'CQ_Peter' }, | |
250 | +// { label: 'MA_A_Mao', value: 'MA_A_Mao' }, | |
251 | +// { label: 'CQ-2', value: 'CQ-2' }, | |
252 | +// { label: 'JJ', value: 'JJ' }, | |
253 | +// { label: 'CQ-3', value: 'CQ-3' }, | |
254 | +// ]; | |
255 | + | |
209 | 256 | export const HISTORY_OPT_TYPE = new Map<string, string>([ |
210 | 257 | ['DELETE', '作废'], |
211 | 258 | ['UPDATE', '编辑'], | ... | ... |
src/pages/Order/index.tsx
... | ... | @@ -4,11 +4,17 @@ import { |
4 | 4 | postServiceOrderAfterSalesCompletion, |
5 | 5 | postServiceOrderNoNeedSend, |
6 | 6 | postServiceOrderOrderCancel, |
7 | + postServiceOrderProcureOrder, | |
7 | 8 | postServiceOrderProcurePrint, |
8 | 9 | postServiceOrderQueryServiceOrder, |
9 | 10 | } from '@/services'; |
10 | 11 | import { orderExport } from '@/services/order'; |
11 | -import { enumValueToLabel, formatDateTime } from '@/utils'; | |
12 | +import { | |
13 | + copyToClipboard, | |
14 | + enumToProTableEnumValue, | |
15 | + enumValueToLabel, | |
16 | + formatDateTime, | |
17 | +} from '@/utils'; | |
12 | 18 | import { getUserInfo } from '@/utils/user'; |
13 | 19 | import { |
14 | 20 | ClockCircleTwoTone, |
... | ... | @@ -50,11 +56,13 @@ import ConfirmReceiptModal from './components/ConfirmReceiptModal'; |
50 | 56 | import DeliverInfoDrawer from './components/DeliverInfoDrawer'; |
51 | 57 | import DeliverModal from './components/DeliverModal'; |
52 | 58 | import FinancialDrawer from './components/FinancialDrawer'; |
59 | +import FinancialEditDrawer from './components/FinancialEditDrawer'; | |
53 | 60 | import HistoryModal from './components/HistoryModal'; |
54 | 61 | import ImportModal from './components/ImportModal'; |
55 | 62 | import OrderDrawer from './components/OrderDrawer'; |
56 | 63 | import OrderNotesEditModal from './components/OrderNotesEditModal'; |
57 | 64 | import ProcureCheckModal from './components/ProcureCheckModal'; |
65 | +import ProcureConvertModal from './components/ProcureConvertModal'; | |
58 | 66 | import SubOrderComfirmReceiptImagesModal from './components/SubOrderComfirmReceiptImagesModal'; |
59 | 67 | import { |
60 | 68 | AFTER_INVOICING_STATUS, |
... | ... | @@ -65,6 +73,7 @@ import { |
65 | 73 | ORDER_STATUS_OPTIONS, |
66 | 74 | PAYMENT_CHANNEL_OPTIONS, |
67 | 75 | PAYMENT_METHOD_OPTIONS, |
76 | + PROCURE_ORDER_STATUS, | |
68 | 77 | PRODUCT_BELONG_DEPARTMENT_OPTIONS, |
69 | 78 | TAGS_COLOR, |
70 | 79 | getInvoicingType, |
... | ... | @@ -85,6 +94,8 @@ const OrderPage = () => { |
85 | 94 | const [attachmentModalVisible, setAttachmentModalVisible] = |
86 | 95 | useState<boolean>(false); |
87 | 96 | const [financialVisible, setFinancialVisible] = useState<boolean>(false); |
97 | + const [financialEditVisible, setFinancialEditVisible] = | |
98 | + useState<boolean>(false); | |
88 | 99 | const [afterSalesDrawerVisible, setAfterSalesDrawerVisible] = |
89 | 100 | useState<boolean>(false); |
90 | 101 | const [historyModalVisible, setHistoryModalVisible] = |
... | ... | @@ -97,6 +108,8 @@ const OrderPage = () => { |
97 | 108 | useState<boolean>(false); |
98 | 109 | const [procureCheckModalVisible, setProcureCheckModalVisible] = |
99 | 110 | useState<boolean>(false); |
111 | + const [procureConvertModalVisible, setProcureConvertModalVisible] = | |
112 | + useState<boolean>(false); | |
100 | 113 | const [confirmReceiptVisible, setConfirmReceiptVisible] = |
101 | 114 | useState<boolean>(false); |
102 | 115 | const [deliverVisible, setDeliverVisible] = useState<boolean>(false); |
... | ... | @@ -173,6 +186,30 @@ const OrderPage = () => { |
173 | 186 | refreshTable(); |
174 | 187 | } |
175 | 188 | |
189 | + /** | |
190 | + * 复制订单到剪贴板 | |
191 | + * @param record | |
192 | + */ | |
193 | + function copyOrderToClipboard(record: any) { | |
194 | + let text = ''; | |
195 | + text += record?.id; | |
196 | + text += ',' + record?.customerName; | |
197 | + text += ',' + record?.customerContactNumber; | |
198 | + text += ',' + record?.customerShippingAddress; | |
199 | + record?.subOrderInformationLists?.forEach((item) => { | |
200 | + text += '\n'; | |
201 | + text += item?.productName; | |
202 | + text += ' ' + item?.parameters; | |
203 | + text += ' ' + item?.quantity; | |
204 | + text += ' ' + item?.unit; | |
205 | + }); | |
206 | + if (copyToClipboard(text)) { | |
207 | + message.info('已复制到剪贴板'); | |
208 | + } else { | |
209 | + message.info('无法复制到剪贴板'); | |
210 | + } | |
211 | + } | |
212 | + | |
176 | 213 | // const resize = () => { |
177 | 214 | // // 计算元素底部到视口顶部的距离 |
178 | 215 | // let bottomDistance = document |
... | ... | @@ -573,6 +610,21 @@ const OrderPage = () => { |
573 | 610 | {getOrderStatusTag(optRecord)} |
574 | 611 | </div> |
575 | 612 | |
613 | + {/**采购是否已下单状态 */} | |
614 | + {optRecord.procureOrderStatus !== null && | |
615 | + optRecord.procureOrderStatus !== undefined ? ( | |
616 | + <div className="overflow-hidden whitespace-no-wrap overflow-ellipsis"> | |
617 | + <Tag color="success"> | |
618 | + {enumValueToLabel( | |
619 | + optRecord.procureOrderStatus, | |
620 | + PROCURE_ORDER_STATUS, | |
621 | + )} | |
622 | + </Tag> | |
623 | + </div> | |
624 | + ) : ( | |
625 | + '' | |
626 | + )} | |
627 | + | |
576 | 628 | {/* 物流信息 */} |
577 | 629 | <div className="overflow-hidden whitespace-no-wrap overflow-ellipsis"> |
578 | 630 | {optRecord.orderStatus === 'CONFIRM_RECEIPT' || |
... | ... | @@ -602,6 +654,21 @@ const OrderPage = () => { |
602 | 654 | </div> |
603 | 655 | </Flex> |
604 | 656 | <Flex className="w-[18%]" wrap="wrap" gap="small"> |
657 | + {optRecord.subPath?.includes('noNeedInvoicingEdit') ? ( | |
658 | + <Button | |
659 | + className="p-0" | |
660 | + type="link" | |
661 | + onClick={() => { | |
662 | + setFinancialEditVisible(true); | |
663 | + setSelectedRows([optRecord]); | |
664 | + setIsMainOrder(false); | |
665 | + }} | |
666 | + > | |
667 | + 收款时间 | |
668 | + </Button> | |
669 | + ) : ( | |
670 | + '' | |
671 | + )} | |
605 | 672 | {optRecord.subPath?.includes('sendProduct') ? ( |
606 | 673 | <Button |
607 | 674 | className="p-0" |
... | ... | @@ -859,6 +926,22 @@ const OrderPage = () => { |
859 | 926 | '' |
860 | 927 | )} |
861 | 928 | |
929 | + {optRecord.subPath?.includes('procureConvertProcure') ? ( | |
930 | + <Button | |
931 | + className="p-0" | |
932 | + type="link" | |
933 | + onClick={() => { | |
934 | + setSelectedRows([optRecord]); | |
935 | + setOrderCheckType(CHECK_TYPE.PROCURE); | |
936 | + setProcureConvertModalVisible(true); | |
937 | + }} | |
938 | + > | |
939 | + 转发 | |
940 | + </Button> | |
941 | + ) : ( | |
942 | + '' | |
943 | + )} | |
944 | + | |
862 | 945 | {optRecord.subPath?.includes('rePrintOrder') ? ( |
863 | 946 | <Button |
864 | 947 | className="p-0" |
... | ... | @@ -927,6 +1010,26 @@ const OrderPage = () => { |
927 | 1010 | '' |
928 | 1011 | )} |
929 | 1012 | |
1013 | + {optRecord.subPath?.includes('procureOrder') ? ( | |
1014 | + <ButtonConfirm | |
1015 | + className="p-0" | |
1016 | + title="是否已下单?" | |
1017 | + text="下单" | |
1018 | + onConfirm={async () => { | |
1019 | + let res = await postServiceOrderProcureOrder({ | |
1020 | + data: { subIds: [optRecord.id] }, | |
1021 | + }); | |
1022 | + if (res.result === RESPONSE_CODE.SUCCESS) { | |
1023 | + message.success(res.message); | |
1024 | + refreshTable(); | |
1025 | + return true; | |
1026 | + } | |
1027 | + }} | |
1028 | + /> | |
1029 | + ) : ( | |
1030 | + '' | |
1031 | + )} | |
1032 | + | |
930 | 1033 | {optRecord.subPath?.includes('noNeedSend') ? ( |
931 | 1034 | <ButtonConfirm |
932 | 1035 | className="p-0" |
... | ... | @@ -1183,6 +1286,7 @@ const OrderPage = () => { |
1183 | 1286 | <CopyTwoTone |
1184 | 1287 | className="hover:cursor-pointer" |
1185 | 1288 | onClick={() => { |
1289 | + copyOrderToClipboard(record); | |
1186 | 1290 | setOrderOptType('copy'); |
1187 | 1291 | setOrderDrawerVisible(true); |
1188 | 1292 | let copy = cloneDeep(record); |
... | ... | @@ -1195,7 +1299,14 @@ const OrderPage = () => { |
1195 | 1299 | /> |
1196 | 1300 | </Tooltip> |
1197 | 1301 | ) : ( |
1198 | - '' | |
1302 | + <Tooltip title="复制文本"> | |
1303 | + <CopyTwoTone | |
1304 | + className="hover:cursor-pointer" | |
1305 | + onClick={() => { | |
1306 | + copyOrderToClipboard(record); | |
1307 | + }} | |
1308 | + /> | |
1309 | + </Tooltip> | |
1199 | 1310 | )} |
1200 | 1311 | |
1201 | 1312 | <Tooltip title="历史"> |
... | ... | @@ -1506,6 +1617,33 @@ const OrderPage = () => { |
1506 | 1617 | '' |
1507 | 1618 | )} |
1508 | 1619 | |
1620 | + {record.mainPath?.includes('') ? ( | |
1621 | + <Button | |
1622 | + className="p-0" | |
1623 | + type="link" | |
1624 | + onClick={() => { | |
1625 | + let selectedSubOrders = selectedRowObj[record.id]; | |
1626 | + setSelectedRows(selectedSubOrders); | |
1627 | + if (selectedSubOrders === undefined) { | |
1628 | + setSelectedRows(record.subOrderInformationLists); | |
1629 | + } | |
1630 | + for (let i = 0; i < selectedRows.length; i++) { | |
1631 | + if (selectedRows[i].orderStatus !== 'UNAUDITED') { | |
1632 | + message.error('请选择未审核的子订单进行审核'); | |
1633 | + return; | |
1634 | + } | |
1635 | + } | |
1636 | + setOrderRow(record); | |
1637 | + setCheckVisible(true); | |
1638 | + setOrderCheckType(CHECK_TYPE.AFTER_SALES); | |
1639 | + }} | |
1640 | + > | |
1641 | + 售后审核 | |
1642 | + </Button> | |
1643 | + ) : ( | |
1644 | + '' | |
1645 | + )} | |
1646 | + | |
1509 | 1647 | {record.mainPath?.includes('noNeedSend') ? ( |
1510 | 1648 | <ButtonConfirm |
1511 | 1649 | className="p-0" |
... | ... | @@ -1803,6 +1941,18 @@ const OrderPage = () => { |
1803 | 1941 | }, |
1804 | 1942 | ); |
1805 | 1943 | |
1944 | + //判断是否是采购,是的话新增一个筛选条件 | |
1945 | + console.log(userInfo?.roleSmallVO?.code === 'procure'); | |
1946 | + if (userInfo?.roleSmallVO?.code === 'procure') { | |
1947 | + mainOrdersColumns.push({ | |
1948 | + title: '采购下单状态', | |
1949 | + dataIndex: 'procureOrderStatus', | |
1950 | + valueType: 'select', | |
1951 | + hideInTable: true, | |
1952 | + valueEnum: enumToProTableEnumValue(PROCURE_ORDER_STATUS), | |
1953 | + }); | |
1954 | + } | |
1955 | + | |
1806 | 1956 | function toolBarRender() { |
1807 | 1957 | let roleCode = userInfo?.roleSmallVO?.code; |
1808 | 1958 | let toolBtns = []; |
... | ... | @@ -2173,6 +2323,21 @@ const OrderPage = () => { |
2173 | 2323 | /> |
2174 | 2324 | )} |
2175 | 2325 | |
2326 | + {financialEditVisible && ( | |
2327 | + <FinancialEditDrawer | |
2328 | + subOrders={selectedRows} | |
2329 | + setVisible={() => { | |
2330 | + setFinancialEditVisible(false); | |
2331 | + setIsMainOrder(false); | |
2332 | + }} | |
2333 | + onClose={() => { | |
2334 | + setFinancialEditVisible(false); | |
2335 | + refreshTable(); | |
2336 | + setIsMainOrder(false); | |
2337 | + }} | |
2338 | + /> | |
2339 | + )} | |
2340 | + | |
2176 | 2341 | {orderPrintVisible && ( |
2177 | 2342 | <OrderPrintModal |
2178 | 2343 | mainOrder={orderRow} |
... | ... | @@ -2290,6 +2455,18 @@ const OrderPage = () => { |
2290 | 2455 | /> |
2291 | 2456 | )} |
2292 | 2457 | |
2458 | + {procureConvertModalVisible && ( | |
2459 | + <ProcureConvertModal | |
2460 | + setVisible={setProcureConvertModalVisible} | |
2461 | + subOrders={selectedRows} | |
2462 | + onClose={() => { | |
2463 | + setProcureConvertModalVisible(false); | |
2464 | + setSelectedRows({}); | |
2465 | + refreshTable(); | |
2466 | + }} | |
2467 | + /> | |
2468 | + )} | |
2469 | + | |
2293 | 2470 | {contextHolder} |
2294 | 2471 | </PageContainer> |
2295 | 2472 | ); | ... | ... |
src/services/definition.ts
... | ... | @@ -709,6 +709,19 @@ export interface ProcureCheckOrderDto { |
709 | 709 | supplier?: string; |
710 | 710 | } |
711 | 711 | |
712 | +export interface ProcureConvertProcureDto { | |
713 | + /** | |
714 | + * @description | |
715 | + * 采购人名称 | |
716 | + */ | |
717 | + procureName?: string; | |
718 | + /** | |
719 | + * @description | |
720 | + * 子订单id集合 | |
721 | + */ | |
722 | + subIds?: Array<number>; | |
723 | +} | |
724 | + | |
712 | 725 | export interface ProcureConvertWarehouseKeeperDto { |
713 | 726 | /** |
714 | 727 | * @description |
... | ... | @@ -722,6 +735,14 @@ export interface ProcureConvertWarehouseKeeperDto { |
722 | 735 | subIds?: Array<number>; |
723 | 736 | } |
724 | 737 | |
738 | +export interface ProcureOrderDto { | |
739 | + /** | |
740 | + * @description | |
741 | + * 子订单id集合 | |
742 | + */ | |
743 | + subIds?: Array<number>; | |
744 | +} | |
745 | + | |
725 | 746 | export interface ProcurePrintDto { |
726 | 747 | /** |
727 | 748 | * @description |
... | ... | @@ -876,6 +897,12 @@ export interface Dto { |
876 | 897 | collectMoneyTime?: string; |
877 | 898 | /** |
878 | 899 | * @description |
900 | + * 采购开收据时间 | |
901 | + * @format date-time | |
902 | + */ | |
903 | + financialReceiptIssuanceTime?: string; | |
904 | + /** | |
905 | + * @description | |
879 | 906 | * 财务备注 |
880 | 907 | */ |
881 | 908 | invoicingNotes?: string; | ... | ... |
src/services/request.ts
... | ... | @@ -36,7 +36,9 @@ import type { |
36 | 36 | OrderUnlockFieldApplyVO, |
37 | 37 | OrderUpdateVO, |
38 | 38 | ProcureCheckOrderDto, |
39 | + ProcureConvertProcureDto, | |
39 | 40 | ProcureConvertWarehouseKeeperDto, |
41 | + ProcureOrderDto, | |
40 | 42 | ProcurePrintDto, |
41 | 43 | ProductInformationDto, |
42 | 44 | QueryAnnexDto, |
... | ... | @@ -5838,6 +5840,77 @@ export const postServiceOrderInvoicing = /* #__PURE__ */ (() => { |
5838 | 5840 | return request; |
5839 | 5841 | })(); |
5840 | 5842 | |
5843 | +/** @description request parameter type for postServiceOrderNoNeedInvoicingEdit */ | |
5844 | +export interface PostServiceOrderNoNeedInvoicingEditOption { | |
5845 | + /** | |
5846 | + * @description | |
5847 | + * dto | |
5848 | + */ | |
5849 | + body: { | |
5850 | + /** | |
5851 | + @description | |
5852 | + dto */ | |
5853 | + dto: Dto; | |
5854 | + }; | |
5855 | +} | |
5856 | + | |
5857 | +/** @description response type for postServiceOrderNoNeedInvoicingEdit */ | |
5858 | +export interface PostServiceOrderNoNeedInvoicingEditResponse { | |
5859 | + /** | |
5860 | + * @description | |
5861 | + * OK | |
5862 | + */ | |
5863 | + 200: ServerResult; | |
5864 | + /** | |
5865 | + * @description | |
5866 | + * Created | |
5867 | + */ | |
5868 | + 201: any; | |
5869 | + /** | |
5870 | + * @description | |
5871 | + * Unauthorized | |
5872 | + */ | |
5873 | + 401: any; | |
5874 | + /** | |
5875 | + * @description | |
5876 | + * Forbidden | |
5877 | + */ | |
5878 | + 403: any; | |
5879 | + /** | |
5880 | + * @description | |
5881 | + * Not Found | |
5882 | + */ | |
5883 | + 404: any; | |
5884 | +} | |
5885 | + | |
5886 | +export type PostServiceOrderNoNeedInvoicingEditResponseSuccess = | |
5887 | + PostServiceOrderNoNeedInvoicingEditResponse[200]; | |
5888 | +/** | |
5889 | + * @description | |
5890 | + * 财务无需开票的编辑按钮 | |
5891 | + * @tags 内部订单 | |
5892 | + * @produces * | |
5893 | + * @consumes application/json | |
5894 | + */ | |
5895 | +export const postServiceOrderNoNeedInvoicingEdit = /* #__PURE__ */ (() => { | |
5896 | + const method = 'post'; | |
5897 | + const url = '/service/order/noNeedInvoicingEdit'; | |
5898 | + function request( | |
5899 | + option: PostServiceOrderNoNeedInvoicingEditOption, | |
5900 | + ): Promise<PostServiceOrderNoNeedInvoicingEditResponseSuccess> { | |
5901 | + return requester(request.url, { | |
5902 | + method: request.method, | |
5903 | + ...option, | |
5904 | + }) as unknown as Promise<PostServiceOrderNoNeedInvoicingEditResponseSuccess>; | |
5905 | + } | |
5906 | + | |
5907 | + /** http method */ | |
5908 | + request.method = method; | |
5909 | + /** request url */ | |
5910 | + request.url = url; | |
5911 | + return request; | |
5912 | +})(); | |
5913 | + | |
5841 | 5914 | /** @description request parameter type for postServiceOrderNoNeedSend */ |
5842 | 5915 | export interface PostServiceOrderNoNeedSendOption { |
5843 | 5916 | /** |
... | ... | @@ -6122,6 +6195,77 @@ export const postServiceOrderProcureCheckOrder = /* #__PURE__ */ (() => { |
6122 | 6195 | return request; |
6123 | 6196 | })(); |
6124 | 6197 | |
6198 | +/** @description request parameter type for postServiceOrderProcureConvertProcure */ | |
6199 | +export interface PostServiceOrderProcureConvertProcureOption { | |
6200 | + /** | |
6201 | + * @description | |
6202 | + * dto | |
6203 | + */ | |
6204 | + body: { | |
6205 | + /** | |
6206 | + @description | |
6207 | + dto */ | |
6208 | + dto: ProcureConvertProcureDto; | |
6209 | + }; | |
6210 | +} | |
6211 | + | |
6212 | +/** @description response type for postServiceOrderProcureConvertProcure */ | |
6213 | +export interface PostServiceOrderProcureConvertProcureResponse { | |
6214 | + /** | |
6215 | + * @description | |
6216 | + * OK | |
6217 | + */ | |
6218 | + 200: ServerResult; | |
6219 | + /** | |
6220 | + * @description | |
6221 | + * Created | |
6222 | + */ | |
6223 | + 201: any; | |
6224 | + /** | |
6225 | + * @description | |
6226 | + * Unauthorized | |
6227 | + */ | |
6228 | + 401: any; | |
6229 | + /** | |
6230 | + * @description | |
6231 | + * Forbidden | |
6232 | + */ | |
6233 | + 403: any; | |
6234 | + /** | |
6235 | + * @description | |
6236 | + * Not Found | |
6237 | + */ | |
6238 | + 404: any; | |
6239 | +} | |
6240 | + | |
6241 | +export type PostServiceOrderProcureConvertProcureResponseSuccess = | |
6242 | + PostServiceOrderProcureConvertProcureResponse[200]; | |
6243 | +/** | |
6244 | + * @description | |
6245 | + * 采购转给采购 | |
6246 | + * @tags 内部订单 | |
6247 | + * @produces * | |
6248 | + * @consumes application/json | |
6249 | + */ | |
6250 | +export const postServiceOrderProcureConvertProcure = /* #__PURE__ */ (() => { | |
6251 | + const method = 'post'; | |
6252 | + const url = '/service/order/procureConvertProcure'; | |
6253 | + function request( | |
6254 | + option: PostServiceOrderProcureConvertProcureOption, | |
6255 | + ): Promise<PostServiceOrderProcureConvertProcureResponseSuccess> { | |
6256 | + return requester(request.url, { | |
6257 | + method: request.method, | |
6258 | + ...option, | |
6259 | + }) as unknown as Promise<PostServiceOrderProcureConvertProcureResponseSuccess>; | |
6260 | + } | |
6261 | + | |
6262 | + /** http method */ | |
6263 | + request.method = method; | |
6264 | + /** request url */ | |
6265 | + request.url = url; | |
6266 | + return request; | |
6267 | +})(); | |
6268 | + | |
6125 | 6269 | /** @description request parameter type for postServiceOrderProcureConvertWarehouseKeeper */ |
6126 | 6270 | export interface PostServiceOrderProcureConvertWarehouseKeeperOption { |
6127 | 6271 | /** |
... | ... | @@ -6194,6 +6338,77 @@ export const postServiceOrderProcureConvertWarehouseKeeper = |
6194 | 6338 | return request; |
6195 | 6339 | })(); |
6196 | 6340 | |
6341 | +/** @description request parameter type for postServiceOrderProcureOrder */ | |
6342 | +export interface PostServiceOrderProcureOrderOption { | |
6343 | + /** | |
6344 | + * @description | |
6345 | + * dto | |
6346 | + */ | |
6347 | + body: { | |
6348 | + /** | |
6349 | + @description | |
6350 | + dto */ | |
6351 | + dto: ProcureOrderDto; | |
6352 | + }; | |
6353 | +} | |
6354 | + | |
6355 | +/** @description response type for postServiceOrderProcureOrder */ | |
6356 | +export interface PostServiceOrderProcureOrderResponse { | |
6357 | + /** | |
6358 | + * @description | |
6359 | + * OK | |
6360 | + */ | |
6361 | + 200: ServerResult; | |
6362 | + /** | |
6363 | + * @description | |
6364 | + * Created | |
6365 | + */ | |
6366 | + 201: any; | |
6367 | + /** | |
6368 | + * @description | |
6369 | + * Unauthorized | |
6370 | + */ | |
6371 | + 401: any; | |
6372 | + /** | |
6373 | + * @description | |
6374 | + * Forbidden | |
6375 | + */ | |
6376 | + 403: any; | |
6377 | + /** | |
6378 | + * @description | |
6379 | + * Not Found | |
6380 | + */ | |
6381 | + 404: any; | |
6382 | +} | |
6383 | + | |
6384 | +export type PostServiceOrderProcureOrderResponseSuccess = | |
6385 | + PostServiceOrderProcureOrderResponse[200]; | |
6386 | +/** | |
6387 | + * @description | |
6388 | + * 采购下单按钮 | |
6389 | + * @tags 内部订单 | |
6390 | + * @produces * | |
6391 | + * @consumes application/json | |
6392 | + */ | |
6393 | +export const postServiceOrderProcureOrder = /* #__PURE__ */ (() => { | |
6394 | + const method = 'post'; | |
6395 | + const url = '/service/order/procureOrder'; | |
6396 | + function request( | |
6397 | + option: PostServiceOrderProcureOrderOption, | |
6398 | + ): Promise<PostServiceOrderProcureOrderResponseSuccess> { | |
6399 | + return requester(request.url, { | |
6400 | + method: request.method, | |
6401 | + ...option, | |
6402 | + }) as unknown as Promise<PostServiceOrderProcureOrderResponseSuccess>; | |
6403 | + } | |
6404 | + | |
6405 | + /** http method */ | |
6406 | + request.method = method; | |
6407 | + /** request url */ | |
6408 | + request.url = url; | |
6409 | + return request; | |
6410 | +})(); | |
6411 | + | |
6197 | 6412 | /** @description request parameter type for postServiceOrderProcurePrint */ |
6198 | 6413 | export interface PostServiceOrderProcurePrintOption { |
6199 | 6414 | /** |
... | ... | @@ -6576,6 +6791,60 @@ export const getServiceOrderProvidePaymentMethod = /* #__PURE__ */ (() => { |
6576 | 6791 | return request; |
6577 | 6792 | })(); |
6578 | 6793 | |
6794 | +/** @description response type for postServiceOrderProvideProcurementRoles */ | |
6795 | +export interface PostServiceOrderProvideProcurementRolesResponse { | |
6796 | + /** | |
6797 | + * @description | |
6798 | + * OK | |
6799 | + */ | |
6800 | + 200: ServerResult; | |
6801 | + /** | |
6802 | + * @description | |
6803 | + * Created | |
6804 | + */ | |
6805 | + 201: any; | |
6806 | + /** | |
6807 | + * @description | |
6808 | + * Unauthorized | |
6809 | + */ | |
6810 | + 401: any; | |
6811 | + /** | |
6812 | + * @description | |
6813 | + * Forbidden | |
6814 | + */ | |
6815 | + 403: any; | |
6816 | + /** | |
6817 | + * @description | |
6818 | + * Not Found | |
6819 | + */ | |
6820 | + 404: any; | |
6821 | +} | |
6822 | + | |
6823 | +export type PostServiceOrderProvideProcurementRolesResponseSuccess = | |
6824 | + PostServiceOrderProvideProcurementRolesResponse[200]; | |
6825 | +/** | |
6826 | + * @description | |
6827 | + * 提供采购角色 | |
6828 | + * @tags 内部订单 | |
6829 | + * @produces * | |
6830 | + * @consumes application/json | |
6831 | + */ | |
6832 | +export const postServiceOrderProvideProcurementRoles = /* #__PURE__ */ (() => { | |
6833 | + const method = 'post'; | |
6834 | + const url = '/service/order/provideProcurementRoles'; | |
6835 | + function request(): Promise<PostServiceOrderProvideProcurementRolesResponseSuccess> { | |
6836 | + return requester(request.url, { | |
6837 | + method: request.method, | |
6838 | + }) as unknown as Promise<PostServiceOrderProvideProcurementRolesResponseSuccess>; | |
6839 | + } | |
6840 | + | |
6841 | + /** http method */ | |
6842 | + request.method = method; | |
6843 | + /** request url */ | |
6844 | + request.url = url; | |
6845 | + return request; | |
6846 | +})(); | |
6847 | + | |
6579 | 6848 | /** @description response type for getServiceOrderProvideProductBelongDepartment */ |
6580 | 6849 | export interface GetServiceOrderProvideProductBelongDepartmentResponse { |
6581 | 6850 | /** | ... | ... |
src/utils/index.ts
... | ... | @@ -145,9 +145,53 @@ function getAliYunOSSFileNameFromUrl(url: string) { |
145 | 145 | return url; |
146 | 146 | } |
147 | 147 | } |
148 | + | |
149 | +function transImageFile(base64Image: any) { | |
150 | + // 将Base64字符串解码为二进制数据 | |
151 | + const binaryData = atob(base64Image.split(',')[1]); | |
152 | + | |
153 | + // 创建一个Uint8Array来存储二进制数据 | |
154 | + const arrayBuffer = new ArrayBuffer(binaryData.length); | |
155 | + const uint8Array = new Uint8Array(arrayBuffer); | |
156 | + for (let i = 0; i < binaryData.length; i++) { | |
157 | + uint8Array[i] = binaryData.charCodeAt(i); | |
158 | + } | |
159 | + | |
160 | + // 创建Blob对象 | |
161 | + return new Blob([uint8Array], { type: 'image/png' }); | |
162 | +} | |
163 | + | |
164 | +/** | |
165 | + * 复制文本到剪贴板 | |
166 | + * @param text | |
167 | + */ | |
168 | +function copyToClipboard(text: string) { | |
169 | + // 创建一个临时的textarea元素 | |
170 | + const textarea = document.createElement('textarea'); | |
171 | + textarea.value = text; | |
172 | + | |
173 | + // 将textarea元素添加到DOM中 | |
174 | + document.body.appendChild(textarea); | |
175 | + | |
176 | + // 选中textarea中的文本 | |
177 | + textarea.select(); | |
178 | + | |
179 | + try { | |
180 | + // 尝试执行复制命令 | |
181 | + document.execCommand('copy'); | |
182 | + return true; | |
183 | + } catch (err) { | |
184 | + return false; | |
185 | + } finally { | |
186 | + // 移除临时的textarea元素 | |
187 | + document.body.removeChild(textarea); | |
188 | + } | |
189 | +} | |
190 | + | |
148 | 191 | export { |
149 | 192 | appendFormData, |
150 | 193 | blobToFile, |
194 | + copyToClipboard, | |
151 | 195 | customMessage, |
152 | 196 | dataURItoBlob, |
153 | 197 | enumToProTableEnumValue, |
... | ... | @@ -158,4 +202,5 @@ export { |
158 | 202 | formatdate, |
159 | 203 | getAliYunOSSFileNameFromUrl, |
160 | 204 | getUserInfo, |
205 | + transImageFile, | |
161 | 206 | }; | ... | ... |