Commit 04acf26af9736f9e3c46f15491c779acf4bcc745

Authored by zhongnanhuang
1 parent 117c2644

feat: update

.idea/.gitignore 0 → 100644
  1 +# Default ignored files
  2 +/shelf/
  3 +/workspace.xml
  4 +# Editor-based HTTP Client requests
  5 +/httpRequests/
.idea/canrd-erp-front.iml 0 → 100644
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<module type="WEB_MODULE" version="4">
  3 + <component name="NewModuleRootManager">
  4 + <content url="file://$MODULE_DIR$">
  5 + <excludeFolder url="file://$MODULE_DIR$/temp" />
  6 + <excludeFolder url="file://$MODULE_DIR$/.tmp" />
  7 + <excludeFolder url="file://$MODULE_DIR$/tmp" />
  8 + </content>
  9 + <orderEntry type="inheritedJdk" />
  10 + <orderEntry type="sourceFolder" forTests="false" />
  11 + </component>
  12 +</module>
0 \ No newline at end of file 13 \ No newline at end of file
.idea/inspectionProfiles/Project_Default.xml 0 → 100644
  1 +<component name="InspectionProjectProfileManager">
  2 + <profile version="1.0">
  3 + <option name="myName" value="Project Default" />
  4 + <inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" />
  5 + <inspection_tool class="Stylelint" enabled="true" level="ERROR" enabled_by_default="true" />
  6 + </profile>
  7 +</component>
0 \ No newline at end of file 8 \ No newline at end of file
.idea/modules.xml 0 → 100644
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<project version="4">
  3 + <component name="ProjectModuleManager">
  4 + <modules>
  5 + <module fileurl="file://$PROJECT_DIR$/.idea/canrd-erp-front.iml" filepath="$PROJECT_DIR$/.idea/canrd-erp-front.iml" />
  6 + </modules>
  7 + </component>
  8 +</project>
0 \ No newline at end of file 9 \ No newline at end of file
.idea/vcs.xml 0 → 100644
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<project version="4">
  3 + <component name="VcsDirectoryMappings">
  4 + <mapping directory="$PROJECT_DIR$" vcs="Git" />
  5 + </component>
  6 +</project>
0 \ No newline at end of file 7 \ No newline at end of file
.umirc.ts
@@ -13,9 +13,9 @@ export default defineConfig({ @@ -13,9 +13,9 @@ export default defineConfig({
13 }, 13 },
14 proxy: { 14 proxy: {
15 '/api/': { 15 '/api/': {
16 - target: 'http://localhost:8085/', 16 + // target: 'http://localhost:8085/',
17 // target: 'http://192.168.1.6:8085/', 17 // target: 'http://192.168.1.6:8085/',
18 - // target: 'http://39.108.227.113:8085/', 18 + target: 'http://39.108.227.113:8085/',
19 changeOrigin: true, 19 changeOrigin: true,
20 pathRewrite: { '^/api': '' }, 20 pathRewrite: { '^/api': '' },
21 }, 21 },
@@ -36,6 +36,7 @@ export default defineConfig({ @@ -36,6 +36,7 @@ export default defineConfig({
36 name: '订单管理', 36 name: '订单管理',
37 path: '/order', 37 path: '/order',
38 component: './Order', 38 component: './Order',
  39 + icon: 'ProfileOutlined',
39 }, 40 },
40 { 41 {
41 name: '打印', 42 name: '打印',
src/app.ts
@@ -17,14 +17,13 @@ export async function getInitialState(): Promise&lt;{ name: string }&gt; { @@ -17,14 +17,13 @@ export async function getInitialState(): Promise&lt;{ name: string }&gt; {
17 17
18 export const layout = () => { 18 export const layout = () => {
19 return { 19 return {
20 - menuRender: false,  
21 -  
22 menu: { 20 menu: {
23 locale: false, 21 locale: false,
24 // header: true, 22 // header: true,
25 headerRender: true, 23 headerRender: true,
26 // rightContentRender: () => <RightContent />, 24 // rightContentRender: () => <RightContent />,
27 // footerRender: () => <Footer />, 25 // footerRender: () => <Footer />,
  26 + siderWidth: 190,
28 }, 27 },
29 }; 28 };
30 }; 29 };
src/pages/Order/components/HistoryModal.tsx 0 → 100644
  1 +import { postServiceOrderQueryHistoryOrderRecord } from '@/services';
  2 +import { Button, Modal, Timeline } from 'antd';
  3 +
  4 +export default ({ subOrders, onClose }) => {
  5 + let subOrderIds = subOrders?.map((subOrder: any) => {
  6 + return subOrder.id;
  7 + });
  8 +
  9 + const handleOk = () => {
  10 + onClose();
  11 + };
  12 +
  13 + const getHistory = async () => {
  14 + let res = await postServiceOrderQueryHistoryOrderRecord({
  15 + data: { ids: subOrderIds },
  16 + });
  17 + console.log(res);
  18 + };
  19 + getHistory();
  20 +
  21 + const handleCancel = () => {
  22 + onClose();
  23 + };
  24 +
  25 + return (
  26 + <>
  27 + <Modal
  28 + title="订单历史记录"
  29 + open
  30 + onOk={handleOk}
  31 + onCancel={handleCancel}
  32 + footer={() => (
  33 + <>
  34 + <Button onClick={handleCancel}>返回</Button>
  35 + </>
  36 + )}
  37 + >
  38 + <Timeline
  39 + className="pt-10"
  40 + items={[
  41 + {
  42 + children: 'Create a services site 2015-09-01',
  43 + },
  44 + {
  45 + children: 'Solve initial network problems 2015-09-01',
  46 + },
  47 + {
  48 + children: 'Technical testing 2015-09-01',
  49 + },
  50 + {
  51 + children: 'Network problems being solved 2015-09-01',
  52 + },
  53 + ]}
  54 + />
  55 + </Modal>
  56 + </>
  57 + );
  58 +};
src/pages/Order/components/OrderDrawer.tsx
1 import { RESPONSE_CODE } from '@/constants/enum'; 1 import { RESPONSE_CODE } from '@/constants/enum';
2 import { 2 import {
3 postServiceOrderAddOrder, 3 postServiceOrderAddOrder,
  4 + postServiceOrderQueryCustomerNameInformation,
4 postServiceOrderQueryProductInformation, 5 postServiceOrderQueryProductInformation,
5 postServiceOrderUpdateOrder, 6 postServiceOrderUpdateOrder,
6 } from '@/services'; 7 } from '@/services';
@@ -21,7 +22,7 @@ import { @@ -21,7 +22,7 @@ import {
21 ProFormTextArea, 22 ProFormTextArea,
22 ProFormUploadDragger, 23 ProFormUploadDragger,
23 } from '@ant-design/pro-components'; 24 } from '@ant-design/pro-components';
24 -import { Form, message } from 'antd'; 25 +import { Button, Form, message } from 'antd';
25 import { cloneDeep } from 'lodash'; 26 import { cloneDeep } from 'lodash';
26 import { useEffect, useRef, useState } from 'react'; 27 import { useEffect, useRef, useState } from 'react';
27 import { 28 import {
@@ -134,6 +135,56 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; { @@ -134,6 +135,56 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
134 currentData.unit = option?.unit; 135 currentData.unit = option?.unit;
135 form.setFieldValue('list', copyList); 136 form.setFieldValue('list', copyList);
136 } 137 }
  138 +
  139 + /**
  140 + * 选择收货人后自动填充信息
  141 + * @param option 收货人信息
  142 + */
  143 + function autoFillCustomerInfo(option: any) {
  144 + form.setFieldValue('institution', option.institution);
  145 + form.setFieldValue('institutionContactName', option.institutionContactName);
  146 + form.setFieldValue(
  147 + 'customerShippingAddress',
  148 + option.customerShippingAddress,
  149 + );
  150 + form.setFieldValue('customerContactNumber', option.customerContactNumber);
  151 + form.setFieldValue('customerName', option.customerName);
  152 + }
  153 +
  154 + /**
  155 + * 计算子订单金额
  156 + * @param listMeta 当前商品信息
  157 + */
  158 + function computeSubOrderPayment(listMeta: any) {
  159 + let quantity = listMeta?.record?.quantity;
  160 + let productPrice = listMeta?.record?.productPrice;
  161 + quantity = quantity === '' || quantity === undefined ? 0 : quantity;
  162 + productPrice =
  163 + productPrice === '' || productPrice === undefined ? 0 : productPrice;
  164 +
  165 + listMeta.subOrderPayment = quantity * productPrice;
  166 + let list = form.getFieldValue('list');
  167 + list[listMeta?.index].subOrderPayment = quantity * productPrice;
  168 + form.setFieldValue('list', list);
  169 + }
  170 +
  171 + /**
  172 + * 计算支付总额
  173 + */
  174 + function computeTotalPayment() {
  175 + let list = form.getFieldValue('list');
  176 + let totalPayment = 0;
  177 + list?.forEach((subOrder: any) => {
  178 + let subOrderPayment = subOrder?.subOrderPayment;
  179 + if (subOrderPayment === '' || subOrderPayment === undefined) {
  180 + totalPayment += 0;
  181 + } else {
  182 + totalPayment += subOrderPayment;
  183 + }
  184 + });
  185 + form.setFieldValue('totalPayment', totalPayment);
  186 + }
  187 +
137 return ( 188 return (
138 <DrawerForm<{ 189 <DrawerForm<{
139 deleteSubOrderLists: any; 190 deleteSubOrderLists: any;
@@ -225,13 +276,99 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; { @@ -225,13 +276,99 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
225 rules={[{ required: true, message: '销售代表必填' }]} 276 rules={[{ required: true, message: '销售代表必填' }]}
226 // disabled={mainInfoDisbled} 277 // disabled={mainInfoDisbled}
227 /> 278 />
228 - <ProFormText  
229 - name="customerName"  
230 - width="lg" 279 + <ProFormSelect
  280 + key="key"
231 label="收货人" 281 label="收货人"
  282 + width="lg"
  283 + showSearch
  284 + name="customerName"
  285 + // options={options}
232 placeholder="请输入收货人" 286 placeholder="请输入收货人"
233 rules={[{ required: true, message: '收货人必填' }]} 287 rules={[{ required: true, message: '收货人必填' }]}
234 - // disabled={mainInfoDisbled} 288 + onChange={(_, option) => {
  289 + autoFillCustomerInfo(option);
  290 + }}
  291 + fieldProps={{
  292 + optionItemRender(item) {
  293 + if (item.type === 'add') {
  294 + return (
  295 + <div title={item.customerName + '(新增商品信息)'}>
  296 + <span style={{ color: '#333333' }}>{item.customerName}</span>
  297 + {' | '}
  298 + <span style={{ color: 'orange' }}>自定义</span>
  299 + </div>
  300 + );
  301 + }
  302 + return (
  303 + <div
  304 + title={
  305 + item.customerName +
  306 + ' | ' +
  307 + item.customerContactNumber +
  308 + ' | ' +
  309 + (item.customerShippingAddress === undefined
  310 + ? '无地址'
  311 + : item.customerShippingAddress) +
  312 + ' | ' +
  313 + item.institutionContactName +
  314 + ' | ' +
  315 + item.institution
  316 + }
  317 + >
  318 + <span style={{ color: '#333333' }}>{item.customerName}</span>
  319 + {' | '}
  320 + <span style={{ color: '#339999' }}>
  321 + {item.customerContactNumber === undefined
  322 + ? '无电话号码'
  323 + : item.customerContactNumber}
  324 + </span>
  325 + {' | '}
  326 + <span style={{ color: '#666666' }}>
  327 + {item.customerShippingAddress === undefined
  328 + ? '无地址'
  329 + : item.customerShippingAddress}
  330 + </span>
  331 + {' | '}
  332 + <span style={{ color: '#666666' }}>
  333 + {item.institutionContactName === undefined
  334 + ? '无单位联系人'
  335 + : item.institutionContactName}
  336 + </span>
  337 + {' | '}
  338 + <span style={{ color: '#666666' }}>
  339 + {item.institution === undefined ? '无单位' : item.institution}
  340 + </span>
  341 + </div>
  342 + );
  343 + },
  344 + }}
  345 + request={async (value, { params }) => {
  346 + const keywords = value.keyWords;
  347 + const { data } = await postServiceOrderQueryCustomerNameInformation({
  348 + data: { customerName: keywords },
  349 + params: params,
  350 + });
  351 + let options = data.map((c: any) => {
  352 + return {
  353 + ...c,
  354 + label: c.customerName,
  355 + value: c.id,
  356 + key: c.id,
  357 + };
  358 + });
  359 +
  360 + //第一个商品默认为要新增的商品
  361 + if (keywords.trim() !== '') {
  362 + options.unshift({
  363 + customerName: keywords,
  364 + type: 'add',
  365 + label: keywords,
  366 + value: 3.1415926,
  367 + key: keywords,
  368 + });
  369 + }
  370 + return options;
  371 + }}
235 /> 372 />
236 <ProFormText 373 <ProFormText
237 width="lg" 374 width="lg"
@@ -265,13 +402,28 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; { @@ -265,13 +402,28 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
265 rules={[{ required: true, message: '收货地址必填' }]} 402 rules={[{ required: true, message: '收货地址必填' }]}
266 // disabled={mainInfoDisbled} 403 // disabled={mainInfoDisbled}
267 /> 404 />
268 - <ProFormDigit  
269 - name="totalPayment"  
270 - width="lg"  
271 - label="支付总额(¥)"  
272 - rules={[{ required: true, message: '支付总额必填' }]}  
273 - // disabled={mainInfoDisbled}  
274 - /> 405 + <div id="total-payment">
  406 + <ProFormDigit
  407 + name="totalPayment"
  408 + width="lg"
  409 + label="支付总额(¥)"
  410 + rules={[{ required: true, message: '支付总额必填' }]}
  411 + tooltip="点击计算,合计所有子订单金额"
  412 + fieldProps={{
  413 + addonAfter: (
  414 + <Button
  415 + className="rounded-l-none"
  416 + type="primary"
  417 + onClick={computeTotalPayment}
  418 + >
  419 + 计算
  420 + </Button>
  421 + ),
  422 + }}
  423 + // disabled={mainInfoDisbled}
  424 + />
  425 + </div>
  426 +
275 <ProFormSelect 427 <ProFormSelect
276 placeholder="请输入支付渠道" 428 placeholder="请输入支付渠道"
277 name="paymentChannel" 429 name="paymentChannel"
@@ -382,14 +534,11 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; { @@ -382,14 +534,11 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
382 resolve(false); 534 resolve(false);
383 return; 535 return;
384 } 536 }
385 - setTimeout(() => {  
386 - resolve(true);  
387 - }, 1000); 537 + resolve(true);
388 }); 538 });
389 }, 539 },
390 }} 540 }}
391 itemRender={(doms, listMeta) => { 541 itemRender={(doms, listMeta) => {
392 - // const list = actionRef.current?.getList();  
393 if (optType('edit')) { 542 if (optType('edit')) {
394 let i = 0; 543 let i = 0;
395 let defaultFileList = listMeta.record?.listAnnex?.map((annex) => { 544 let defaultFileList = listMeta.record?.listAnnex?.map((annex) => {
@@ -495,9 +644,96 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; { @@ -495,9 +644,96 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
495 return options; 644 return options;
496 }} 645 }}
497 />, 646 />,
498 - doms.listDom, 647 + <ProFormText
  648 + key="productCode"
  649 + width="lg"
  650 + name="productCode"
  651 + disabled
  652 + label={
  653 + <>
  654 + <span>商品编码</span>
  655 + <span className="text-gray-400 text-xs pl-2">
  656 + 新增商品时,商品编码由系统自动生成
  657 + </span>
  658 + </>
  659 + }
  660 + placeholder="未输入商品名称"
  661 + />,
  662 + <ProFormText
  663 + key="parameters"
  664 + width="lg"
  665 + name="parameters"
  666 + label="商品参数"
  667 + placeholder="请输入商品参数"
  668 + rules={[{ required: true, message: '商品参数必填' }]}
  669 + />,
  670 + <ProFormDigit
  671 + key="quantity"
  672 + width="lg"
  673 + name="quantity"
  674 + label="商品数量"
  675 + fieldProps={{
  676 + onChange: (value) => {
  677 + listMeta.record.quantity = value;
  678 + computeSubOrderPayment(listMeta);
  679 + },
  680 + }}
  681 + placeholder="请输入商品数量"
  682 + rules={[{ required: true, message: '商品数量必填' }]}
  683 + />,
  684 + <ProFormDigit
  685 + key="productPrice"
  686 + width="lg"
  687 + name="productPrice"
  688 + label="商品单价"
  689 + fieldProps={{
  690 + onChange: (value) => {
  691 + listMeta.record.productPrice = value;
  692 + computeSubOrderPayment(listMeta);
  693 + },
  694 + }}
  695 + placeholder="请输入商品单价"
  696 + rules={[{ required: true, message: '商品单价必填' }]}
  697 + />,
  698 + <ProFormText
  699 + key="unit"
  700 + width="lg"
  701 + name="unit"
  702 + label="商品单位"
  703 + placeholder="请输入商品单位"
  704 + rules={[{ required: true, message: '商品单位必填' }]}
  705 + />,
  706 +
  707 + <ProFormDigit
  708 + width="lg"
  709 + key="subOrderPayment"
  710 + name="subOrderPayment"
  711 + label="子订单金额"
  712 + placeholder="请输入子订单金额"
  713 + tooltip="商品数量和单价变化后会自动计算子订单金额"
  714 + rules={[{ required: true, message: '子订单金额必填' }]}
  715 + />,
  716 + <ProFormSelect
  717 + key="productBelongBusiness"
  718 + placeholder="请输入所属事业部"
  719 + name="productBelongBusiness"
  720 + width="lg"
  721 + label="所属事业部"
  722 + options={enumToSelect(PRODUCT_BELONG_DEPARTMENT_OPTIONS)}
  723 + initialValue={'EXPERIMENTAL_CONSUMABLES'}
  724 + rules={[{ required: true, message: '所属事业部必填' }]}
  725 + // disabled={mainInfoDisbled}
  726 + />,
  727 + <ProFormText
  728 + key="notes"
  729 + width="lg"
  730 + name="notes"
  731 + label="备注"
  732 + placeholder="请输入备注"
  733 + />,
499 <> 734 <>
500 <ProFormUploadDragger 735 <ProFormUploadDragger
  736 + key="filePaths"
501 label="附件" 737 label="附件"
502 name="filePaths" 738 name="filePaths"
503 action="/api/service/order/fileProcess" 739 action="/api/service/order/fileProcess"
@@ -512,74 +748,7 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; { @@ -512,74 +748,7 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
512 ); 748 );
513 }} 749 }}
514 actionRef={actionRef} 750 actionRef={actionRef}
515 - >  
516 - <ProFormText  
517 - width="lg"  
518 - name="productCode"  
519 - disabled  
520 - label={  
521 - <>  
522 - <span>商品编码</span>  
523 - <span className="text-gray-400 text-xs pl-2">  
524 - 新增商品时,商品编码由系统自动生成  
525 - </span>  
526 - </>  
527 - }  
528 - placeholder="未输入商品名称"  
529 - />  
530 - <ProFormText  
531 - width="lg"  
532 - name="parameters"  
533 - label="商品参数"  
534 - placeholder="请输入商品参数"  
535 - rules={[{ required: true, message: '商品参数必填' }]}  
536 - />  
537 - <ProFormDigit  
538 - width="lg"  
539 - name="quantity"  
540 - label="商品数量"  
541 - placeholder="请输入商品数量"  
542 - rules={[{ required: true, message: '商品数量必填' }]}  
543 - />  
544 - <ProFormDigit  
545 - width="lg"  
546 - name="productPrice"  
547 - label="商品单价"  
548 - placeholder="请输入商品单价"  
549 - rules={[{ required: true, message: '商品单价必填' }]}  
550 - />  
551 - <ProFormText  
552 - width="lg"  
553 - name="unit"  
554 - label="商品单位"  
555 - placeholder="请输入商品单位"  
556 - rules={[{ required: true, message: '商品单位必填' }]}  
557 - />  
558 -  
559 - <ProFormDigit  
560 - width="lg"  
561 - name="subOrderPayment"  
562 - label="子订单金额"  
563 - placeholder="请输入子订单金额"  
564 - rules={[{ required: true, message: '子订单金额必填' }]}  
565 - />  
566 - <ProFormSelect  
567 - placeholder="请输入所属事业部"  
568 - name="productBelongBusiness"  
569 - width="lg"  
570 - label="所属事业部"  
571 - options={enumToSelect(PRODUCT_BELONG_DEPARTMENT_OPTIONS)}  
572 - initialValue={'EXPERIMENTAL_CONSUMABLES'}  
573 - rules={[{ required: true, message: '所属事业部必填' }]}  
574 - // disabled={mainInfoDisbled}  
575 - />  
576 - <ProFormText  
577 - width="lg"  
578 - name="notes"  
579 - label="备注"  
580 - placeholder="请输入备注"  
581 - />  
582 - </ProFormList> 751 + ></ProFormList>
583 </DrawerForm> 752 </DrawerForm>
584 ); 753 );
585 }; 754 };
src/pages/Order/index.less
@@ -9,3 +9,74 @@ td { @@ -9,3 +9,74 @@ td {
9 'WenQuanYi Micro Hei', sans-serif; 9 'WenQuanYi Micro Hei', sans-serif;
10 font-size: 13px; 10 font-size: 13px;
11 } 11 }
  12 +
  13 +//订单编辑抽屉中,订单总额addonAfter的padding去除
  14 +#total-payment .ant-input-number-group-addon {
  15 + padding: 0 !important;
  16 +}
  17 +
  18 +table:hover,
  19 +tr:hover,
  20 +thead:hover {
  21 + background: none !important;
  22 +}
  23 +
  24 +#main-table .ant-table-tbody > tr.ant-table-row:hover > td {
  25 + background: none !important;
  26 +}
  27 +
  28 +.ant-pro-card {
  29 + background-color: transparent;
  30 +}
  31 +
  32 +#main-table .ant-table-tbody .ant-table-cell {
  33 + padding: 10px 0 0;
  34 +}
  35 +
  36 +#main-table .ant-table-tbody {
  37 + background-color: #f5f5f5;
  38 +}
  39 +
  40 +.ant-pro-card-body {
  41 + padding: 0 !important;
  42 +}
  43 +
  44 +.ant-table-thead .ant-table-cell {
  45 + background-color: #fff !important;
  46 + border-radius: 8px !important;
  47 +}
  48 +
  49 +#sub-table tbody td {
  50 + padding: 10px 0 !important;
  51 +}
  52 +
  53 +// 子订单第一行的上边两个角为圆角
  54 +#sub-table tbody tr:first-child td:first-child {
  55 + border-top-left-radius: 8px;
  56 +}
  57 +
  58 +#sub-table tbody tr:first-child td:nth-child(2) {
  59 + border-top-right-radius: 8px;
  60 +}
  61 +
  62 +//子订单最后一行的下边两个角为圆角
  63 +#sub-table tbody tr:last-child td:first-child {
  64 + border-bottom-left-radius: 8px;
  65 +}
  66 +
  67 +#sub-table tbody tr:last-child td:nth-child(2) {
  68 + border-bottom-right-radius: 8px;
  69 +}
  70 +
  71 +//子订单边线颜色
  72 +#sub-table tbody tr td:first-child {
  73 + border-top: 1px solid #d7d6d6; /* 设置行与行之间分割线的颜色 */
  74 + border-bottom: 1px solid #d7d6d6; /* 设置行与行之间分割线的颜色 */
  75 + border-left: 1px solid #d7d6d6; /* 设置行与行之间分割线的颜色 */
  76 +}
  77 +
  78 +#sub-table tbody tr td:nth-child(2) {
  79 + border-top: 1px solid #d7d6d6; /* 设置行与行之间分割线的颜色 */
  80 + border-bottom: 1px solid #d7d6d6; /* 设置行与行之间分割线的颜色 */
  81 + border-right: 1px solid #d7d6d6; /* 设置行与行之间分割线的颜色 */
  82 +}
src/pages/Order/index.tsx
@@ -7,9 +7,10 @@ import { @@ -7,9 +7,10 @@ import {
7 import { orderExport } from '@/services/order'; 7 import { orderExport } from '@/services/order';
8 import { enumValueToLabel, formatDateTime } from '@/utils'; 8 import { enumValueToLabel, formatDateTime } from '@/utils';
9 import { 9 import {
  10 + ClockCircleOutlined,
  11 + CopyOutlined,
10 DownOutlined, 12 DownOutlined,
11 EllipsisOutlined, 13 EllipsisOutlined,
12 - QuestionCircleOutlined,  
13 } from '@ant-design/icons'; 14 } from '@ant-design/icons';
14 import { 15 import {
15 PageContainer, 16 PageContainer,
@@ -21,38 +22,33 @@ import { @@ -21,38 +22,33 @@ import {
21 Avatar, 22 Avatar,
22 Button, 23 Button,
23 Checkbox, 24 Checkbox,
24 - Divider,  
25 Dropdown, 25 Dropdown,
26 Flex, 26 Flex,
27 MenuProps, 27 MenuProps,
28 - Modal,  
29 Space, 28 Space,
30 Tag, 29 Tag,
31 - Tooltip,  
32 message, 30 message,
33 } from 'antd'; 31 } from 'antd';
34 import { cloneDeep } from 'lodash'; 32 import { cloneDeep } from 'lodash';
35 -import { Key, useEffect, useRef, useState } from 'react'; 33 +import { Key, useRef, useState } from 'react';
36 import OrderPrintModal from '../OrderPrint/OrderPrintModal'; 34 import OrderPrintModal from '../OrderPrint/OrderPrintModal';
37 import AttachmentModal from './components/AttachmentModal'; 35 import AttachmentModal from './components/AttachmentModal';
38 import CheckModal from './components/CheckModal'; 36 import CheckModal from './components/CheckModal';
39 import ConfirmReceiptModal from './components/ConfirmReceiptModal'; 37 import ConfirmReceiptModal from './components/ConfirmReceiptModal';
40 import DeliverModal from './components/DeliverModal'; 38 import DeliverModal from './components/DeliverModal';
41 import FinancialDrawer from './components/FinancialDrawer'; 39 import FinancialDrawer from './components/FinancialDrawer';
  40 +import HistoryModal from './components/HistoryModal';
42 import ImportModal from './components/ImportModal'; 41 import ImportModal from './components/ImportModal';
43 import OrderDrawer from './components/OrderDrawer'; 42 import OrderDrawer from './components/OrderDrawer';
44 import OrderNotesEditModal from './components/OrderNotesEditModal'; 43 import OrderNotesEditModal from './components/OrderNotesEditModal';
45 import SubOrderComfirmReceiptImagesModal from './components/SubOrderComfirmReceiptImagesModal'; 44 import SubOrderComfirmReceiptImagesModal from './components/SubOrderComfirmReceiptImagesModal';
46 import { 45 import {
47 INVOCING_STATUS_OPTIONS, 46 INVOCING_STATUS_OPTIONS,
48 - LOGISTICS_STATUS_OPTIONS,  
49 MAIN_ORDER_COLUMNS, 47 MAIN_ORDER_COLUMNS,
50 ORDER_STATUS_OPTIONS, 48 ORDER_STATUS_OPTIONS,
51 PAYMENT_CHANNEL_OPTIONS, 49 PAYMENT_CHANNEL_OPTIONS,
52 PAYMENT_METHOD_OPTIONS, 50 PAYMENT_METHOD_OPTIONS,
53 PRODUCT_BELONG_DEPARTMENT_OPTIONS, 51 PRODUCT_BELONG_DEPARTMENT_OPTIONS,
54 - SUB_ORDER_COLUMNS,  
55 - TAGS_COLOR,  
56 } from './constant'; 52 } from './constant';
57 import './index.less'; 53 import './index.less';
58 import { OrderListItemType, OrderType } from './type.d'; 54 import { OrderListItemType, OrderType } from './type.d';
@@ -69,6 +65,8 @@ const OrderPage = () =&gt; { @@ -69,6 +65,8 @@ const OrderPage = () =&gt; {
69 const [attachmentModalVisible, setAttachmentModalVisible] = 65 const [attachmentModalVisible, setAttachmentModalVisible] =
70 useState<boolean>(false); 66 useState<boolean>(false);
71 const [financialVisible, setFinancialVisible] = useState<boolean>(false); 67 const [financialVisible, setFinancialVisible] = useState<boolean>(false);
  68 + const [historyModalVisible, setHistoryModalVisible] =
  69 + useState<boolean>(false);
72 const [isRePrintOrder, setIsRePrintOrder] = useState<boolean>(false); 70 const [isRePrintOrder, setIsRePrintOrder] = useState<boolean>(false);
73 const [isSendProduct, setIsSendProduct] = useState<boolean>(false); 71 const [isSendProduct, setIsSendProduct] = useState<boolean>(false);
74 const [isMainOrder, setIsMainOrder] = useState<boolean>(false); 72 const [isMainOrder, setIsMainOrder] = useState<boolean>(false);
@@ -83,7 +81,7 @@ const OrderPage = () =&gt; { @@ -83,7 +81,7 @@ const OrderPage = () =&gt; {
83 const [mainOrderAllItemKeys, setMainOrderAllItemKeys] = useState([]); 81 const [mainOrderAllItemKeys, setMainOrderAllItemKeys] = useState([]);
84 const [rolePath, setRolePath] = useState([]); //当前角色权限(新增跟打印按钮) 82 const [rolePath, setRolePath] = useState([]); //当前角色权限(新增跟打印按钮)
85 const userInfo = JSON.parse(localStorage.getItem('userInfo')); 83 const userInfo = JSON.parse(localStorage.getItem('userInfo'));
86 - const [tableHeight, setTableHeight] = useState(200); 84 + // const [tableHeight, setTableHeight] = useState(200);
87 const [selectedRows, setSelectedRows] = useState({}); 85 const [selectedRows, setSelectedRows] = useState({});
88 const [selectedRowObj, setSelectedRowObj] = useState({}); 86 const [selectedRowObj, setSelectedRowObj] = useState({});
89 const [selectedItems, setSelectedItems] = useState([]); 87 const [selectedItems, setSelectedItems] = useState([]);
@@ -93,17 +91,17 @@ const OrderPage = () =&gt; { @@ -93,17 +91,17 @@ const OrderPage = () =&gt; {
93 const mainTableRef = useRef(); 91 const mainTableRef = useRef();
94 const [messageApi, contextHolder] = message.useMessage(); 92 const [messageApi, contextHolder] = message.useMessage();
95 93
96 - const openCheckNotes = (checkNotes: string) => {  
97 - Modal.info({  
98 - title: '驳回备注',  
99 - content: (  
100 - <div>  
101 - <p>{checkNotes}</p>  
102 - </div>  
103 - ),  
104 - onOk() {},  
105 - });  
106 - }; 94 + // const openCheckNotes = (checkNotes: string) => {
  95 + // Modal.info({
  96 + // title: '驳回备注',
  97 + // content: (
  98 + // <div>
  99 + // <p>{checkNotes}</p>
  100 + // </div>
  101 + // ),
  102 + // onOk() { },
  103 + // });
  104 + // };
107 105
108 const exportLoading = () => { 106 const exportLoading = () => {
109 messageApi.open({ 107 messageApi.open({
@@ -125,30 +123,30 @@ const OrderPage = () =&gt; { @@ -125,30 +123,30 @@ const OrderPage = () =&gt; {
125 setSelectedRowKeys([]); 123 setSelectedRowKeys([]);
126 }; 124 };
127 125
128 - const resize = () => {  
129 - // 计算元素底部到视口顶部的距离  
130 - let bottomDistance = document  
131 - .getElementById('mainTable')  
132 - ?.getElementsByClassName('ant-table-thead')[0]  
133 - .getBoundingClientRect().bottom;  
134 - // 获取屏幕高度  
135 - let screenHeight =  
136 - window.innerHeight || document.documentElement.clientHeight; 126 + // const resize = () => {
  127 + // // 计算元素底部到视口顶部的距离
  128 + // let bottomDistance = document
  129 + // .getElementById('mainTable')
  130 + // ?.getElementsByClassName('ant-table-thead')[0]
  131 + // .getBoundingClientRect().bottom;
  132 + // // 获取屏幕高度
  133 + // let screenHeight =
  134 + // window.innerHeight || document.documentElement.clientHeight;
137 135
138 - // 计算元素底部到屏幕底部的距离  
139 - let bottomToScreenBottomDistance = screenHeight - bottomDistance; 136 + // // 计算元素底部到屏幕底部的距离
  137 + // let bottomToScreenBottomDistance = screenHeight - bottomDistance;
140 138
141 - // //底部分页元素的高度  
142 - // var pH = screenHeight - document.getElementById("mainTable").getElementsByClassName('ant-table-body')[0].getBoundingClientRect().bottom; 139 + // // //底部分页元素的高度
  140 + // // var pH = screenHeight - document.getElementById("main-table").getElementsByClassName('ant-table-body')[0].getBoundingClientRect().bottom;
143 141
144 - setTableHeight(bottomToScreenBottomDistance - 88);  
145 - }; 142 + // setTableHeight(bottomToScreenBottomDistance - 88);
  143 + // };
146 144
147 - useEffect(() => {  
148 - resize();  
149 - // 添加事件监听器,当窗口大小改变时调用resize方法  
150 - window.addEventListener('resize', resize);  
151 - }); 145 + // useEffect(() => {
  146 + // resize();
  147 + // // 添加事件监听器,当窗口大小改变时调用resize方法
  148 + // window.addEventListener('resize', resize);
  149 + // });
152 150
153 const onCheckboxChange = (itemKey: never) => { 151 const onCheckboxChange = (itemKey: never) => {
154 const newSelectedItems = selectedItems.includes(itemKey) 152 const newSelectedItems = selectedItems.includes(itemKey)
@@ -157,453 +155,398 @@ const OrderPage = () =&gt; { @@ -157,453 +155,398 @@ const OrderPage = () =&gt; {
157 155
158 setSelectedItems(newSelectedItems); 156 setSelectedItems(newSelectedItems);
159 }; 157 };
160 - const handleAllExpand = () => {  
161 - if (expandedRowKeys.length === mainOrderAllItemKeys.length) {  
162 - setExpandedRowKeys([]);  
163 - return;  
164 - }  
165 - setExpandedRowKeys(mainOrderAllItemKeys); 158 + const handleTableExpand = (mainOrderIds: any) => {
  159 + setExpandedRowKeys(mainOrderIds);
  160 + };
  161 +
  162 + //表头渲染
  163 + const OrderTableHeader = () => {
  164 + return (
  165 + <Flex className="w-full">
  166 + <Flex className="w-[24%] ml-[5%]">商品信息</Flex>
  167 + <Flex className="w-[15%]">交易金额</Flex>
  168 + <Flex className="w-[10%]">支付</Flex>
  169 + <Flex className="w-[13%]">其他</Flex>
  170 + <Flex className="w-[10%]">交易状态</Flex>
  171 + <Flex className="w-[23%]">操作</Flex>
  172 + </Flex>
  173 + );
  174 + };
  175 + //子订单内容渲染
  176 + const SubOderRander = ({ record, optRecord }) => {
  177 + return (
  178 + <Flex className="w-full border-b-indigo-500">
  179 + <Flex vertical className="w-[26%]" gap="small">
  180 + <div className="whitespace-no-wrap overflow-hidden overflow-ellipsis">
  181 + {optRecord.productName}
  182 + </div>
  183 + <div className="whitespace-no-wrap overflow-hidden overflow-ellipsis">
  184 + {optRecord.parameters}
  185 + </div>
  186 + <div className="whitespace-no-wrap overflow-hidden overflow-ellipsis">
  187 + {optRecord.notes}
  188 + <Button
  189 + type="dashed"
  190 + size="small"
  191 + onClick={() => {
  192 + setNotesEditVisible(true);
  193 + setOrderRow(optRecord);
  194 + setIsMainOrder(false);
  195 + }}
  196 + >
  197 + 详情
  198 + </Button>
  199 + </div>
  200 + </Flex>
  201 + <Flex className="w-[16%]" vertical gap="small">
  202 + <div className="whitespace-no-wrap overflow-hidden overflow-ellipsis">
  203 + 单价:¥{optRecord.productPrice}
  204 + </div>
  205 + <div className="whitespace-no-wrap overflow-hidden overflow-ellipsis">
  206 + 数量:x{optRecord.quantity}
  207 + </div>
  208 + <div className="whitespace-no-wrap overflow-hidden overflow-ellipsis">
  209 + 合计:¥{optRecord.subOrderPayment}
  210 + </div>
  211 + </Flex>
  212 + <Flex className="w-[10%]" vertical gap="small">
  213 + <div className="whitespace-no-wrap overflow-hidden overflow-ellipsis">
  214 + {enumValueToLabel(optRecord.paymentMethod, PAYMENT_METHOD_OPTIONS)}
  215 + </div>
  216 + <div className="whitespace-no-wrap overflow-hidden overflow-ellipsis">
  217 + {enumValueToLabel(
  218 + optRecord.paymentChannel,
  219 + PAYMENT_CHANNEL_OPTIONS,
  220 + )}
  221 + </div>
  222 + </Flex>
  223 + <Flex className="w-[15%]" vertical gap="small">
  224 + <div className="whitespace-no-wrap overflow-hidden overflow-ellipsis">
  225 + {enumValueToLabel(
  226 + optRecord.productBelongBusiness,
  227 + PRODUCT_BELONG_DEPARTMENT_OPTIONS,
  228 + )}
  229 + </div>
  230 + </Flex>
  231 + <Flex className="w-[10%]" vertical gap="small">
  232 + <div className="whitespace-no-wrap overflow-hidden overflow-ellipsis">
  233 + {enumValueToLabel(
  234 + optRecord.invoicingStatus,
  235 + INVOCING_STATUS_OPTIONS,
  236 + )}
  237 + </div>
  238 + <div className="whitespace-no-wrap overflow-hidden overflow-ellipsis">
  239 + {enumValueToLabel(optRecord.orderStatus, ORDER_STATUS_OPTIONS)}
  240 + </div>
  241 + </Flex>
  242 + <Flex className="w-[23%]" wrap="wrap" gap="small">
  243 + {optRecord.subPath.includes('sendProduct') ? (
  244 + <Button
  245 + className="p-0"
  246 + type="link"
  247 + onClick={() => {
  248 + optRecord.mainOrderId = record.id;
  249 + setSelectedRows([cloneDeep(optRecord)]); //克隆一份数据,避免后续修改污染
  250 + setDeliverVisible(true);
  251 + setIsSendProduct(true);
  252 + }}
  253 + >
  254 + 发货
  255 + </Button>
  256 + ) : (
  257 + ''
  258 + )}
  259 +
  260 + {optRecord.subPath.includes('queryAnnex') ? (
  261 + <Button
  262 + className="p-0"
  263 + type="link"
  264 + onClick={() => {
  265 + optRecord.mainOrderId = record.id;
  266 + setAttachmentModalVisible(true);
  267 + setOrderRow(optRecord);
  268 + }}
  269 + >
  270 + 附件
  271 + </Button>
  272 + ) : (
  273 + ''
  274 + )}
  275 +
  276 + {optRecord.subPath.includes('modifySendInformation') ? (
  277 + <Button
  278 + className="p-0"
  279 + type="link"
  280 + onClick={() => {
  281 + optRecord.mainOrderId = record.id;
  282 + setSelectedRows([cloneDeep(optRecord)]); //克隆一份数据,避免后续修改污染
  283 + setDeliverVisible(true);
  284 + setIsSendProduct(false);
  285 + }}
  286 + >
  287 + 修改发货信息
  288 + </Button>
  289 + ) : (
  290 + ''
  291 + )}
  292 +
  293 + {optRecord.subPath.includes('printOrder') ? (
  294 + <Button
  295 + className="p-0"
  296 + type="link"
  297 + onClick={async () => {
  298 + setOrderPrintVisible(true);
  299 + setSelectedRows([optRecord]);
  300 + setOrderRow(record);
  301 + }}
  302 + >
  303 + 打印
  304 + </Button>
  305 + ) : (
  306 + ''
  307 + )}
  308 + {optRecord.subPath.includes('editOrder') ? (
  309 + <Button
  310 + className="p-0"
  311 + type="link"
  312 + onClick={() => {
  313 + setFinancialVisible(true);
  314 + setOrderRow(record);
  315 + setSelectedRows([optRecord]);
  316 + setIsFinalcialEdit(true);
  317 + }}
  318 + >
  319 + 编辑
  320 + </Button>
  321 + ) : (
  322 + ''
  323 + )}
  324 + {optRecord.subPath.includes('invoicing') ? (
  325 + <Button
  326 + className="p-0"
  327 + type="link"
  328 + onClick={() => {
  329 + setFinancialVisible(true);
  330 + setIsFinalcialEdit(false);
  331 + setOrderRow(record);
  332 + setSelectedRows([optRecord]);
  333 + }}
  334 + >
  335 + 开票
  336 + </Button>
  337 + ) : (
  338 + ''
  339 + )}
  340 + {optRecord.subPath.includes('checkOrder') ? (
  341 + <Button
  342 + className="p-0"
  343 + type="link"
  344 + onClick={() => {
  345 + setOrderRow(optRecord);
  346 + setCheckVisible(true);
  347 + setSelectedRows([optRecord]);
  348 + }}
  349 + >
  350 + 审核
  351 + </Button>
  352 + ) : (
  353 + ''
  354 + )}
  355 +
  356 + {optRecord.subPath.includes('rePrintOrder') ? (
  357 + <Button
  358 + className="p-0"
  359 + type="link"
  360 + onClick={() => {
  361 + setOrderPrintVisible(true);
  362 + setSelectedRows([optRecord]);
  363 + setOrderRow(record);
  364 + setIsRePrintOrder(true);
  365 + }}
  366 + >
  367 + 重新打印
  368 + </Button>
  369 + ) : (
  370 + ''
  371 + )}
  372 +
  373 + {optRecord.subPath.includes('confirmReceipt') ? (
  374 + <Button
  375 + className="p-0"
  376 + type="link"
  377 + onClick={() => {
  378 + setConfirmReceiptVisible(true);
  379 + setOrderRow(optRecord);
  380 + }}
  381 + >
  382 + 确认收货
  383 + </Button>
  384 + ) : (
  385 + ''
  386 + )}
  387 + {optRecord.subPath.includes('viewImages') ? (
  388 + <Button
  389 + className="p-0"
  390 + type="link"
  391 + onClick={() => {
  392 + setSubOrderConfirmReceiptImagesVisible(true);
  393 + setOrderRow(optRecord);
  394 + }}
  395 + >
  396 + 查看收货凭证
  397 + </Button>
  398 + ) : (
  399 + ''
  400 + )}
  401 + </Flex>
  402 + </Flex>
  403 + );
166 }; 404 };
  405 + const expandedRowRender = (record) => {
  406 + let subOrders = record.subOrderInformationLists;
  407 +
  408 + return (
  409 + <ProTable
  410 + id="sub-table"
  411 + className=" w-full"
  412 + showHeader={false}
  413 + columns={[
  414 + {
  415 + title: 'ID',
  416 + dataIndex: 'id',
  417 + key: 'id',
  418 + render: (text: any, optRecord: any) => {
  419 + return <SubOderRander record={record} optRecord={optRecord} />;
  420 + },
  421 + },
  422 + ]}
  423 + rowSelection={{
  424 + onChange: (selectedRowKeys: any, selectedRows: any) => {
  425 + setSelectedRowKeys(selectedRowKeys);
  426 + setSelectedRowObj({
  427 + ...setSelectedRowObj,
  428 + [record.id]: selectedRows,
  429 + });
  430 + selectedRowObj[record.id] = selectedRows;
  431 + setSelectedRows(selectedRows);
  432 + },
  433 + selectedRowKeys: selectedRowKeys,
  434 + // 自定义选择项参考: https://ant.design/components/table-cn/#components-table-demo-row-selection-custom
  435 + // 注释该行则默认不显示下拉选项
  436 + // selections: [Table.SELECTION_ALL, Table.SELECTION_INVERT],
  437 + // defaultSelectedRowKeys: [],
  438 + }}
  439 + rowKey="id"
  440 + headerTitle={false}
  441 + search={false}
  442 + options={false}
  443 + dataSource={subOrders}
  444 + pagination={false}
  445 + />
  446 + );
  447 + };
  448 +
167 // 主订单内容渲染 449 // 主订单内容渲染
168 const MainOrderColumnRender = ({ record }: { record: OrderListItemType }) => { 450 const MainOrderColumnRender = ({ record }: { record: OrderListItemType }) => {
169 - const handleExpand = (key: number) => {  
170 - const newExpandedRowKeys = expandedRowKeys.includes(key)  
171 - ? expandedRowKeys.filter((k) => k !== key)  
172 - : [...expandedRowKeys, key]; 451 + // const handleExpand = (key: number) => {
  452 + // const newExpandedRowKeys = expandedRowKeys.includes(key)
  453 + // ? expandedRowKeys.filter((k) => k !== key)
  454 + // : [...expandedRowKeys, key];
173 455
174 - setExpandedRowKeys(newExpandedRowKeys);  
175 - }; 456 + // setExpandedRowKeys(newExpandedRowKeys);
  457 + // };
176 return ( 458 return (
177 <Flex vertical={true}> 459 <Flex vertical={true}>
178 {/* 编号、时间、销售信息 */} 460 {/* 编号、时间、销售信息 */}
179 - <Flex justify="space-between" className="px-2 py-4 bg-gray-100">  
180 - <Checkbox  
181 - onChange={() => onCheckboxChange(record.id)}  
182 - checked={selectedItems.includes(record.id)}  
183 - >  
184 - <Flex wrap="wrap" gap="middle">  
185 - <div>{formatDateTime(record.createTime)}</div>  
186 - <div>订单编号:{record.id}</div> 461 + <Flex
  462 + className="px-4 py-4 bg-white bg-white rounded-t-lg"
  463 + justify="space-between"
  464 + >
  465 + <Flex wrap="wrap" gap="middle" vertical>
  466 + <Flex>
  467 + <Flex>
  468 + <Checkbox
  469 + onChange={() => onCheckboxChange(record.id)}
  470 + checked={selectedItems.includes(record.id)}
  471 + >
  472 + <div>
  473 + 订单号:{record.id}
  474 + {' ' + formatDateTime(record.createTime)}
  475 + </div>
  476 + </Checkbox>
  477 + <div>代表:{record.salesCode}</div>
  478 + <span>单位:{record.institution}</span>
  479 + <span>联系人:{record.institutionContactName}</span>
  480 + </Flex>
187 </Flex> 481 </Flex>
188 - </Checkbox>  
189 - <Space>  
190 - <div>销售代表:{record.salesCode}</div>  
191 -  
192 - {rolePath?.includes('addOrder') ? ( 482 + <Flex className="pl-6" align="center">
  483 + <div>
  484 + 备注:
  485 + <span className="ml-2">{record.notes}</span>
  486 + </div>
193 <Button 487 <Button
194 - size="small" 488 + className="p-0"
  489 + type="link"
195 onClick={() => { 490 onClick={() => {
196 - setOrderOptType('copy');  
197 - setOrderDrawerVisible(true);  
198 - let copy = cloneDeep(record);  
199 - copy.id = undefined;  
200 - copy.subOrderInformationLists?.forEach((item) => {  
201 - item.id = undefined;  
202 - });  
203 - setOrderRow(copy); 491 + setNotesEditVisible(true);
  492 + setOrderRow(record);
  493 + setIsMainOrder(true);
204 }} 494 }}
205 > 495 >
206 - 复制 496 + 备注
207 </Button> 497 </Button>
208 - ) : (  
209 - ''  
210 - )}  
211 - </Space>  
212 - </Flex>  
213 - {/* 收货、开票、备注信息 */}  
214 - <Flex justify="space-between" className="px-2 py-4">  
215 - <Space split={<Divider type="vertical" align="center" />}>  
216 - <Space.Compact direction="vertical" className="gap-2">  
217 - <div>  
218 - 收货信息:  
219 - <Space  
220 - split={<span className="text-blue-300">|</span>}  
221 - className="ml-2"  
222 - >  
223 - <span>收货人:{record.customerName}</span>  
224 - <span>  
225 - 联系方式:  
226 - {record.customerContactNumber}  
227 - </span>  
228 - <span>  
229 - 单位联系人:  
230 - {record.institutionContactName}  
231 - </span>  
232 - <span>单位名称:{record.institution}</span>  
233 - {/* className='whitespace-pre-wrap max-w-sm' */}  
234 - <span> 收货地址:{record.customerShippingAddress}</span>  
235 - </Space>  
236 - </div>  
237 - <div>  
238 - 开票信息:  
239 - <Space  
240 - split={<span className="text-blue-300">|</span>}  
241 - className="ml-2"  
242 - >  
243 - <span>开户银行:{record.bank}</span>  
244 - <span>  
245 - 银行账号:  
246 - {record.bankAccountNumber}  
247 - </span>  
248 - <span>  
249 - 识别号:  
250 - {record.invoiceIdentificationNumber}  
251 - </span>  
252 - </Space>  
253 - </div>  
254 - <div>  
255 - 备&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;注:  
256 - <span className="ml-2">{record.notes}</span>  
257 - </div>  
258 - </Space.Compact>  
259 - </Space>  
260 - {/* 总金额、操作按钮信息 */}  
261 - <Space>  
262 - <Space.Compact direction="vertical" align="end">  
263 - <div>  
264 - 总金额:<span className="text-lg">{record.totalPayment}¥</span>  
265 - </div>  
266 - <Space>  
267 - {record.mainPath.includes('sendProduct') ? (  
268 - <Button  
269 - className="p-0"  
270 - type="link"  
271 - onClick={() => {  
272 - if (!selectedRowObj[record.id]?.length) {  
273 - return message.error('请选择选择子订单');  
274 - }  
275 - setSelectedRows(selectedRowObj[record.id]);  
276 - setDeliverVisible(true);  
277 - setIsSendProduct(true);  
278 - }}  
279 - >  
280 - 发货  
281 - </Button>  
282 - ) : (  
283 - ''  
284 - )}  
285 - {record.mainPath.includes('printOrder') ? (  
286 - <Button  
287 - className="p-0"  
288 - type="link"  
289 - onClick={() => {  
290 - if (!selectedRowObj[record.id]?.length) {  
291 - return message.error('请选择选择子订单');  
292 - }  
293 - setSelectedRows(selectedRowObj[record.id]);  
294 - setOrderRow(record);  
295 - setOrderPrintVisible(true);  
296 - }}  
297 - >  
298 - 打印  
299 - </Button>  
300 - ) : (  
301 - ''  
302 - )}  
303 - {record.mainPath.includes('rePrintOrder') ? (  
304 - <Button  
305 - className="p-0"  
306 - type="link"  
307 - onClick={() => {  
308 - if (!selectedRowObj[record.id]?.length) {  
309 - return message.error('请选择选择子订单');  
310 - }  
311 - setSelectedRows(selectedRowObj[record.id]);  
312 - setOrderRow(record);  
313 - setOrderPrintVisible(true);  
314 - setIsRePrintOrder(true);  
315 - }}  
316 - >  
317 - 重新打印  
318 - </Button>  
319 - ) : (  
320 - ''  
321 - )}  
322 - {record.mainPath.includes('modifySendInformation') ? (  
323 - <Button  
324 - className="p-0"  
325 - type="link"  
326 - onClick={() => {  
327 - if (!selectedRowObj[record.id]?.length) {  
328 - return message.error(  
329 - '请选择已经发货或者已经确认收货的子订单',  
330 - );  
331 - }  
332 - for (let row of selectedRowObj[record.id]) {  
333 - if (  
334 - row.orderStatus !== 'CONFIRM_RECEIPT' &&  
335 - row.orderStatus !== 'SHIPPED'  
336 - ) {  
337 - return message.error(  
338 - '请选择已经发货或者已经确认收货的子订单',  
339 - );  
340 - }  
341 - }  
342 - setSelectedRows(selectedRowObj[record.id]);  
343 - setDeliverVisible(true);  
344 - setIsSendProduct(false);  
345 - }}  
346 - >  
347 - 修改发货信息  
348 - </Button>  
349 - ) : (  
350 - ''  
351 - )}  
352 - {record.mainPath.includes('invoicing') ? (  
353 - <Button  
354 - type="link"  
355 - className="p-0"  
356 - onClick={() => {  
357 - let selectedSubOrders = selectedRowObj[record.id];  
358 - setSelectedRows(selectedSubOrders);  
359 - if (selectedSubOrders === undefined) {  
360 - setSelectedRows(record.subOrderInformationLists);  
361 - }  
362 - setOrderRow(record);  
363 - setFinancialVisible(true);  
364 - }}  
365 - >  
366 - 开票  
367 - </Button>  
368 - ) : (  
369 - ''  
370 - )}  
371 - {record.mainPath.includes('updateOrder') ? (  
372 - <Button  
373 - className="p-0"  
374 - type="link" 498 + </Flex>
  499 + </Flex>
  500 + <Flex wrap="wrap" gap="middle" vertical>
  501 + <Flex justify="flex-end">
  502 + <Flex wrap="wrap" gap="middle" align="center">
  503 + <div>
  504 + 总金额:
  505 + <span className="text-lg">{record.totalPayment}¥</span>
  506 + </div>
  507 + {rolePath?.includes('addOrder') ? (
  508 + <CopyOutlined
  509 + className="hover:cursor-pointer"
375 onClick={() => { 510 onClick={() => {
376 - //勾选的子订单:如果有勾选,后面只校验有勾选的  
377 - let selectedSubOrders = selectedRowObj[record.id];  
378 - if (  
379 - selectedSubOrders === undefined ||  
380 - selectedSubOrders.length === 0  
381 - ) {  
382 - selectedSubOrders = record.subOrderInformationLists;  
383 - }  
384 - for (  
385 - let index = 0;  
386 - index < selectedSubOrders.length;  
387 - index++  
388 - ) {  
389 - let orderStatus = selectedSubOrders[index].orderStatus;  
390 - //是审核通过及之后的订单  
391 - if (  
392 - orderStatus !== 'UNAUDITED' &&  
393 - orderStatus !== 'AUDIT_FAILED'  
394 - ) {  
395 - message.error(  
396 - '请选择未审核或者审核失败的订单进行编辑',  
397 - );  
398 - return;  
399 - }  
400 - } 511 + setOrderOptType('copy');
401 setOrderDrawerVisible(true); 512 setOrderDrawerVisible(true);
402 - setOrderRow(record);  
403 - setSelectedRows(selectedSubOrders);  
404 - setOrderOptType('edit');  
405 - }}  
406 - >  
407 - 编辑  
408 - </Button>  
409 - ) : (  
410 - ''  
411 - )}  
412 -  
413 - {record.mainPath.includes('checkOrder') ? (  
414 - <Button  
415 - className="p-0"  
416 - type="link"  
417 - onClick={() => {  
418 - let selectedSubOrders = selectedRowObj[record.id];  
419 - setSelectedRows(selectedSubOrders);  
420 - if (selectedSubOrders === undefined) {  
421 - setSelectedRows(record.subOrderInformationLists);  
422 - console.log(  
423 - 'subOrderInformationLists:' +  
424 - record.subOrderInformationLists,  
425 - );  
426 - }  
427 - for (let i = 0; i < selectedRows.length; i++) {  
428 - if (  
429 - selectedRows[i].orderStatus !== 'UNAUDITED' &&  
430 - selectedRows[i].orderStatus !== 'AUDIT_FAILED'  
431 - ) {  
432 - message.error(  
433 - '请选择未审核或者审核失败的子订单进行审核',  
434 - );  
435 - return;  
436 - }  
437 - }  
438 - setOrderRow(record);  
439 - setCheckVisible(true);  
440 - }}  
441 - >  
442 - 审核  
443 - </Button>  
444 - ) : (  
445 - ''  
446 - )}  
447 -  
448 - {record.mainPath.includes('OrderCancel') ? (  
449 - <ButtonConfirm  
450 - className="p-0"  
451 - title="确认作废?"  
452 - text="作废"  
453 - onConfirm={async () => {  
454 - let body = { id: record.id };  
455 - const data = await postServiceOrderOrderCancel({  
456 - data: body, 513 + let copy = cloneDeep(record);
  514 + copy.id = undefined;
  515 + copy.subOrderInformationLists?.forEach((item) => {
  516 + item.id = undefined;
457 }); 517 });
458 - if (data.result === RESPONSE_CODE.SUCCESS) {  
459 - message.success(data.message);  
460 - refreshTable();  
461 - } 518 + setOrderRow(copy);
462 }} 519 }}
463 /> 520 />
464 ) : ( 521 ) : (
465 '' 522 ''
466 )} 523 )}
467 524
468 - <Button  
469 - className="p-0"  
470 - type="link" 525 + <ClockCircleOutlined
  526 + className="hover:cursor-pointer"
471 onClick={() => { 527 onClick={() => {
472 - setNotesEditVisible(true);  
473 - setOrderRow(record);  
474 - setIsMainOrder(true); 528 + setHistoryModalVisible(true);
  529 + if (selectedRowObj[record.id]?.length) {
  530 + setSelectedRows(selectedRowObj[record.id]);
  531 + } else {
  532 + setSelectedRows(record.subOrderInformationLists);
  533 + }
475 }} 534 }}
476 - >  
477 - 备注  
478 - </Button>  
479 - </Space>  
480 - </Space.Compact>  
481 - <Space.Compact direction="vertical">  
482 - <Button  
483 - type="primary"  
484 - // todo change main_order_id  
485 - onClick={() => handleExpand(record.id)}  
486 - size="small"  
487 - >  
488 - {expandedRowKeys.includes(record.id) ? '收起详情' : '订单详情'}  
489 - </Button>  
490 - </Space.Compact>  
491 - </Space>  
492 - </Flex>  
493 - </Flex>  
494 - );  
495 - };  
496 -  
497 - // 主订单列表  
498 - const mainOrdersColumns: ProColumns<OrderType>[] = MAIN_ORDER_COLUMNS.map(  
499 - (item) => {  
500 - if (item.dataIndex === 'name') {  
501 - return {  
502 - ...item,  
503 - render: (text, record) => {  
504 - return <MainOrderColumnRender record={record} />;  
505 - },  
506 - };  
507 - }  
508 - return item;  
509 - },  
510 - );  
511 -  
512 - const expandedRowRender = (record) => {  
513 - let subOrders = record.subOrderInformationLists;  
514 -  
515 - return (  
516 - <ProTable  
517 - columns={(SUB_ORDER_COLUMNS as any)  
518 - .map((item) => {  
519 - if (item.component === 'tag') {  
520 - return {  
521 - ...item,  
522 - render: (text: string, optRecord) => {  
523 - let newText = text;  
524 - let label = enumValueToLabel(text, ORDER_STATUS_OPTIONS);  
525 - if (label === undefined) {  
526 - label = enumValueToLabel(text, INVOCING_STATUS_OPTIONS);  
527 - }  
528 - if (  
529 - label === '需要开票' &&  
530 - optRecord.invoicingTime !== undefined  
531 - ) {  
532 - label = '已开票';  
533 - newText = 'AFTER_INVOICED';  
534 - }  
535 - //审核失败点击标签可以弹出驳回备注信息  
536 - if (text === 'AUDIT_FAILED') {  
537 - return (  
538 - <Tooltip placement="top" title="点击查看备注">  
539 - <Tag  
540 - color={TAGS_COLOR.get(newText)}  
541 - className="mr-1 cursor-pointer"  
542 - onClick={() => {  
543 - openCheckNotes(optRecord.checkNotes);  
544 - }}  
545 - >  
546 - {label}  
547 - </Tag>  
548 - <QuestionCircleOutlined />  
549 - </Tooltip>  
550 - );  
551 - }  
552 - return <Tag color={TAGS_COLOR.get(newText)}>{label}</Tag>;  
553 - },  
554 - };  
555 - } else if (  
556 - //枚举字段处理  
557 - item.key === 'paymentMethod' ||  
558 - item.key === 'paymentChannel' ||  
559 - item.key === 'logisticsMethod' ||  
560 - item.key === 'productBelongBusiness'  
561 - ) {  
562 - return {  
563 - ...item,  
564 - render: (text: string) => {  
565 - let label = enumValueToLabel(text, PAYMENT_CHANNEL_OPTIONS);  
566 - if (label === undefined) {  
567 - label = enumValueToLabel(text, PAYMENT_METHOD_OPTIONS);  
568 - }  
569 - if (label === undefined) {  
570 - label = enumValueToLabel(text, LOGISTICS_STATUS_OPTIONS);  
571 - }  
572 - if (label === undefined) {  
573 - label = enumValueToLabel(  
574 - text,  
575 - PRODUCT_BELONG_DEPARTMENT_OPTIONS,  
576 - );  
577 - }  
578 - return label;  
579 - },  
580 - };  
581 - } else {  
582 - return {  
583 - ...item,  
584 - render: (text: string) => {  
585 - return <span>{text}</span>;  
586 - },  
587 - };  
588 - }  
589 - // return item;  
590 - })  
591 - .concat([  
592 - {  
593 - title: '操作',  
594 - dataIndex: 'operation',  
595 - key: 'operation',  
596 - align: 'center',  
597 - fixed: 'right',  
598 - render: (optText, optRecord) => (  
599 - <Flex gap="small">  
600 - {optRecord.subPath.includes('sendProduct') ? ( 535 + />
  536 + </Flex>
  537 + </Flex>
  538 + <Flex justify="flex-end">
  539 + <Space.Compact direction="vertical" align="end">
  540 + <Space>
  541 + {record.mainPath.includes('sendProduct') ? (
601 <Button 542 <Button
602 className="p-0" 543 className="p-0"
603 type="link" 544 type="link"
604 onClick={() => { 545 onClick={() => {
605 - optRecord.mainOrderId = record.id;  
606 - setSelectedRows([cloneDeep(optRecord)]); //克隆一份数据,避免后续修改污染 546 + if (!selectedRowObj[record.id]?.length) {
  547 + return message.error('请选择选择子订单');
  548 + }
  549 + setSelectedRows(selectedRowObj[record.id]);
607 setDeliverVisible(true); 550 setDeliverVisible(true);
608 setIsSendProduct(true); 551 setIsSendProduct(true);
609 }} 552 }}
@@ -613,80 +556,85 @@ const OrderPage = () =&gt; { @@ -613,80 +556,85 @@ const OrderPage = () =&gt; {
613 ) : ( 556 ) : (
614 '' 557 ''
615 )} 558 )}
616 -  
617 - {optRecord.subPath.includes('queryAnnex') ? ( 559 + {record.mainPath.includes('printOrder') ? (
618 <Button 560 <Button
619 className="p-0" 561 className="p-0"
620 type="link" 562 type="link"
621 onClick={() => { 563 onClick={() => {
622 - optRecord.mainOrderId = record.id;  
623 - setAttachmentModalVisible(true);  
624 - setOrderRow(optRecord); 564 + if (!selectedRowObj[record.id]?.length) {
  565 + return message.error('请选择选择子订单');
  566 + }
  567 + setSelectedRows(selectedRowObj[record.id]);
  568 + setOrderRow(record);
  569 + setOrderPrintVisible(true);
625 }} 570 }}
626 > 571 >
627 - 附件 572 + 打印
628 </Button> 573 </Button>
629 ) : ( 574 ) : (
630 '' 575 ''
631 )} 576 )}
632 -  
633 - {optRecord.subPath.includes('modifySendInformation') ? ( 577 + {record.mainPath.includes('rePrintOrder') ? (
634 <Button 578 <Button
635 className="p-0" 579 className="p-0"
636 type="link" 580 type="link"
637 onClick={() => { 581 onClick={() => {
638 - optRecord.mainOrderId = record.id;  
639 - setSelectedRows([cloneDeep(optRecord)]); //克隆一份数据,避免后续修改污染  
640 - setDeliverVisible(true);  
641 - setIsSendProduct(false);  
642 - }}  
643 - >  
644 - 修改发货信息  
645 - </Button>  
646 - ) : (  
647 - ''  
648 - )}  
649 -  
650 - {optRecord.subPath.includes('printOrder') ? (  
651 - <Button  
652 - className="p-0"  
653 - type="link"  
654 - onClick={async () => {  
655 - setOrderPrintVisible(true);  
656 - setSelectedRows([optRecord]); 582 + if (!selectedRowObj[record.id]?.length) {
  583 + return message.error('请选择选择子订单');
  584 + }
  585 + setSelectedRows(selectedRowObj[record.id]);
657 setOrderRow(record); 586 setOrderRow(record);
  587 + setOrderPrintVisible(true);
  588 + setIsRePrintOrder(true);
658 }} 589 }}
659 > 590 >
660 - 打印 591 + 重新打印
661 </Button> 592 </Button>
662 ) : ( 593 ) : (
663 '' 594 ''
664 )} 595 )}
665 - {optRecord.subPath.includes('editOrder') ? ( 596 + {record.mainPath.includes('modifySendInformation') ? (
666 <Button 597 <Button
667 className="p-0" 598 className="p-0"
668 type="link" 599 type="link"
669 onClick={() => { 600 onClick={() => {
670 - setFinancialVisible(true);  
671 - setOrderRow(record);  
672 - setSelectedRows([optRecord]);  
673 - setIsFinalcialEdit(true); 601 + if (!selectedRowObj[record.id]?.length) {
  602 + return message.error(
  603 + '请选择已经发货或者已经确认收货的子订单',
  604 + );
  605 + }
  606 + for (let row of selectedRowObj[record.id]) {
  607 + if (
  608 + row.orderStatus !== 'CONFIRM_RECEIPT' &&
  609 + row.orderStatus !== 'SHIPPED'
  610 + ) {
  611 + return message.error(
  612 + '请选择已经发货或者已经确认收货的子订单',
  613 + );
  614 + }
  615 + }
  616 + setSelectedRows(selectedRowObj[record.id]);
  617 + setDeliverVisible(true);
  618 + setIsSendProduct(false);
674 }} 619 }}
675 > 620 >
676 - 编辑 621 + 修改发货信息
677 </Button> 622 </Button>
678 ) : ( 623 ) : (
679 '' 624 ''
680 )} 625 )}
681 - {optRecord.subPath.includes('invoicing') ? ( 626 + {record.mainPath.includes('invoicing') ? (
682 <Button 627 <Button
683 - className="p-0"  
684 type="link" 628 type="link"
  629 + className="p-0"
685 onClick={() => { 630 onClick={() => {
686 - setFinancialVisible(true);  
687 - setIsFinalcialEdit(false); 631 + let selectedSubOrders = selectedRowObj[record.id];
  632 + setSelectedRows(selectedSubOrders);
  633 + if (selectedSubOrders === undefined) {
  634 + setSelectedRows(record.subOrderInformationLists);
  635 + }
688 setOrderRow(record); 636 setOrderRow(record);
689 - setSelectedRows([optRecord]); 637 + setFinancialVisible(true);
690 }} 638 }}
691 > 639 >
692 开票 640 开票
@@ -694,116 +642,132 @@ const OrderPage = () =&gt; { @@ -694,116 +642,132 @@ const OrderPage = () =&gt; {
694 ) : ( 642 ) : (
695 '' 643 ''
696 )} 644 )}
697 - {optRecord.subPath.includes('checkOrder') ? ( 645 + {record.mainPath.includes('updateOrder') ? (
698 <Button 646 <Button
699 className="p-0" 647 className="p-0"
700 type="link" 648 type="link"
701 onClick={() => { 649 onClick={() => {
702 - setOrderRow(optRecord);  
703 - setCheckVisible(true);  
704 - setSelectedRows([optRecord]); 650 + //勾选的子订单:如果有勾选,后面只校验有勾选的
  651 + let selectedSubOrders = selectedRowObj[record.id];
  652 + if (
  653 + selectedSubOrders === undefined ||
  654 + selectedSubOrders.length === 0
  655 + ) {
  656 + selectedSubOrders = record.subOrderInformationLists;
  657 + }
  658 + for (
  659 + let index = 0;
  660 + index < selectedSubOrders.length;
  661 + index++
  662 + ) {
  663 + let orderStatus =
  664 + selectedSubOrders[index].orderStatus;
  665 + //是审核通过及之后的订单
  666 + if (
  667 + orderStatus !== 'UNAUDITED' &&
  668 + orderStatus !== 'AUDIT_FAILED'
  669 + ) {
  670 + message.error(
  671 + '请选择未审核或者审核失败的订单进行编辑',
  672 + );
  673 + return;
  674 + }
  675 + }
  676 + setOrderDrawerVisible(true);
  677 + setOrderRow(record);
  678 + setSelectedRows(selectedSubOrders);
  679 + setOrderOptType('edit');
705 }} 680 }}
706 > 681 >
707 - 审核 682 + 编辑
708 </Button> 683 </Button>
709 ) : ( 684 ) : (
710 '' 685 ''
711 )} 686 )}
712 687
713 - {optRecord.subPath.includes('rePrintOrder') ? ( 688 + {record.mainPath.includes('checkOrder') ? (
714 <Button 689 <Button
715 className="p-0" 690 className="p-0"
716 type="link" 691 type="link"
717 onClick={() => { 692 onClick={() => {
718 - setOrderPrintVisible(true);  
719 - setSelectedRows([optRecord]); 693 + let selectedSubOrders = selectedRowObj[record.id];
  694 + setSelectedRows(selectedSubOrders);
  695 + if (selectedSubOrders === undefined) {
  696 + setSelectedRows(record.subOrderInformationLists);
  697 + console.log(
  698 + 'subOrderInformationLists:' +
  699 + record.subOrderInformationLists,
  700 + );
  701 + }
  702 + for (let i = 0; i < selectedRows.length; i++) {
  703 + if (
  704 + selectedRows[i].orderStatus !== 'UNAUDITED' &&
  705 + selectedRows[i].orderStatus !== 'AUDIT_FAILED'
  706 + ) {
  707 + message.error(
  708 + '请选择未审核或者审核失败的子订单进行审核',
  709 + );
  710 + return;
  711 + }
  712 + }
720 setOrderRow(record); 713 setOrderRow(record);
721 - setIsRePrintOrder(true); 714 + setCheckVisible(true);
722 }} 715 }}
723 > 716 >
724 - 重新打印 717 + 审核
725 </Button> 718 </Button>
726 ) : ( 719 ) : (
727 '' 720 ''
728 )} 721 )}
729 722
730 - {optRecord.subPath.includes('confirmReceipt') ? (  
731 - <Button  
732 - className="p-0"  
733 - type="link"  
734 - onClick={() => {  
735 - setConfirmReceiptVisible(true);  
736 - setOrderRow(optRecord);  
737 - }}  
738 - >  
739 - 确认收货  
740 - </Button>  
741 - ) : (  
742 - ''  
743 - )}  
744 - {optRecord.subPath.includes('viewImages') ? (  
745 - <Button 723 + {record.mainPath.includes('OrderCancel') ? (
  724 + <ButtonConfirm
746 className="p-0" 725 className="p-0"
747 - type="link"  
748 - onClick={() => {  
749 - setSubOrderConfirmReceiptImagesVisible(true);  
750 - setOrderRow(optRecord); 726 + title="确认作废?"
  727 + text="作废"
  728 + onConfirm={async () => {
  729 + let body = { id: record.id };
  730 + const data = await postServiceOrderOrderCancel({
  731 + data: body,
  732 + });
  733 + if (data.result === RESPONSE_CODE.SUCCESS) {
  734 + message.success(data.message);
  735 + refreshTable();
  736 + }
751 }} 737 }}
752 - >  
753 - 查看收货凭证  
754 - </Button> 738 + />
755 ) : ( 739 ) : (
756 '' 740 ''
757 )} 741 )}
758 - </Flex>  
759 - ),  
760 - },  
761 - {  
762 - title: '备注',  
763 - dataIndex: 'notes',  
764 - key: 'notes',  
765 - align: 'center',  
766 - render: (optTxt, optRecord) => (  
767 - <Button  
768 - type="dashed"  
769 - size="small"  
770 - onClick={() => {  
771 - setNotesEditVisible(true);  
772 - setOrderRow(optRecord);  
773 - setIsMainOrder(false);  
774 - }}  
775 - >  
776 - 详情  
777 - </Button>  
778 - ),  
779 - },  
780 - ])}  
781 - rowSelection={{  
782 - onChange: (selectedRowKeys: any, selectedRows: any) => {  
783 - setSelectedRowKeys(selectedRowKeys);  
784 - setSelectedRowObj({  
785 - ...setSelectedRowObj,  
786 - [record.id]: selectedRows,  
787 - });  
788 - selectedRowObj[record.id] = selectedRows;  
789 - setSelectedRows(selectedRows);  
790 - },  
791 - selectedRowKeys: selectedRowKeys,  
792 - // 自定义选择项参考: https://ant.design/components/table-cn/#components-table-demo-row-selection-custom  
793 - // 注释该行则默认不显示下拉选项  
794 - // selections: [Table.SELECTION_ALL, Table.SELECTION_INVERT],  
795 - // defaultSelectedRowKeys: [],  
796 - }}  
797 - rowKey="id"  
798 - headerTitle={false}  
799 - search={false}  
800 - options={false}  
801 - dataSource={subOrders}  
802 - pagination={false}  
803 - /> 742 + </Space>
  743 + </Space.Compact>
  744 + </Flex>
  745 + </Flex>
  746 + </Flex>
  747 +
  748 + <Flex className="p-0 py-[24px] pl-[23px] pr-[5px] bg-white rounded-b-lg">
  749 + {expandedRowRender(record)}
  750 + </Flex>
  751 + </Flex>
804 ); 752 );
805 }; 753 };
806 754
  755 + // 主订单列表
  756 + const mainOrdersColumns: ProColumns<OrderType>[] = MAIN_ORDER_COLUMNS.map(
  757 + (item) => {
  758 + if (item.dataIndex === 'name') {
  759 + return {
  760 + ...item,
  761 + title: <OrderTableHeader />,
  762 + render: (text, record) => {
  763 + return <MainOrderColumnRender record={record} />;
  764 + },
  765 + };
  766 + }
  767 + return item;
  768 + },
  769 + );
  770 +
807 function toolBarRender() { 771 function toolBarRender() {
808 let toolBtns = []; 772 let toolBtns = [];
809 773
@@ -817,7 +781,7 @@ const OrderPage = () =&gt; { @@ -817,7 +781,7 @@ const OrderPage = () =&gt; {
817 message.error('请选择订单'); 781 message.error('请选择订单');
818 return; 782 return;
819 } 783 }
820 - let body = { flag: true, ids: selectedItems }; 784 + let body = { flag: 30, ids: selectedItems };
821 exportLoading(); 785 exportLoading();
822 orderExport('/api/service/order/export', body, exportLoadingDestory); 786 orderExport('/api/service/order/export', body, exportLoadingDestory);
823 }, 787 },
@@ -830,7 +794,7 @@ const OrderPage = () =&gt; { @@ -830,7 +794,7 @@ const OrderPage = () =&gt; {
830 message.error('当前没有订单'); 794 message.error('当前没有订单');
831 return; 795 return;
832 } 796 }
833 - let body = { flag: true, ids: mainOrderAllItemKeys }; 797 + let body = { flag: 20, ids: mainOrderAllItemKeys };
834 exportLoading(); 798 exportLoading();
835 orderExport('/api/service/order/export', body, exportLoadingDestory); 799 orderExport('/api/service/order/export', body, exportLoadingDestory);
836 }, 800 },
@@ -839,7 +803,16 @@ const OrderPage = () =&gt; { @@ -839,7 +803,16 @@ const OrderPage = () =&gt; {
839 label: '导出所有订单', 803 label: '导出所有订单',
840 key: '3', 804 key: '3',
841 onClick: async () => { 805 onClick: async () => {
842 - let body = { flag: false, ids: [] }; 806 + let body = { flag: 10, ids: [] };
  807 + exportLoading();
  808 + orderExport('/api/service/order/export', body, exportLoadingDestory);
  809 + },
  810 + },
  811 + {
  812 + label: '导出当天订单',
  813 + key: '4',
  814 + onClick: async () => {
  815 + let body = { flag: 40, ids: [] };
843 exportLoading(); 816 exportLoading();
844 orderExport('/api/service/order/export', body, exportLoadingDestory); 817 orderExport('/api/service/order/export', body, exportLoadingDestory);
845 }, 818 },
@@ -890,18 +863,18 @@ const OrderPage = () =&gt; { @@ -890,18 +863,18 @@ const OrderPage = () =&gt; {
890 </Dropdown>, 863 </Dropdown>,
891 ); 864 );
892 865
893 - toolBtns.push(  
894 - <Button  
895 - key="show"  
896 - onClick={() => {  
897 - handleAllExpand();  
898 - }}  
899 - >  
900 - {mainOrderAllItemKeys?.length !== expandedRowKeys.length  
901 - ? '一键展开'  
902 - : '一键收起'}  
903 - </Button>,  
904 - ); 866 + // toolBtns.push(
  867 + // <Button
  868 + // key="show"
  869 + // onClick={() => {
  870 + // handleAllExpand();
  871 + // }}
  872 + // >
  873 + // {mainOrderAllItemKeys?.length !== expandedRowKeys.length
  874 + // ? '一键展开'
  875 + // : '一键收起'}
  876 + // </Button>,
  877 + // );
905 878
906 return toolBtns; 879 return toolBtns;
907 } 880 }
@@ -944,9 +917,9 @@ const OrderPage = () =&gt; { @@ -944,9 +917,9 @@ const OrderPage = () =&gt; {
944 > 917 >
945 <div id="resizeDiv"></div> 918 <div id="resizeDiv"></div>
946 <ProTable 919 <ProTable
947 - id="mainTable"  
948 - // tableStyle={{height:'100px'}}  
949 - scroll={{ x: true, y: tableHeight }} 920 + id="main-table"
  921 + // tableStyle={{backgroundColor:'red'}}
  922 +
950 actionRef={mainTableRef} 923 actionRef={mainTableRef}
951 expandIconColumnIndex={-1} 924 expandIconColumnIndex={-1}
952 columns={mainOrdersColumns} 925 columns={mainOrdersColumns}
@@ -961,14 +934,15 @@ const OrderPage = () =&gt; { @@ -961,14 +934,15 @@ const OrderPage = () =&gt; {
961 setCurrentPage(page); 934 setCurrentPage(page);
962 }, 935 },
963 }} 936 }}
  937 + // showHeader={false}
964 expandedRowKeys={expandedRowKeys} 938 expandedRowKeys={expandedRowKeys}
965 - expandable={{ expandedRowRender }} 939 + // expandable={{ expandedRowRender }}
966 dateFormatter="string" 940 dateFormatter="string"
967 options={false} 941 options={false}
968 headerTitle="订单列表" 942 headerTitle="订单列表"
969 search={{ 943 search={{
970 labelWidth: 'auto', 944 labelWidth: 'auto',
971 - onCollapse: resize, 945 + // onCollapse: resize,
972 }} 946 }}
973 request={async ( 947 request={async (
974 // 第一个参数 params 查询表单和 params 参数的结合 948 // 第一个参数 params 查询表单和 params 参数的结合
@@ -993,6 +967,7 @@ const OrderPage = () =&gt; { @@ -993,6 +967,7 @@ const OrderPage = () =&gt; {
993 setMainOrderAllItemKeys(mainOrderIds); 967 setMainOrderAllItemKeys(mainOrderIds);
994 } 968 }
995 setRolePath(data.specialPath); 969 setRolePath(data.specialPath);
  970 + handleTableExpand(mainOrderIds);
996 return { 971 return {
997 data: data?.data || [], 972 data: data?.data || [],
998 total: data?.total || 0, 973 total: data?.total || 0,
@@ -1125,6 +1100,16 @@ const OrderPage = () =&gt; { @@ -1125,6 +1100,16 @@ const OrderPage = () =&gt; {
1125 /> 1100 />
1126 )} 1101 )}
1127 1102
  1103 + {historyModalVisible && (
  1104 + <HistoryModal
  1105 + subOrders={selectedRows}
  1106 + onClose={() => {
  1107 + setHistoryModalVisible(false);
  1108 + setSelectedRows({});
  1109 + }}
  1110 + />
  1111 + )}
  1112 +
1128 {contextHolder} 1113 {contextHolder}
1129 </PageContainer> 1114 </PageContainer>
1130 ); 1115 );
src/pages/OrderPrint/components/HoujiePrinter.tsx
@@ -82,10 +82,10 @@ export default ({ mainOrder, subOrders }) =&gt; { @@ -82,10 +82,10 @@ export default ({ mainOrder, subOrders }) =&gt; {
82 style={{ msoWidthSource: 'userset', msoWidthAlt: 2048 }} 82 style={{ msoWidthSource: 'userset', msoWidthAlt: 2048 }}
83 /> 83 />
84 <col 84 <col
85 - width="114" 85 + width="60"
86 style={{ msoWidthSource: 'userset', msoWidthAlt: 2432 }} 86 style={{ msoWidthSource: 'userset', msoWidthAlt: 2432 }}
87 /> 87 />
88 - <col width="108" style={{ width: '54.00pt' }} /> 88 + <col width="108" style={{ width: '95.00pt' }} />
89 <tr height="42" style={{ height: '21.00pt' }}> 89 <tr height="42" style={{ height: '21.00pt' }}>
90 <td height="42" style={{ height: '21.00pt' }}></td> 90 <td height="42" style={{ height: '21.00pt' }}></td>
91 <td 91 <td
src/services/definition.ts
@@ -718,6 +718,10 @@ export interface QueryAnnexDto { @@ -718,6 +718,10 @@ export interface QueryAnnexDto {
718 subId?: number; 718 subId?: number;
719 } 719 }
720 720
  721 +export interface QueryHistoryRecordDto {
  722 + ids?: Array<number>;
  723 +}
  724 +
721 export interface QueryMainOrderDto { 725 export interface QueryMainOrderDto {
722 /** 726 /**
723 * @description 727 * @description
src/services/request.ts
@@ -26,6 +26,7 @@ import type { @@ -26,6 +26,7 @@ import type {
26 DictionaryQueryVO, 26 DictionaryQueryVO,
27 DictionaryVO, 27 DictionaryVO,
28 Dto, 28 Dto,
  29 + ModelAndView,
29 OrderAddVO, 30 OrderAddVO,
30 OrderAuditLogQueryVO, 31 OrderAuditLogQueryVO,
31 OrderBaseInfoQueryVO, 32 OrderBaseInfoQueryVO,
@@ -36,6 +37,7 @@ import type { @@ -36,6 +37,7 @@ import type {
36 OrderUpdateVO, 37 OrderUpdateVO,
37 ProductInformationDto, 38 ProductInformationDto,
38 QueryAnnexDto, 39 QueryAnnexDto,
  40 + QueryHistoryRecordDto,
39 QueryMainOrderDto, 41 QueryMainOrderDto,
40 ResetPwdVO, 42 ResetPwdVO,
41 ServerResult, 43 ServerResult,
@@ -219,9 +221,7 @@ export interface GetErrorResponse { @@ -219,9 +221,7 @@ export interface GetErrorResponse {
219 * @description 221 * @description
220 * OK 222 * OK
221 */ 223 */
222 - 200: {  
223 - [propertyName: string]: any;  
224 - }; 224 + 200: ModelAndView;
225 /** 225 /**
226 * @description 226 * @description
227 * Unauthorized 227 * Unauthorized
@@ -242,9 +242,9 @@ export interface GetErrorResponse { @@ -242,9 +242,9 @@ export interface GetErrorResponse {
242 export type GetErrorResponseSuccess = GetErrorResponse[200]; 242 export type GetErrorResponseSuccess = GetErrorResponse[200];
243 /** 243 /**
244 * @description 244 * @description
245 - * error 245 + * errorHtml
246 * @tags basic-error-controller 246 * @tags basic-error-controller
247 - * @produces * 247 + * @produces text/html
248 */ 248 */
249 export const getError = /* #__PURE__ */ (() => { 249 export const getError = /* #__PURE__ */ (() => {
250 const method = 'get'; 250 const method = 'get';
@@ -268,9 +268,7 @@ export interface PutErrorResponse { @@ -268,9 +268,7 @@ export interface PutErrorResponse {
268 * @description 268 * @description
269 * OK 269 * OK
270 */ 270 */
271 - 200: {  
272 - [propertyName: string]: any;  
273 - }; 271 + 200: ModelAndView;
274 /** 272 /**
275 * @description 273 * @description
276 * Created 274 * Created
@@ -296,9 +294,9 @@ export interface PutErrorResponse { @@ -296,9 +294,9 @@ export interface PutErrorResponse {
296 export type PutErrorResponseSuccess = PutErrorResponse[200]; 294 export type PutErrorResponseSuccess = PutErrorResponse[200];
297 /** 295 /**
298 * @description 296 * @description
299 - * error 297 + * errorHtml
300 * @tags basic-error-controller 298 * @tags basic-error-controller
301 - * @produces * 299 + * @produces text/html
302 * @consumes application/json 300 * @consumes application/json
303 */ 301 */
304 export const putError = /* #__PURE__ */ (() => { 302 export const putError = /* #__PURE__ */ (() => {
@@ -323,9 +321,7 @@ export interface PostErrorResponse { @@ -323,9 +321,7 @@ export interface PostErrorResponse {
323 * @description 321 * @description
324 * OK 322 * OK
325 */ 323 */
326 - 200: {  
327 - [propertyName: string]: any;  
328 - }; 324 + 200: ModelAndView;
329 /** 325 /**
330 * @description 326 * @description
331 * Created 327 * Created
@@ -351,9 +347,9 @@ export interface PostErrorResponse { @@ -351,9 +347,9 @@ export interface PostErrorResponse {
351 export type PostErrorResponseSuccess = PostErrorResponse[200]; 347 export type PostErrorResponseSuccess = PostErrorResponse[200];
352 /** 348 /**
353 * @description 349 * @description
354 - * error 350 + * errorHtml
355 * @tags basic-error-controller 351 * @tags basic-error-controller
356 - * @produces * 352 + * @produces text/html
357 * @consumes application/json 353 * @consumes application/json
358 */ 354 */
359 export const postError = /* #__PURE__ */ (() => { 355 export const postError = /* #__PURE__ */ (() => {
@@ -378,9 +374,7 @@ export interface DeleteErrorResponse { @@ -378,9 +374,7 @@ export interface DeleteErrorResponse {
378 * @description 374 * @description
379 * OK 375 * OK
380 */ 376 */
381 - 200: {  
382 - [propertyName: string]: any;  
383 - }; 377 + 200: ModelAndView;
384 /** 378 /**
385 * @description 379 * @description
386 * No Content 380 * No Content
@@ -401,9 +395,9 @@ export interface DeleteErrorResponse { @@ -401,9 +395,9 @@ export interface DeleteErrorResponse {
401 export type DeleteErrorResponseSuccess = DeleteErrorResponse[200]; 395 export type DeleteErrorResponseSuccess = DeleteErrorResponse[200];
402 /** 396 /**
403 * @description 397 * @description
404 - * error 398 + * errorHtml
405 * @tags basic-error-controller 399 * @tags basic-error-controller
406 - * @produces * 400 + * @produces text/html
407 */ 401 */
408 export const deleteError = /* #__PURE__ */ (() => { 402 export const deleteError = /* #__PURE__ */ (() => {
409 const method = 'delete'; 403 const method = 'delete';
@@ -427,9 +421,7 @@ export interface OptionsErrorResponse { @@ -427,9 +421,7 @@ export interface OptionsErrorResponse {
427 * @description 421 * @description
428 * OK 422 * OK
429 */ 423 */
430 - 200: {  
431 - [propertyName: string]: any;  
432 - }; 424 + 200: ModelAndView;
433 /** 425 /**
434 * @description 426 * @description
435 * No Content 427 * No Content
@@ -450,9 +442,9 @@ export interface OptionsErrorResponse { @@ -450,9 +442,9 @@ export interface OptionsErrorResponse {
450 export type OptionsErrorResponseSuccess = OptionsErrorResponse[200]; 442 export type OptionsErrorResponseSuccess = OptionsErrorResponse[200];
451 /** 443 /**
452 * @description 444 * @description
453 - * error 445 + * errorHtml
454 * @tags basic-error-controller 446 * @tags basic-error-controller
455 - * @produces * 447 + * @produces text/html
456 * @consumes application/json 448 * @consumes application/json
457 */ 449 */
458 export const optionsError = /* #__PURE__ */ (() => { 450 export const optionsError = /* #__PURE__ */ (() => {
@@ -477,9 +469,7 @@ export interface HeadErrorResponse { @@ -477,9 +469,7 @@ export interface HeadErrorResponse {
477 * @description 469 * @description
478 * OK 470 * OK
479 */ 471 */
480 - 200: {  
481 - [propertyName: string]: any;  
482 - }; 472 + 200: ModelAndView;
483 /** 473 /**
484 * @description 474 * @description
485 * No Content 475 * No Content
@@ -500,9 +490,9 @@ export interface HeadErrorResponse { @@ -500,9 +490,9 @@ export interface HeadErrorResponse {
500 export type HeadErrorResponseSuccess = HeadErrorResponse[200]; 490 export type HeadErrorResponseSuccess = HeadErrorResponse[200];
501 /** 491 /**
502 * @description 492 * @description
503 - * error 493 + * errorHtml
504 * @tags basic-error-controller 494 * @tags basic-error-controller
505 - * @produces * 495 + * @produces text/html
506 * @consumes application/json 496 * @consumes application/json
507 */ 497 */
508 export const headError = /* #__PURE__ */ (() => { 498 export const headError = /* #__PURE__ */ (() => {
@@ -527,9 +517,7 @@ export interface PatchErrorResponse { @@ -527,9 +517,7 @@ export interface PatchErrorResponse {
527 * @description 517 * @description
528 * OK 518 * OK
529 */ 519 */
530 - 200: {  
531 - [propertyName: string]: any;  
532 - }; 520 + 200: ModelAndView;
533 /** 521 /**
534 * @description 522 * @description
535 * No Content 523 * No Content
@@ -550,9 +538,9 @@ export interface PatchErrorResponse { @@ -550,9 +538,9 @@ export interface PatchErrorResponse {
550 export type PatchErrorResponseSuccess = PatchErrorResponse[200]; 538 export type PatchErrorResponseSuccess = PatchErrorResponse[200];
551 /** 539 /**
552 * @description 540 * @description
553 - * error 541 + * errorHtml
554 * @tags basic-error-controller 542 * @tags basic-error-controller
555 - * @produces * 543 + * @produces text/html
556 * @consumes application/json 544 * @consumes application/json
557 */ 545 */
558 export const patchError = /* #__PURE__ */ (() => { 546 export const patchError = /* #__PURE__ */ (() => {
@@ -4710,77 +4698,6 @@ export const postOrderErpUsersUpdatePass = /* #__PURE__ */ (() =&gt; { @@ -4710,77 +4698,6 @@ export const postOrderErpUsersUpdatePass = /* #__PURE__ */ (() =&gt; {
4710 return request; 4698 return request;
4711 })(); 4699 })();
4712 4700
4713 -/** @description request parameter type for postServiceOrderOrderCancel */  
4714 -export interface PostServiceOrderOrderCancelOption {  
4715 - /**  
4716 - * @description  
4717 - * dto  
4718 - */  
4719 - body: {  
4720 - /**  
4721 - @description  
4722 - dto */  
4723 - dto: Dto;  
4724 - };  
4725 -}  
4726 -  
4727 -/** @description response type for postServiceOrderOrderCancel */  
4728 -export interface PostServiceOrderOrderCancelResponse {  
4729 - /**  
4730 - * @description  
4731 - * OK  
4732 - */  
4733 - 200: ServerResult;  
4734 - /**  
4735 - * @description  
4736 - * Created  
4737 - */  
4738 - 201: any;  
4739 - /**  
4740 - * @description  
4741 - * Unauthorized  
4742 - */  
4743 - 401: any;  
4744 - /**  
4745 - * @description  
4746 - * Forbidden  
4747 - */  
4748 - 403: any;  
4749 - /**  
4750 - * @description  
4751 - * Not Found  
4752 - */  
4753 - 404: any;  
4754 -}  
4755 -  
4756 -export type PostServiceOrderOrderCancelResponseSuccess =  
4757 - PostServiceOrderOrderCancelResponse[200];  
4758 -/**  
4759 - * @description  
4760 - * 订单作废  
4761 - * @tags 内部订单  
4762 - * @produces *  
4763 - * @consumes application/json  
4764 - */  
4765 -export const postServiceOrderOrderCancel = /* #__PURE__ */ (() => {  
4766 - const method = 'post';  
4767 - const url = '/service/order/OrderCancel';  
4768 - function request(  
4769 - option: PostServiceOrderOrderCancelOption,  
4770 - ): Promise<PostServiceOrderOrderCancelResponseSuccess> {  
4771 - return requester(request.url, {  
4772 - method: request.method,  
4773 - ...option,  
4774 - }) as unknown as Promise<PostServiceOrderOrderCancelResponseSuccess>;  
4775 - }  
4776 -  
4777 - /** http method */  
4778 - request.method = method;  
4779 - /** request url */  
4780 - request.url = url;  
4781 - return request;  
4782 -})();  
4783 -  
4784 /** @description request parameter type for postServiceOrderAddOrder */ 4701 /** @description request parameter type for postServiceOrderAddOrder */
4785 export interface PostServiceOrderAddOrderOption { 4702 export interface PostServiceOrderAddOrderOption {
4786 /** 4703 /**
@@ -5561,6 +5478,77 @@ export const postServiceOrderInvoicing = /* #__PURE__ */ (() =&gt; { @@ -5561,6 +5478,77 @@ export const postServiceOrderInvoicing = /* #__PURE__ */ (() =&gt; {
5561 return request; 5478 return request;
5562 })(); 5479 })();
5563 5480
  5481 +/** @description request parameter type for postServiceOrderOrderCancel */
  5482 +export interface PostServiceOrderOrderCancelOption {
  5483 + /**
  5484 + * @description
  5485 + * dto
  5486 + */
  5487 + body: {
  5488 + /**
  5489 + @description
  5490 + dto */
  5491 + dto: Dto;
  5492 + };
  5493 +}
  5494 +
  5495 +/** @description response type for postServiceOrderOrderCancel */
  5496 +export interface PostServiceOrderOrderCancelResponse {
  5497 + /**
  5498 + * @description
  5499 + * OK
  5500 + */
  5501 + 200: ServerResult;
  5502 + /**
  5503 + * @description
  5504 + * Created
  5505 + */
  5506 + 201: any;
  5507 + /**
  5508 + * @description
  5509 + * Unauthorized
  5510 + */
  5511 + 401: any;
  5512 + /**
  5513 + * @description
  5514 + * Forbidden
  5515 + */
  5516 + 403: any;
  5517 + /**
  5518 + * @description
  5519 + * Not Found
  5520 + */
  5521 + 404: any;
  5522 +}
  5523 +
  5524 +export type PostServiceOrderOrderCancelResponseSuccess =
  5525 + PostServiceOrderOrderCancelResponse[200];
  5526 +/**
  5527 + * @description
  5528 + * 订单作废
  5529 + * @tags 内部订单
  5530 + * @produces *
  5531 + * @consumes application/json
  5532 + */
  5533 +export const postServiceOrderOrderCancel = /* #__PURE__ */ (() => {
  5534 + const method = 'post';
  5535 + const url = '/service/order/orderCancel';
  5536 + function request(
  5537 + option: PostServiceOrderOrderCancelOption,
  5538 + ): Promise<PostServiceOrderOrderCancelResponseSuccess> {
  5539 + return requester(request.url, {
  5540 + method: request.method,
  5541 + ...option,
  5542 + }) as unknown as Promise<PostServiceOrderOrderCancelResponseSuccess>;
  5543 + }
  5544 +
  5545 + /** http method */
  5546 + request.method = method;
  5547 + /** request url */
  5548 + request.url = url;
  5549 + return request;
  5550 +})();
  5551 +
5564 /** @description request parameter type for postServiceOrderPrintOrder */ 5552 /** @description request parameter type for postServiceOrderPrintOrder */
5565 export interface PostServiceOrderPrintOrderOption { 5553 export interface PostServiceOrderPrintOrderOption {
5566 /** 5554 /**
@@ -6089,6 +6077,77 @@ export const postServiceOrderQueryCustomerNameInformation = @@ -6089,6 +6077,77 @@ export const postServiceOrderQueryCustomerNameInformation =
6089 return request; 6077 return request;
6090 })(); 6078 })();
6091 6079
  6080 +/** @description request parameter type for postServiceOrderQueryHistoryOrderRecord */
  6081 +export interface PostServiceOrderQueryHistoryOrderRecordOption {
  6082 + /**
  6083 + * @description
  6084 + * dto
  6085 + */
  6086 + body: {
  6087 + /**
  6088 + @description
  6089 + dto */
  6090 + dto: QueryHistoryRecordDto;
  6091 + };
  6092 +}
  6093 +
  6094 +/** @description response type for postServiceOrderQueryHistoryOrderRecord */
  6095 +export interface PostServiceOrderQueryHistoryOrderRecordResponse {
  6096 + /**
  6097 + * @description
  6098 + * OK
  6099 + */
  6100 + 200: ServerResult;
  6101 + /**
  6102 + * @description
  6103 + * Created
  6104 + */
  6105 + 201: any;
  6106 + /**
  6107 + * @description
  6108 + * Unauthorized
  6109 + */
  6110 + 401: any;
  6111 + /**
  6112 + * @description
  6113 + * Forbidden
  6114 + */
  6115 + 403: any;
  6116 + /**
  6117 + * @description
  6118 + * Not Found
  6119 + */
  6120 + 404: any;
  6121 +}
  6122 +
  6123 +export type PostServiceOrderQueryHistoryOrderRecordResponseSuccess =
  6124 + PostServiceOrderQueryHistoryOrderRecordResponse[200];
  6125 +/**
  6126 + * @description
  6127 + * 查询历史订单记录
  6128 + * @tags 内部订单
  6129 + * @produces *
  6130 + * @consumes application/json
  6131 + */
  6132 +export const postServiceOrderQueryHistoryOrderRecord = /* #__PURE__ */ (() => {
  6133 + const method = 'post';
  6134 + const url = '/service/order/queryHistoryOrderRecord';
  6135 + function request(
  6136 + option: PostServiceOrderQueryHistoryOrderRecordOption,
  6137 + ): Promise<PostServiceOrderQueryHistoryOrderRecordResponseSuccess> {
  6138 + return requester(request.url, {
  6139 + method: request.method,
  6140 + ...option,
  6141 + }) as unknown as Promise<PostServiceOrderQueryHistoryOrderRecordResponseSuccess>;
  6142 + }
  6143 +
  6144 + /** http method */
  6145 + request.method = method;
  6146 + /** request url */
  6147 + request.url = url;
  6148 + return request;
  6149 +})();
  6150 +
6092 /** @description request parameter type for postServiceOrderQueryProductInformation */ 6151 /** @description request parameter type for postServiceOrderQueryProductInformation */
6093 export interface PostServiceOrderQueryProductInformationOption { 6152 export interface PostServiceOrderQueryProductInformationOption {
6094 /** 6153 /**
src/utils/index.ts
@@ -67,7 +67,7 @@ function formatSalesCode(salesCode: any) { @@ -67,7 +67,7 @@ function formatSalesCode(salesCode: any) {
67 } 67 }
68 68
69 // 将二进制流的字符串转换成 Blob 对象 69 // 将二进制流的字符串转换成 Blob 对象
70 -function dataURItoBlob(dataURI) { 70 +function dataURItoBlob(dataURI: any) {
71 const byteString = atob(dataURI.split(',')[1]); 71 const byteString = atob(dataURI.split(',')[1]);
72 const mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0]; 72 const mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
73 const ab = new ArrayBuffer(byteString.length); 73 const ab = new ArrayBuffer(byteString.length);
@@ -79,11 +79,11 @@ function dataURItoBlob(dataURI) { @@ -79,11 +79,11 @@ function dataURItoBlob(dataURI) {
79 } 79 }
80 80
81 // 将 Blob 对象转换成 File 对象 81 // 将 Blob 对象转换成 File 对象
82 -function blobToFile(blob, fileName) { 82 +function blobToFile(blob: any, fileName: any) {
83 return new File([blob], fileName, { type: blob.type }); 83 return new File([blob], fileName, { type: blob.type });
84 } 84 }
85 85
86 -function appendFormData(formData, data, parentKey = null) { 86 +function appendFormData(formData: any, data: any, parentKey = null) {
87 for (const key in data) { 87 for (const key in data) {
88 if (data.hasOwnProperty(key)) { 88 if (data.hasOwnProperty(key)) {
89 const value = data[key]; 89 const value = data[key];