Commit 1d3923f970d6a8b97335540511b4cce37a062766

Authored by zhongnanhuang
2 parents d22f2996 68cd720e

Merge branch 'znh231123' into 'develop'

跟新了打印页面和图片上传



See merge request !7
.umirc.ts
@@ -13,8 +13,8 @@ export default defineConfig({ @@ -13,8 +13,8 @@ export default defineConfig({
13 }, 13 },
14 proxy: { 14 proxy: {
15 '/api/': { 15 '/api/': {
16 - // target: 'http://localhost:8085/',  
17 - target: 'http://39.108.227.113:8085/', 16 + target: 'http://localhost:8085/',
  17 + // target: 'http://39.108.227.113:8085/',
18 changeOrigin: true, 18 changeOrigin: true,
19 pathRewrite: { '^/api': '' }, 19 pathRewrite: { '^/api': '' },
20 }, 20 },
src/pages/Order/components/ConfirmReceiptModal.tsx
  1 +import { RESPONSE_CODE } from '@/constants/enum';
1 import { postServiceOrderConfirmReceipt } from '@/services'; 2 import { postServiceOrderConfirmReceipt } from '@/services';
2 -import { UploadOutlined } from '@ant-design/icons';  
3 -import { ModalForm } from '@ant-design/pro-components';  
4 -import { Button, Form, Upload } from 'antd'; 3 +import { PlusOutlined } from '@ant-design/icons';
  4 +import { Button, Modal, Upload, message } from 'antd';
5 import { RcFile, UploadFile, UploadProps } from 'antd/es/upload'; 5 import { RcFile, UploadFile, UploadProps } from 'antd/es/upload';
6 import { useState } from 'react'; 6 import { useState } from 'react';
7 export default ({ data, onClose }) => { 7 export default ({ data, onClose }) => {
8 - const [form] = Form.useForm<{ name: string; company: string }>(); 8 + // const [form] = Form.useForm<{ name: string; company: string }>();
9 const [previewOpen, setPreviewOpen] = useState(false); 9 const [previewOpen, setPreviewOpen] = useState(false);
10 const [previewImage, setPreviewImage] = useState(''); 10 const [previewImage, setPreviewImage] = useState('');
11 const [previewTitle, setPreviewTitle] = useState(''); 11 const [previewTitle, setPreviewTitle] = useState('');
12 - console.log(previewOpen);  
13 - console.log(previewImage);  
14 - console.log(previewTitle);  
15 const getBase64 = (file: RcFile): Promise<string> => 12 const getBase64 = (file: RcFile): Promise<string> =>
16 new Promise((resolve, reject) => { 13 new Promise((resolve, reject) => {
17 const reader = new FileReader(); 14 const reader = new FileReader();
@@ -19,20 +16,18 @@ export default ({ data, onClose }) =&gt; { @@ -19,20 +16,18 @@ export default ({ data, onClose }) =&gt; {
19 reader.onload = () => resolve(reader.result as string); 16 reader.onload = () => resolve(reader.result as string);
20 reader.onerror = (error) => reject(error); 17 reader.onerror = (error) => reject(error);
21 }); 18 });
22 - // const beforeUpload = (file: RcFile) => {  
23 - // const isJpgOrPng = file.type === 'image/jpeg' || file.type === 'image/png';  
24 - // if (!isJpgOrPng) {  
25 - // message.error('You can only upload JPG/PNG file!');  
26 - // }  
27 - // const isLt2M = file.size / 1024 / 1024 < 2;  
28 - // if (!isLt2M) {  
29 - // message.error('Image must smaller than 2MB!');  
30 - // }  
31 - // return isJpgOrPng && isLt2M;  
32 - // };  
33 const [fileList, setFileList] = useState<UploadFile[]>([]); 19 const [fileList, setFileList] = useState<UploadFile[]>([]);
34 const [uploading, setUploading] = useState(false); 20 const [uploading, setUploading] = useState(false);
  21 + const handleCancel = () => setPreviewOpen(false);
  22 + const handleChange: UploadProps['onChange'] = ({ fileList: newFileList }) =>
  23 + setFileList(newFileList);
35 24
  25 + const uploadButton = (
  26 + <div>
  27 + <PlusOutlined />
  28 + <div style={{ marginTop: 8 }}>上传凭证</div>
  29 + </div>
  30 + );
36 const handlePreview = async (file: UploadFile) => { 31 const handlePreview = async (file: UploadFile) => {
37 if (!file.url && !file.preview) { 32 if (!file.url && !file.preview) {
38 file.preview = await getBase64(file.originFileObj as RcFile); 33 file.preview = await getBase64(file.originFileObj as RcFile);
@@ -47,15 +42,27 @@ export default ({ data, onClose }) =&gt; { @@ -47,15 +42,27 @@ export default ({ data, onClose }) =&gt; {
47 42
48 const handleUpload = async () => { 43 const handleUpload = async () => {
49 const formData = new FormData(); 44 const formData = new FormData();
50 - // fileList.forEach((file) => {  
51 - // formData.append('files[]', file as RcFile);  
52 - // });  
53 - formData.append('file', fileList[0] as RcFile); 45 + fileList.forEach((file) => {
  46 + //originFileObj二进制文件
  47 + formData.append('files', file.originFileObj as RcFile);
  48 + });
  49 + // console.log(fileList[0] as RcFile)
  50 + // formData.append('file', fileList[0] as RcFile);
54 formData.append('id', data.id); 51 formData.append('id', data.id);
55 setUploading(true); 52 setUploading(true);
56 // You can use any AJAX library you like 53 // You can use any AJAX library you like
57 - const res = await postServiceOrderConfirmReceipt({ data: formData });  
58 - console.log(res); 54 + const res = await postServiceOrderConfirmReceipt({
  55 + data: formData,
  56 + headers: {
  57 + 'Content-Type':
  58 + 'multipart/form-data; boundary=----WebKitFormBoundarynl6gT1BKdPWIejNq',
  59 + },
  60 + });
  61 +
  62 + if (res.result === RESPONSE_CODE.SUCCESS) {
  63 + message.success(res.message);
  64 + onClose();
  65 + }
59 66
60 setUploading(false); 67 setUploading(false);
61 }; 68 };
@@ -72,37 +79,47 @@ export default ({ data, onClose }) =&gt; { @@ -72,37 +79,47 @@ export default ({ data, onClose }) =&gt; {
72 79
73 return false; 80 return false;
74 }, 81 },
  82 + listType: 'picture-card',
75 onPreview: handlePreview, 83 onPreview: handlePreview,
76 fileList, 84 fileList,
  85 + onChange: handleChange,
77 }; 86 };
78 87
79 return ( 88 return (
80 - <ModalForm<{  
81 - name: string;  
82 - company: string;  
83 - }>  
84 - width={500}  
85 - open  
86 - title="确认收货"  
87 - form={form}  
88 - autoFocusFirstInput  
89 - submitTimeout={2000}  
90 - onFinish={async () => {  
91 - onClose();  
92 - }}  
93 - >  
94 - <Upload {...props}>  
95 - <Button icon={<UploadOutlined />}>Select File</Button>  
96 - </Upload>  
97 - <Button  
98 - type="primary"  
99 - onClick={handleUpload}  
100 - disabled={fileList.length === 0}  
101 - loading={uploading}  
102 - style={{ marginTop: 16 }} 89 + <>
  90 + <Modal
  91 + width={500}
  92 + open
  93 + title="确认收货"
  94 + footer={[
  95 + <Button key="cancel" onClick={onClose}>
  96 + 取消
  97 + </Button>,
  98 + <Button
  99 + type="primary"
  100 + key="ok"
  101 + onClick={handleUpload}
  102 + disabled={fileList.length === 0}
  103 + loading={uploading}
  104 + >
  105 + {uploading ? '上传中' : '提交'}
  106 + </Button>,
  107 + ]}
  108 + onCancel={async () => {
  109 + onClose();
  110 + }}
  111 + >
  112 + <div className="py-4 font-semibold">请将买家确认收货的凭证照片上传</div>
  113 + <Upload {...props}>{fileList.length < 3 ? uploadButton : ''}</Upload>
  114 + </Modal>
  115 + <Modal
  116 + open={previewOpen}
  117 + title={previewTitle}
  118 + footer={null}
  119 + onCancel={handleCancel}
103 > 120 >
104 - {uploading ? 'Uploading' : 'Start Upload'}  
105 - </Button>  
106 - </ModalForm> 121 + <img alt="example" style={{ width: '100%' }} src={previewImage} />
  122 + </Modal>
  123 + </>
107 ); 124 );
108 }; 125 };
src/pages/Order/components/FinancialDrawer.tsx
1 // import { PlusOutlined } from '@ant-design/icons'; 1 // import { PlusOutlined } from '@ant-design/icons';
  2 +import { RESPONSE_CODE } from '@/constants/enum';
  3 +import {
  4 + postServiceOrderEditOrder,
  5 + postServiceOrderInvoicing,
  6 +} from '@/services';
2 import { 7 import {
3 DrawerForm, 8 DrawerForm,
4 ProFormDatePicker, 9 ProFormDatePicker,
@@ -14,9 +19,9 @@ import { Form, message } from &#39;antd&#39;; @@ -14,9 +19,9 @@ import { Form, message } from &#39;antd&#39;;
14 // }); 19 // });
15 // }; 20 // };
16 21
17 -export default ({ mainOrder, subOrders, onClose }) => { 22 +export default ({ mainOrder, subOrders, isEdit, onClose }) => {
  23 + const subIds = subOrders.map((item) => item.id);
18 console.log(subOrders); 24 console.log(subOrders);
19 -  
20 const [form] = Form.useForm<{ name: string; company: string }>(); 25 const [form] = Form.useForm<{ name: string; company: string }>();
21 return ( 26 return (
22 <DrawerForm<{ 27 <DrawerForm<{
@@ -39,14 +44,23 @@ export default ({ mainOrder, subOrders, onClose }) =&gt; { @@ -39,14 +44,23 @@ export default ({ mainOrder, subOrders, onClose }) =&gt; {
39 destroyOnClose: true, 44 destroyOnClose: true,
40 }} 45 }}
41 submitTimeout={2000} 46 submitTimeout={2000}
42 - onFinish={async (values) => {  
43 - console.log(form);  
44 - console.log(values);  
45 - console.log(values.name);  
46 - message.success('提交成功');  
47 - // 不返回不会关闭弹框  
48 - onClose();  
49 - return true; 47 + onFinish={async () => {
  48 + let res;
  49 + let body = {
  50 + invoicingTime: form.getFieldValue('invoicingTime'),
  51 + subIds: subIds,
  52 + collectMoneyTime: undefined,
  53 + };
  54 + if (isEdit) {
  55 + body.collectMoneyTime = form.getFieldValue('collectMoneyTime');
  56 + res = await postServiceOrderEditOrder({ data: body });
  57 + } else {
  58 + res = await postServiceOrderInvoicing({ data: body });
  59 + }
  60 + if (res.result === RESPONSE_CODE.SUCCESS) {
  61 + message.success(res.message);
  62 + onClose();
  63 + }
50 }} 64 }}
51 onOpenChange={(val) => { 65 onOpenChange={(val) => {
52 return !val && onClose(); 66 return !val && onClose();
@@ -73,8 +87,20 @@ export default ({ mainOrder, subOrders, onClose }) =&gt; { @@ -73,8 +87,20 @@ export default ({ mainOrder, subOrders, onClose }) =&gt; {
73 placeholder="请输入开户银行账号" 87 placeholder="请输入开户银行账号"
74 disabled 88 disabled
75 /> 89 />
76 - <ProFormDatePicker width="lg" name="invoicingTime" label="开票时间" />  
77 - <ProFormDatePicker width="lg" name="collectMoneyTime" label="收款时间" /> 90 + <ProFormDatePicker
  91 + width="lg"
  92 + name="invoicingTime"
  93 + label="开票时间"
  94 + disabled={isEdit}
  95 + rules={[{ required: !isEdit ? true : false, message: '这是必填项' }]}
  96 + initialValue={subOrders[0].invoicingTime}
  97 + />
  98 + <ProFormDatePicker
  99 + width="lg"
  100 + name="collectMoneyTime"
  101 + label="收款时间"
  102 + initialValue={subOrders[0].collectMoneyTime}
  103 + />
78 </DrawerForm> 104 </DrawerForm>
79 ); 105 );
80 }; 106 };
src/pages/Order/components/OrderDrawer.tsx
@@ -28,9 +28,11 @@ import { @@ -28,9 +28,11 @@ import {
28 export default ({ onClose, data, isAdd }) => { 28 export default ({ onClose, data, isAdd }) => {
29 const [invoicingStatus, setInvoicingStatus] = useState(''); 29 const [invoicingStatus, setInvoicingStatus] = useState('');
30 30
31 - //订单修改和新增的子订单列表命名是list  
32 - data.list = data.subOrderInformationLists;  
33 if (!isAdd) { 31 if (!isAdd) {
  32 + //订单修改和新增的子订单列表命名是list
  33 + data.list = data.subOrderInformationLists;
  34 + //主订单事业部默认显示子订单第一条的事业部
  35 + data.productBelongBusiness = data.list[0].productBelongBusiness;
34 data.paymentMethod = data.list[0].paymentMethod; 36 data.paymentMethod = data.list[0].paymentMethod;
35 data.paymentChannel = data.list[0].paymentChannel; 37 data.paymentChannel = data.list[0].paymentChannel;
36 data.invoicingStatus = data.list[0].invoicingStatus; 38 data.invoicingStatus = data.list[0].invoicingStatus;
@@ -52,6 +54,7 @@ export default ({ onClose, data, isAdd }) =&gt; { @@ -52,6 +54,7 @@ export default ({ onClose, data, isAdd }) =&gt; {
52 invoicingTime: ''; 54 invoicingTime: '';
53 bank: ''; 55 bank: '';
54 bankAccountNumber: ''; 56 bankAccountNumber: '';
  57 + deleteSubOrderLists: [];
55 notes: ''; 58 notes: '';
56 list: [ 59 list: [
57 { 60 {
@@ -87,9 +90,9 @@ export default ({ onClose, data, isAdd }) =&gt; { @@ -87,9 +90,9 @@ export default ({ onClose, data, isAdd }) =&gt; {
87 function autoFillProductInfo(option: any, currentRowData: any) { 90 function autoFillProductInfo(option: any, currentRowData: any) {
88 let copyList = form.getFieldValue('list'); 91 let copyList = form.getFieldValue('list');
89 let currentData = copyList[currentRowData.field.key]; 92 let currentData = copyList[currentRowData.field.key];
90 - currentData.productCode = option.productCode;  
91 - currentData.parameters = option.specifications;  
92 - currentData.unit = option.unit; 93 + currentData.productCode = option?.productCode;
  94 + currentData.parameters = option?.specifications;
  95 + currentData.unit = option?.unit;
93 form.setFieldValue('list', copyList); 96 form.setFieldValue('list', copyList);
94 } 97 }
95 98
@@ -122,17 +125,26 @@ export default ({ onClose, data, isAdd }) =&gt; { @@ -122,17 +125,26 @@ export default ({ onClose, data, isAdd }) =&gt; {
122 }} 125 }}
123 submitTimeout={2000} 126 submitTimeout={2000}
124 onFinish={async (values) => { 127 onFinish={async (values) => {
125 - let data = {}; 128 + let res = {};
126 if (isAdd) { 129 if (isAdd) {
127 - message.info('add');  
128 - data = await postServiceOrderAddOrder({ data: values }); 130 + res = await postServiceOrderAddOrder({ data: values });
129 } else { 131 } else {
130 - message.info('update');  
131 - data = await postServiceOrderUpdateOrder({ data: values }); 132 + //计算已删除的子订单id
  133 + const originIds = data.subOrderInformationLists.map((item) => {
  134 + return item.id;
  135 + });
  136 + console.log('originIds:' + originIds);
  137 + const curIds = form.getFieldValue('list')?.map((item) => {
  138 + return item.id;
  139 + });
  140 + console.log('curIds:' + curIds);
  141 + const diff = originIds.filter((item) => !curIds.includes(item));
  142 + values.deleteSubOrderLists = diff;
  143 + res = await postServiceOrderUpdateOrder({ data: values });
132 } 144 }
133 145
134 - if (data.result === RESPONSE_CODE.SUCCESS) {  
135 - message.success(data.message); 146 + if (res.result === RESPONSE_CODE.SUCCESS) {
  147 + message.success(res.message);
136 // 不返回不会关闭弹框 148 // 不返回不会关闭弹框
137 onClose(); 149 onClose();
138 return true; 150 return true;
@@ -164,38 +176,49 @@ export default ({ onClose, data, isAdd }) =&gt; { @@ -164,38 +176,49 @@ export default ({ onClose, data, isAdd }) =&gt; {
164 width="lg" 176 width="lg"
165 label="收货人" 177 label="收货人"
166 placeholder="请输入收货人" 178 placeholder="请输入收货人"
  179 + rules={[{ required: true, message: '收货人必填' }]}
167 /> 180 />
168 <ProFormText 181 <ProFormText
169 width="lg" 182 width="lg"
170 name="customerContactNumber" 183 name="customerContactNumber"
171 label="联系方式" 184 label="联系方式"
172 placeholder="请输入联系方式" 185 placeholder="请输入联系方式"
  186 + rules={[{ required: true, message: '联系方式必填' }]}
173 /> 187 />
174 <ProFormText 188 <ProFormText
175 width="lg" 189 width="lg"
176 name="institution" 190 name="institution"
177 label="单位" 191 label="单位"
178 placeholder="请输入单位" 192 placeholder="请输入单位"
  193 + rules={[{ required: true, message: '单位必填' }]}
179 /> 194 />
180 <ProFormText 195 <ProFormText
181 width="lg" 196 width="lg"
182 name="institutionContactName" 197 name="institutionContactName"
183 label="单位联系人" 198 label="单位联系人"
184 placeholder="请输入单位联系人" 199 placeholder="请输入单位联系人"
  200 + rules={[{ required: true, message: '单位联系人必填' }]}
185 /> 201 />
186 <ProFormTextArea 202 <ProFormTextArea
187 width="lg" 203 width="lg"
188 name="customerShippingAddress" 204 name="customerShippingAddress"
189 label="收货地址" 205 label="收货地址"
190 placeholder="请输入收货地址" 206 placeholder="请输入收货地址"
  207 + rules={[{ required: true, message: '收货地址必填' }]}
  208 + />
  209 + <ProFormText
  210 + name="totalPayment"
  211 + width="lg"
  212 + label="支付总额(¥)"
  213 + rules={[{ required: true, message: '支付总额必填' }]}
191 /> 214 />
192 - <ProFormText name="totalPayment" width="lg" label="支付总额(¥)" />  
193 <ProFormSelect 215 <ProFormSelect
194 placeholder="请输入支付渠道" 216 placeholder="请输入支付渠道"
195 name="paymentChannel" 217 name="paymentChannel"
196 width="lg" 218 width="lg"
197 label="支付渠道" 219 label="支付渠道"
198 options={enumToSelect(PAYMENT_CHANNEL_OPTIONS)} 220 options={enumToSelect(PAYMENT_CHANNEL_OPTIONS)}
  221 + rules={[{ required: true, message: '支付渠道必填' }]}
199 /> 222 />
200 <ProFormSelect 223 <ProFormSelect
201 placeholder="请输入支付方式" 224 placeholder="请输入支付方式"
@@ -203,6 +226,7 @@ export default ({ onClose, data, isAdd }) =&gt; { @@ -203,6 +226,7 @@ export default ({ onClose, data, isAdd }) =&gt; {
203 width="lg" 226 width="lg"
204 label="支付方式" 227 label="支付方式"
205 options={enumToSelect(PAYMENT_METHOD_OPTIONS)} 228 options={enumToSelect(PAYMENT_METHOD_OPTIONS)}
  229 + rules={[{ required: true, message: '支付方式必填' }]}
206 /> 230 />
207 <ProFormSelect 231 <ProFormSelect
208 placeholder="请输入所属事业部" 232 placeholder="请输入所属事业部"
@@ -210,6 +234,7 @@ export default ({ onClose, data, isAdd }) =&gt; { @@ -210,6 +234,7 @@ export default ({ onClose, data, isAdd }) =&gt; {
210 width="lg" 234 width="lg"
211 label="所属事业部" 235 label="所属事业部"
212 options={enumToSelect(PRODUCT_BELONG_DEPARTMENT_OPTIONS)} 236 options={enumToSelect(PRODUCT_BELONG_DEPARTMENT_OPTIONS)}
  237 + rules={[{ required: true, message: '所属事业部必填' }]}
213 /> 238 />
214 <ProFormSelect 239 <ProFormSelect
215 placeholder="选择是否需要开票" 240 placeholder="选择是否需要开票"
@@ -220,6 +245,7 @@ export default ({ onClose, data, isAdd }) =&gt; { @@ -220,6 +245,7 @@ export default ({ onClose, data, isAdd }) =&gt; {
220 onChange={(_, option) => { 245 onChange={(_, option) => {
221 setInvoicingStatus(option.value); 246 setInvoicingStatus(option.value);
222 }} 247 }}
  248 + rules={[{ required: true, message: '是否需要开票必填' }]}
223 /> 249 />
224 <ProFormText 250 <ProFormText
225 width="lg" 251 width="lg"
@@ -227,11 +253,18 @@ export default ({ onClose, data, isAdd }) =&gt; { @@ -227,11 +253,18 @@ export default ({ onClose, data, isAdd }) =&gt; {
227 label="开票信息" 253 label="开票信息"
228 hidden={invoicingStatus !== 'INVOICED'} 254 hidden={invoicingStatus !== 'INVOICED'}
229 placeholder="请输入开票信息" 255 placeholder="请输入开票信息"
  256 + rules={[
  257 + {
  258 + required: invoicingStatus === 'INVOICED' ? true : false,
  259 + message: '开票信息必填',
  260 + },
  261 + ]}
230 /> 262 />
231 {getUserInfo().roleSmallVO?.code === 'admin' ? ( 263 {getUserInfo().roleSmallVO?.code === 'admin' ? (
232 <ProFormDateTimePicker 264 <ProFormDateTimePicker
233 width="lg" 265 width="lg"
234 name="invoicingTime" 266 name="invoicingTime"
  267 + hidden={invoicingStatus === 'INVOICED'}
235 label="开票时间" 268 label="开票时间"
236 placeholder="请输入开票时间" 269 placeholder="请输入开票时间"
237 /> 270 />
@@ -405,6 +438,7 @@ export default ({ onClose, data, isAdd }) =&gt; { @@ -405,6 +438,7 @@ export default ({ onClose, data, isAdd }) =&gt; {
405 showSearch 438 showSearch
406 name="productName" 439 name="productName"
407 placeholder="请搜索商品" 440 placeholder="请搜索商品"
  441 + rules={[{ required: true, message: '商品名称必填' }]}
408 onChange={(_, option) => { 442 onChange={(_, option) => {
409 autoFillProductInfo(option, listMeta); 443 autoFillProductInfo(option, listMeta);
410 }} 444 }}
@@ -444,19 +478,22 @@ export default ({ onClose, data, isAdd }) =&gt; { @@ -444,19 +478,22 @@ export default ({ onClose, data, isAdd }) =&gt; {
444 name="quantity" 478 name="quantity"
445 label="商品数量" 479 label="商品数量"
446 placeholder="请输入商品数量" 480 placeholder="请输入商品数量"
  481 + rules={[{ required: true, message: '商品数量必填' }]}
447 /> 482 />
448 <ProFormDigit 483 <ProFormDigit
449 width="lg" 484 width="lg"
450 name="productPrice" 485 name="productPrice"
451 label="商品单价" 486 label="商品单价"
452 placeholder="请输入商品单价" 487 placeholder="请输入商品单价"
  488 + rules={[{ required: true, message: '商品单价必填' }]}
453 /> 489 />
454 <ProFormText 490 <ProFormText
455 width="lg" 491 width="lg"
456 name="unit" 492 name="unit"
457 disabled 493 disabled
458 - label="价格单位"  
459 - placeholder="请输入价格单位" 494 + label="商品单位"
  495 + placeholder="请输入商品单位"
  496 + rules={[{ required: true, message: '商品单位必填' }]}
460 /> 497 />
461 498
462 <ProFormDigit 499 <ProFormDigit
@@ -464,6 +501,7 @@ export default ({ onClose, data, isAdd }) =&gt; { @@ -464,6 +501,7 @@ export default ({ onClose, data, isAdd }) =&gt; {
464 name="subOrderPayment" 501 name="subOrderPayment"
465 label="子订单金额" 502 label="子订单金额"
466 placeholder="请输入子订单金额" 503 placeholder="请输入子订单金额"
  504 + rules={[{ required: true, message: '子订单金额必填' }]}
467 /> 505 />
468 <ProFormText 506 <ProFormText
469 width="lg" 507 width="lg"
src/pages/Order/constant.ts
  1 +import { enumToProTableEnumValue } from '@/utils';
  2 +
  3 +export const PAYMENT_CHANNEL_OPTIONS = {
  4 + ALIPAY: '支付宝',
  5 + WECHAT: '微信',
  6 + BANK_TRANSFER: '银行转账',
  7 +};
  8 +
  9 +export const PAYMENT_METHOD_OPTIONS = {
  10 + PAYMENT_IN_ADVANCE: '预付',
  11 + CASH_ON_DELIVERY: '货到付款',
  12 +};
  13 +
  14 +export const PRODUCT_BELONG_DEPARTMENT_OPTIONS = {
  15 + APPLICATION_PROJECT: '应用项目事业部门',
  16 + TEST: '测试事业部门',
  17 + CUSTOMIZATION: '定制化事业部门',
  18 + EXPERIMENTAL_EQUIPMENT: '实验设备事业部门',
  19 + EXPERIMENTAL_CONSUMABLES: '实验耗材事业部门',
  20 +};
  21 +
  22 +export const INVOCING_STATUS_OPTIONS = {
  23 + UN_INVOICE: '否',
  24 + INVOICED: '是',
  25 +};
  26 +
  27 +export const LOGISTICS_STATUS_OPTIONS = {
  28 + JINGDONG_LOGISTICS: '京东物流',
  29 + DEBANG_LOGISTICS: '德邦物流',
  30 +};
  31 +
  32 +export const ORDER_STATUS_OPTIONS = {
  33 + CONFIRM_RECEIPT: '确认收货',
  34 + UNAUDITED: '未审核',
  35 + AUDITED: '已审核',
  36 + WAIT_SHIP: '待发货',
  37 + AUDIT_FAILED: '审核失败',
  38 + SHIPPED: '已发货',
  39 +};
  40 +
1 export const MAIN_ORDER_COLUMNS = [ 41 export const MAIN_ORDER_COLUMNS = [
2 { 42 {
3 title: '订单列表', 43 title: '订单列表',
@@ -62,26 +102,30 @@ export const MAIN_ORDER_COLUMNS = [ @@ -62,26 +102,30 @@ export const MAIN_ORDER_COLUMNS = [
62 { 102 {
63 title: '订单状态', 103 title: '订单状态',
64 dataIndex: 'orderStatus', 104 dataIndex: 'orderStatus',
65 - valueType: 'text', 105 + valueType: 'select',
66 hideInTable: true, 106 hideInTable: true,
  107 + valueEnum: enumToProTableEnumValue(ORDER_STATUS_OPTIONS),
67 }, 108 },
68 { 109 {
69 title: '支付方式', 110 title: '支付方式',
70 dataIndex: 'paymentStatus', 111 dataIndex: 'paymentStatus',
71 - valueType: 'text', 112 + valueType: 'select',
72 hideInTable: true, 113 hideInTable: true,
  114 + valueEnum: enumToProTableEnumValue(PAYMENT_METHOD_OPTIONS),
73 }, 115 },
74 { 116 {
75 title: '物流方式', 117 title: '物流方式',
76 dataIndex: 'logisticsMethod', 118 dataIndex: 'logisticsMethod',
77 - valueType: 'text', 119 + valueType: 'select',
78 hideInTable: true, 120 hideInTable: true,
  121 + valueEnum: enumToProTableEnumValue(LOGISTICS_STATUS_OPTIONS),
79 }, 122 },
80 { 123 {
81 title: '支付渠道', 124 title: '支付渠道',
82 dataIndex: 'paymentChannel', 125 dataIndex: 'paymentChannel',
83 - valueType: 'text', 126 + valueType: 'select',
84 hideInTable: true, 127 hideInTable: true,
  128 + valueEnum: enumToProTableEnumValue(PAYMENT_CHANNEL_OPTIONS),
85 }, 129 },
86 { 130 {
87 title: '银行名称', 131 title: '银行名称',
@@ -98,8 +142,9 @@ export const MAIN_ORDER_COLUMNS = [ @@ -98,8 +142,9 @@ export const MAIN_ORDER_COLUMNS = [
98 { 142 {
99 title: '所属部门', 143 title: '所属部门',
100 dataIndex: 'productBelongBusiness', 144 dataIndex: 'productBelongBusiness',
101 - valueType: 'text', 145 + valueType: 'select',
102 hideInTable: true, 146 hideInTable: true,
  147 + valueEnum: enumToProTableEnumValue(PRODUCT_BELONG_DEPARTMENT_OPTIONS),
103 }, 148 },
104 { 149 {
105 title: '创建日期', 150 title: '创建日期',
@@ -116,10 +161,11 @@ export const MAIN_ORDER_COLUMNS = [ @@ -116,10 +161,11 @@ export const MAIN_ORDER_COLUMNS = [
116 }, 161 },
117 }, 162 },
118 { 163 {
119 - title: '开票状态', 164 + title: '是否需要开票',
120 dataIndex: 'invoicingStatus', 165 dataIndex: 'invoicingStatus',
121 - valueType: 'text', 166 + valueType: 'select',
122 hideInTable: true, 167 hideInTable: true,
  168 + valueEnum: enumToProTableEnumValue(INVOCING_STATUS_OPTIONS),
123 }, 169 },
124 { 170 {
125 title: '开票日期', 171 title: '开票日期',
@@ -204,41 +250,3 @@ export const SUB_ORDER_COLUMNS = [ @@ -204,41 +250,3 @@ export const SUB_ORDER_COLUMNS = [
204 width: 80, 250 width: 80,
205 }, 251 },
206 ]; 252 ];
207 -  
208 -export const PAYMENT_CHANNEL_OPTIONS = {  
209 - ALIPAY: '支付宝',  
210 - WECHAT: '微信',  
211 - BANK_TRANSFER: '银行转账',  
212 -};  
213 -  
214 -export const PAYMENT_METHOD_OPTIONS = {  
215 - PAYMENT_IN_ADVANCE: '预付',  
216 - CASH_ON_DELIVERY: '货到付款',  
217 -};  
218 -  
219 -export const PRODUCT_BELONG_DEPARTMENT_OPTIONS = {  
220 - APPLICATION_PROJECT: '应用项目事业部门',  
221 - TEST: '测试事业部门',  
222 - CUSTOMIZATION: '定制化事业部门',  
223 - EXPERIMENTAL_EQUIPMENT: '实验设备事业部门',  
224 - EXPERIMENTAL_CONSUMABLES: '实验耗材事业部门',  
225 -};  
226 -  
227 -export const INVOCING_STATUS_OPTIONS = {  
228 - UN_INVOICE: '否',  
229 - INVOICED: '是',  
230 -};  
231 -  
232 -export const LOGISTICS_STATUS_OPTIONS = {  
233 - JINGDONG_LOGISTICS: '京东物流',  
234 - DEBANG_LOGISTICS: '德邦物流',  
235 -};  
236 -  
237 -export const ORDER_STATUS_OPTIONS = {  
238 - CONFIRM_RECEIPT: '确认收货',  
239 - UNAUDITED: '未审核',  
240 - AUDITED: '已审核',  
241 - WAIT_SHIP: '待发货',  
242 - AUDIT_FAILED: '审核失败',  
243 - SHIPPED: '已发货',  
244 -};  
src/pages/Order/index.tsx
@@ -2,11 +2,10 @@ import ButtonConfirm from &#39;@/components/ButtomConfirm&#39;; @@ -2,11 +2,10 @@ import ButtonConfirm from &#39;@/components/ButtomConfirm&#39;;
2 import { RESPONSE_CODE } from '@/constants/enum'; 2 import { RESPONSE_CODE } from '@/constants/enum';
3 import { 3 import {
4 postServiceOrderOrderCancel, 4 postServiceOrderOrderCancel,
5 - postServiceOrderPrintOrder,  
6 postServiceOrderQueryServiceOrder, 5 postServiceOrderQueryServiceOrder,
7 } from '@/services'; 6 } from '@/services';
8 import { orderExport } from '@/services/order'; 7 import { orderExport } from '@/services/order';
9 -import { enumValueToLabel } from '@/utils'; 8 +import { enumToProTableEnumValue, enumValueToLabel } from '@/utils';
10 import { DownOutlined, EllipsisOutlined } from '@ant-design/icons'; 9 import { DownOutlined, EllipsisOutlined } from '@ant-design/icons';
11 import { 10 import {
12 PageContainer, 11 PageContainer,
@@ -27,7 +26,7 @@ import { @@ -27,7 +26,7 @@ import {
27 message, 26 message,
28 } from 'antd'; 27 } from 'antd';
29 import { cloneDeep } from 'lodash'; 28 import { cloneDeep } from 'lodash';
30 -import { Key, useRef, useState } from 'react'; 29 +import { Key, useEffect, useRef, useState } from 'react';
31 import OrderPrintModal from '../OrderPrint/OrderPrintModal'; 30 import OrderPrintModal from '../OrderPrint/OrderPrintModal';
32 import CheckModal from './components/CheckModal'; 31 import CheckModal from './components/CheckModal';
33 import ConfirmReceiptModal from './components/ConfirmReceiptModal'; 32 import ConfirmReceiptModal from './components/ConfirmReceiptModal';
@@ -55,17 +54,44 @@ const OrderPage = () =&gt; { @@ -55,17 +54,44 @@ const OrderPage = () =&gt; {
55 useState<boolean>(false); 54 useState<boolean>(false);
56 const [deliverVisible, setDeliverVisible] = useState<boolean>(false); 55 const [deliverVisible, setDeliverVisible] = useState<boolean>(false);
57 const [isOrderAddOpt, setIsOrderAddOpt] = useState<boolean>(false); 56 const [isOrderAddOpt, setIsOrderAddOpt] = useState<boolean>(false);
  57 + const [isFinalcialEdit, setIsFinalcialEdit] = useState<boolean>(false);
58 const [expandedRowKeys, setExpandedRowKeys] = useState<Key[]>([]); 58 const [expandedRowKeys, setExpandedRowKeys] = useState<Key[]>([]);
59 const [orderRow, setOrderRow] = useState<Partial<OrderType>>({}); 59 const [orderRow, setOrderRow] = useState<Partial<OrderType>>({});
60 const [mainOrderAllItemKeys, setMainOrderAllItemKeys] = useState([]); 60 const [mainOrderAllItemKeys, setMainOrderAllItemKeys] = useState([]);
61 const [rolePath, setRolePath] = useState([]); //当前角色权限(新增跟打印按钮) 61 const [rolePath, setRolePath] = useState([]); //当前角色权限(新增跟打印按钮)
62 const userInfo = JSON.parse(localStorage.getItem('userInfo')); 62 const userInfo = JSON.parse(localStorage.getItem('userInfo'));
63 - 63 + const [tableHeight, setTableHeight] = useState(200);
64 const [selectedRows, setSelectedRows] = useState({}); 64 const [selectedRows, setSelectedRows] = useState({});
65 const [selectedRowObj, setSelectedRowObj] = useState({}); 65 const [selectedRowObj, setSelectedRowObj] = useState({});
66 const [selectedItems, setSelectedItems] = useState([]); 66 const [selectedItems, setSelectedItems] = useState([]);
67 const mainTableRef = useRef(); 67 const mainTableRef = useRef();
68 68
  69 + console.log(enumToProTableEnumValue(ORDER_STATUS_OPTIONS));
  70 + const resize = () => {
  71 + // 计算元素底部到视口顶部的距离
  72 + let bottomDistance = document
  73 + .getElementById('mainTable')
  74 + .getElementsByClassName('ant-table-thead')[0]
  75 + .getBoundingClientRect().bottom;
  76 + // 获取屏幕高度
  77 + let screenHeight =
  78 + window.innerHeight || document.documentElement.clientHeight;
  79 +
  80 + // 计算元素底部到屏幕底部的距离
  81 + let bottomToScreenBottomDistance = screenHeight - bottomDistance;
  82 +
  83 + // //底部分页元素的高度
  84 + // var pH = screenHeight - document.getElementById("mainTable").getElementsByClassName('ant-table-body')[0].getBoundingClientRect().bottom;
  85 +
  86 + setTableHeight(bottomToScreenBottomDistance - 88);
  87 + };
  88 +
  89 + useEffect(() => {
  90 + resize();
  91 + // 添加事件监听器,当窗口大小改变时调用resize方法
  92 + window.addEventListener('resize', resize);
  93 + });
  94 +
69 const onCheckboxChange = (itemKey: never) => { 95 const onCheckboxChange = (itemKey: never) => {
70 const newSelectedItems = selectedItems.includes(itemKey) 96 const newSelectedItems = selectedItems.includes(itemKey)
71 ? selectedItems.filter((key) => key !== itemKey) 97 ? selectedItems.filter((key) => key !== itemKey)
@@ -191,7 +217,7 @@ const OrderPage = () =&gt; { @@ -191,7 +217,7 @@ const OrderPage = () =&gt; {
191 ) : ( 217 ) : (
192 '' 218 ''
193 )} 219 )}
194 - {record.mainPath.includes('editOrder') ? ( 220 + {record.mainPath.includes('invoicing') ? (
195 <Button 221 <Button
196 type="link" 222 type="link"
197 className="p-0" 223 className="p-0"
@@ -201,6 +227,7 @@ const OrderPage = () =&gt; { @@ -201,6 +227,7 @@ const OrderPage = () =&gt; {
201 if (selectedSubOrders === undefined) { 227 if (selectedSubOrders === undefined) {
202 setSelectedRows(record.subOrderInformationLists); 228 setSelectedRows(record.subOrderInformationLists);
203 } 229 }
  230 + setOrderRow(record);
204 setFinancialVisible(true); 231 setFinancialVisible(true);
205 }} 232 }}
206 > 233 >
@@ -379,15 +406,23 @@ const OrderPage = () =&gt; { @@ -379,15 +406,23 @@ const OrderPage = () =&gt; {
379 type="link" 406 type="link"
380 onClick={async () => { 407 onClick={async () => {
381 //调用打印接口 408 //调用打印接口
382 - let body = { subIds: [optRecord.id] };  
383 - const data = await postServiceOrderPrintOrder({  
384 - data: body,  
385 - });  
386 - if (data.result === RESPONSE_CODE.SUCCESS) {  
387 - message.success(data.message);  
388 - window.print();  
389 - mainTableRef.current?.reload();  
390 - } 409 + // let body = { subIds: [optRecord.id] };
  410 + // const data = await postServiceOrderPrintOrder({
  411 + // data: body,
  412 + // });
  413 + // if (data.result === RESPONSE_CODE.SUCCESS) {
  414 + // message.success(data.message);
  415 + // setOrderPrintVisible(true);
  416 + // setSelectedRows([optRecord]);
  417 + // setOrderRow(record);
  418 + // mainTableRef.current?.reload();
  419 + // }
  420 +
  421 + // message.success(data.message);
  422 + setOrderPrintVisible(true);
  423 + setSelectedRows([optRecord]);
  424 + setOrderRow(record);
  425 + mainTableRef.current?.reload();
391 }} 426 }}
392 > 427 >
393 打印 428 打印
@@ -402,7 +437,8 @@ const OrderPage = () =&gt; { @@ -402,7 +437,8 @@ const OrderPage = () =&gt; {
402 onClick={() => { 437 onClick={() => {
403 setFinancialVisible(true); 438 setFinancialVisible(true);
404 setOrderRow(record); 439 setOrderRow(record);
405 - setSelectedRows(selectedRowObj[record.id]); 440 + setSelectedRows([optRecord]);
  441 + setIsFinalcialEdit(true);
406 }} 442 }}
407 > 443 >
408 编辑 444 编辑
@@ -410,14 +446,15 @@ const OrderPage = () =&gt; { @@ -410,14 +446,15 @@ const OrderPage = () =&gt; {
410 ) : ( 446 ) : (
411 '' 447 ''
412 )} 448 )}
413 - {optRecord.subPath.includes('invocing') ? ( 449 + {optRecord.subPath.includes('invoicing') ? (
414 <Button 450 <Button
415 className="p-0" 451 className="p-0"
416 type="link" 452 type="link"
417 onClick={() => { 453 onClick={() => {
418 setFinancialVisible(true); 454 setFinancialVisible(true);
  455 + setIsFinalcialEdit(false);
419 setOrderRow(record); 456 setOrderRow(record);
420 - setSelectedRows(selectedRowObj[record.id]); 457 + setSelectedRows([optRecord]);
421 }} 458 }}
422 > 459 >
423 开票 460 开票
@@ -639,8 +676,11 @@ const OrderPage = () =&gt; { @@ -639,8 +676,11 @@ const OrderPage = () =&gt; {
639 ], 676 ],
640 }} 677 }}
641 > 678 >
  679 + <div id="resizeDiv"></div>
642 <ProTable 680 <ProTable
643 - scroll={{ x: true }} 681 + id="mainTable"
  682 + // tableStyle={{height:'100px'}}
  683 + scroll={{ x: true, y: tableHeight }}
644 actionRef={mainTableRef} 684 actionRef={mainTableRef}
645 expandIconColumnIndex={-1} 685 expandIconColumnIndex={-1}
646 columns={mainOrdersColumns} 686 columns={mainOrdersColumns}
@@ -656,6 +696,7 @@ const OrderPage = () =&gt; { @@ -656,6 +696,7 @@ const OrderPage = () =&gt; {
656 headerTitle="订单列表" 696 headerTitle="订单列表"
657 search={{ 697 search={{
658 labelWidth: 'auto', 698 labelWidth: 'auto',
  699 + onCollapse: resize,
659 }} 700 }}
660 request={async ( 701 request={async (
661 // 第一个参数 params 查询表单和 params 参数的结合 702 // 第一个参数 params 查询表单和 params 参数的结合
@@ -727,6 +768,7 @@ const OrderPage = () =&gt; { @@ -727,6 +768,7 @@ const OrderPage = () =&gt; {
727 768
728 {financialVisible && ( 769 {financialVisible && (
729 <FinancialDrawer 770 <FinancialDrawer
  771 + isEdit={isFinalcialEdit}
730 mainOrder={orderRow} 772 mainOrder={orderRow}
731 subOrders={selectedRows} 773 subOrders={selectedRows}
732 onClose={() => { 774 onClose={() => {
src/pages/OrderPrint/OrderPrintModal.tsx
  1 +import { RESPONSE_CODE } from '@/constants/enum';
1 import '@/pages/OrderPrint/index.less'; 2 import '@/pages/OrderPrint/index.less';
2 -import { Modal } from 'antd'; 3 +import { postServiceOrderPrintOrder } from '@/services';
  4 +import { ExclamationCircleFilled } from '@ant-design/icons';
  5 +import { Modal, Select, Space, message } from 'antd';
3 import printJS from 'print-js'; 6 import printJS from 'print-js';
  7 +import { useState } from 'react';
  8 +import DalangPrinter from './components/DalangPrinter';
  9 +import HoujiePrinter from './components/HoujiePrinter';
  10 +import ZhuguangPrinter from './components/ZhuguangPrinter';
4 11
5 export default ({ mainOrder, subOrders, onClose }) => { 12 export default ({ mainOrder, subOrders, onClose }) => {
6 console.log(mainOrder); 13 console.log(mainOrder);
7 console.log(subOrders); 14 console.log(subOrders);
8 15
9 - let columns = [];  
10 - for (let i = 0; i < subOrders.length; i++) {  
11 - let subOrder = subOrders[i];  
12 - columns.push(  
13 - <tr height="30" style={{ height: '15.00pt' }}>  
14 - <td height="30" style={{ height: '15.00pt' }}></td>  
15 - <td className="xl72">{i + 1}</td>  
16 - <td className="xl72">{subOrder.id}</td>  
17 - <td className="xl72">{subOrder.productName}</td>  
18 - <td className="xl72">{subOrder.parameters}</td>  
19 - <td className="xl72">{subOrder.unit}</td>  
20 - <td className="xl72">{subOrder.quantity}</td>  
21 - <td className="xl72">{subOrder.notes}</td>  
22 - </tr>,  
23 - );  
24 - }  
25 -  
26 - //补充空白行,使表格不少于六行  
27 - for (let i = subOrders.length; i < 6; i++) {  
28 - columns.push(  
29 - <tr height="30" style={{ height: '15.00pt' }}>  
30 - <td height="30" style={{ height: '15.00pt' }}></td>  
31 - <td className="xl72"></td>  
32 - <td className="xl72"></td>  
33 - <td className="xl72"></td>  
34 - <td className="xl72"></td>  
35 - <td className="xl72"></td>  
36 - <td className="xl72"></td>  
37 - <td className="xl72"></td>  
38 - </tr>,  
39 - );  
40 - } 16 + const [printerType, setPrinterType] = useState('Houjie');
  17 + const { confirm } = Modal;
  18 + const handleChange = (value: string) => {
  19 + setPrinterType(value);
  20 + };
  21 + const showPropsConfirm = () => {
  22 + confirm({
  23 + title: '确认打印出货单',
  24 + icon: <ExclamationCircleFilled />,
  25 + content: '您是否已打印出货单?',
  26 + okText: '是的我已打印',
  27 + okType: 'primary',
  28 + okButtonProps: {},
  29 + cancelText: '取消',
  30 + async onOk() {
  31 + let body = {
  32 + subIds: subOrders.map((item) => {
  33 + return item.id;
  34 + }),
  35 + };
  36 + const res = await postServiceOrderPrintOrder({ data: body });
  37 + if (res.result === RESPONSE_CODE.SUCCESS) {
  38 + message.success(res.message);
  39 + onClose();
  40 + }
  41 + },
  42 + onCancel() {
  43 + message.info('取消打印出货单');
  44 + },
  45 + });
  46 + };
41 47
42 return ( 48 return (
43 <Modal 49 <Modal
@@ -54,222 +60,47 @@ export default ({ mainOrder, subOrders, onClose }) =&gt; { @@ -54,222 +60,47 @@ export default ({ mainOrder, subOrders, onClose }) =&gt; {
54 style: 60 style:
55 '@page{size:auto; margin: 0;}' + 61 '@page{size:auto; margin: 0;}' +
56 '@media print { @page {size: landscape } }', // landscape 默认横向打印 62 '@media print { @page {size: landscape } }', // landscape 默认横向打印
  63 + onPrintDialogClose: () => {
  64 + showPropsConfirm();
  65 + },
57 }); 66 });
58 67
59 - onClose(); 68 + // onClose();
60 }} 69 }}
61 onCancel={() => onClose()} 70 onCancel={() => onClose()}
62 width={1000} 71 width={1000}
63 > 72 >
64 - <div  
65 - id="printArea"  
66 - className="flex items-center justify-center bg-gray-100"  
67 - >  
68 - <div className="w-full max-w-4xl p-10 my-10 bg-white border border-gray-300">  
69 - <table  
70 - className="p-10"  
71 - width="846"  
72 - border={0}  
73 - cellPadding={0}  
74 - cellSpacing={0}  
75 - style={{  
76 - width: '423.00pt',  
77 - borderCollapse: 'collapse',  
78 - tableLayout: 'fixed',  
79 - }}  
80 - >  
81 - <col  
82 - width="25.50"  
83 - style={{ msoWidthSource: 'userset', msoWidthAlt: 544 }}  
84 - />  
85 - <col  
86 - width="52.50"  
87 - style={{ msoWidthSource: 'userset', msoWidthAlt: 1120 }}  
88 - />  
89 - <col  
90 - width="115.50"  
91 - style={{ msoWidthSource: 'userset', msoWidthAlt: 2464 }}  
92 - />  
93 - <col  
94 - width="169.50"  
95 - style={{ msoWidthSource: 'userset', msoWidthAlt: 3616 }}  
96 - />  
97 - <col  
98 - width="165"  
99 - style={{ msoWidthSource: 'userset', msoWidthAlt: 3520 }}  
100 - />  
101 - <col  
102 - width="96"  
103 - style={{ msoWidthSource: 'userset', msoWidthAlt: 2048 }}  
104 - />  
105 - <col  
106 - width="114"  
107 - style={{ msoWidthSource: 'userset', msoWidthAlt: 2432 }}  
108 - />  
109 - <col width="108" style={{ width: '54.00pt' }} />  
110 - <tr height="42" style={{ height: '21.00pt' }}>  
111 - <td height="42" style={{ height: '21.00pt' }}></td>  
112 - <td  
113 - className="xl65"  
114 - colSpan="7"  
115 - style={{ borderRight: 'none', borderBottom: 'none' }}  
116 - >  
117 - 科 路 得  
118 - </td>  
119 - </tr>  
120 - <tr height="30" style={{ height: '15.00pt' }}>  
121 - <td height="30" style={{ height: '15.00pt' }}></td>  
122 - <td  
123 - className="xl66"  
124 - colSpan="7"  
125 - style={{ borderRight: 'none', borderBottom: 'none' }}  
126 - >  
127 - 网址:www.canrd.com  
128 - </td>  
129 - </tr>  
130 - <tr height="35" style={{ height: '17.50pt' }}>  
131 - <td height="35" style={{ height: '17.50pt' }}></td>  
132 - <td  
133 - className="xl67"  
134 - colSpan="7"  
135 - style={{ borderRight: 'none', borderBottom: 'none' }}  
136 - >  
137 - 销售出货单  
138 - </td>  
139 - </tr>  
140 - <tr height="30" style={{ height: '15.00pt' }}>  
141 - <td height="30" style={{ height: '15.00pt' }}></td>  
142 - <td  
143 - className="xl69"  
144 - colSpan="4"  
145 - style={{ borderRight: 'none', borderBottom: 'none' }}  
146 - >  
147 - 单位名称:{mainOrder.institution}  
148 - </td>  
149 - <td  
150 - className="xl69"  
151 - colSpan="3"  
152 - style={{ borderRight: 'none', borderBottom: 'none' }}  
153 - >  
154 - 单号:{mainOrder.id}  
155 - </td>  
156 - </tr>  
157 - <tr height="30" style={{ height: '15.00pt' }}>  
158 - <td height="30" style={{ height: '15.00pt' }}></td>  
159 - <td  
160 - className="xl69"  
161 - colSpan="4"  
162 - style={{ borderRight: 'none', borderBottom: 'none' }}  
163 - >  
164 - 联系人:{mainOrder.customerName}  
165 - </td>  
166 - <td  
167 - className="xl69"  
168 - colSpan="3"  
169 - style={{ borderRight: 'none', borderBottom: 'none' }}  
170 - >  
171 - 开单日期:{mainOrder.createTime}  
172 - </td>  
173 - </tr>  
174 - <tr height="30" style={{ height: '15.00pt' }}>  
175 - <td height="30" style={{ height: '15.00pt' }}></td>  
176 - <td  
177 - className="xl69"  
178 - colSpan="4"  
179 - style={{ borderRight: 'none', borderBottom: 'none' }}  
180 - >  
181 - 联系电话:{mainOrder.customerContactNumber}  
182 - </td>  
183 - <td  
184 - className="xl70"  
185 - colSpan={2}  
186 - style={{ msoIgnore: 'colSpan' }}  
187 - ></td>  
188 - <td className="xl70"></td>  
189 - </tr>  
190 - <tr height="30" style={{ height: '15.00pt' }}>  
191 - <td height="30" style={{ height: '15.00pt' }}></td>  
192 - <td  
193 - className="xl69"  
194 - colSpan="7"  
195 - style={{ borderRight: 'none', borderBottom: 'none' }}  
196 - >  
197 - 送货地址:{mainOrder.customerShippingAddress}  
198 - </td>  
199 - </tr>  
200 - <tr height="30" style={{ height: '15.00pt' }}>  
201 - <td height="30" style={{ height: '15.00pt' }}></td>  
202 - <td className="xl71">序号</td>  
203 - <td className="xl71">订单号</td>  
204 - <td className="xl71">货品名称</td>  
205 - <td className="xl71">规格</td>  
206 - <td className="xl71">单位</td>  
207 - <td className="xl71">数量</td>  
208 - <td className="xl71">备注</td>  
209 - </tr> 73 + <Space direction="vertical" className="py-2">
  74 + <span>打印类型</span>
  75 + <Select
  76 + defaultValue="Houjie"
  77 + style={{ width: 'auto' }}
  78 + onChange={handleChange}
  79 + options={[
  80 + { value: 'Houjie', label: '科路得出货单' },
  81 + { value: 'Dalang', label: '大朗出货单' },
  82 + { value: 'Zhuguang', label: '烛光出货单' },
  83 + ]}
  84 + />
  85 + </Space>
  86 +
  87 + {printerType === 'Houjie' ? (
  88 + <HoujiePrinter mainOrder={mainOrder} subOrders={subOrders} />
  89 + ) : (
  90 + ''
  91 + )}
210 92
211 - {columns} 93 + {printerType === 'Zhuguang' ? (
  94 + <ZhuguangPrinter mainOrder={mainOrder} subOrders={subOrders} />
  95 + ) : (
  96 + ''
  97 + )}
212 98
213 - <tr style={{ height: '19.00pt' }}>  
214 - <td style={{ height: '19.00pt' }}></td>  
215 - <td className="xl73">销货单位</td>  
216 - <td  
217 - className="xl74"  
218 - colSpan="3"  
219 - style={{  
220 - borderRight: '0.5pt solid windowtext',  
221 - borderBottom: '0.5pt solid windowtext',  
222 - }}  
223 - >  
224 - 发货地址:广东省东莞市厚街镇锦丰路9号科路得产业园  
225 - </td>  
226 - <td className="xl73">开户银行及账号</td>  
227 - <td  
228 - className="xl74"  
229 - colSpan={2}  
230 - style={{  
231 - borderRight: '0.5pt solid windowtext',  
232 - borderBottom: '0.5pt solid windowtext',  
233 - }}  
234 - >  
235 - 招商银行股份有限公司东莞东骏路支行  
236 - <br />  
237 - 账号:769906437110802  
238 - </td>  
239 - </tr>  
240 - <tr style={{ height: 30 }}>  
241 - <td height="30" style={{ height: '15.00pt' }}></td>  
242 - <td className="xl76" colSpan={2} style={{ msoIgnore: 'colSpan' }}>  
243 - 客户签名:  
244 - </td>  
245 - <td className="xl76">核准:屠亚辉</td>  
246 - <td  
247 - className="xl78"  
248 - colSpan={2}  
249 - style={{ borderRight: 'none', borderBottom: 'none' }}  
250 - >  
251 - 业务员:Peter  
252 - </td>  
253 - <td  
254 - className="xl78"  
255 - colSpan={2}  
256 - style={{ borderRight: 'none', borderBottom: 'none' }}  
257 - >  
258 - 开单人:张玉红  
259 - </td>  
260 - </tr>  
261 - <tr style={{ display: 'none', width: 0 }}>  
262 - <td width="26" style={{ width: 13 }}></td>  
263 - <td width="53" style={{ width: 26 }}></td>  
264 - <td width="116" style={{ width: 58 }}></td>  
265 - <td width="170" style={{ width: 85 }}></td>  
266 - <td width="165" style={{ width: 83 }}></td>  
267 - <td width="96" style={{ width: 48 }}></td>  
268 - <td width="114" style={{ width: 57 }}></td>  
269 - </tr>  
270 - </table>  
271 - </div>  
272 - </div> 99 + {printerType === 'Dalang' ? (
  100 + <DalangPrinter mainOrder={mainOrder} subOrders={subOrders} />
  101 + ) : (
  102 + ''
  103 + )}
273 </Modal> 104 </Modal>
274 ); 105 );
275 }; 106 };
src/pages/OrderPrint/components/DalangPrinter.tsx 0 → 100644
  1 +import '@/pages/OrderPrint/index.less';
  2 +
  3 +export default ({ mainOrder, subOrders }) => {
  4 + console.log(subOrders);
  5 + let columns = [];
  6 + for (let i = 0; i < subOrders.length; i++) {
  7 + let subOrder = subOrders[i];
  8 + columns.push(
  9 + <tr height="30" style={{ height: '15.00pt' }}>
  10 + <td height="30" colSpan={1} style={{ height: '15.00pt' }}></td>
  11 + <td className="xl72" colSpan={3}>
  12 + {subOrder.productName}
  13 + </td>
  14 + <td className="xl72" colSpan={3}>
  15 + {subOrder.parameters}
  16 + </td>
  17 + <td className="xl72" colSpan={1}>
  18 + {subOrder.unit}
  19 + </td>
  20 + <td className="xl72" colSpan={1}>
  21 + {subOrder.quantity}
  22 + </td>
  23 + <td className="xl72" colSpan={1}>
  24 + {subOrder.unit}
  25 + </td>
  26 + <td className="xl72" colSpan={1}>
  27 + {subOrder.subOrderPayment}
  28 + </td>
  29 + <td className="xl72" colSpan={3} style={{ textAlign: 'left' }}>
  30 + {subOrder.notes}
  31 + </td>
  32 + </tr>,
  33 + );
  34 + }
  35 +
  36 + //补充空白行,使表格不少于六行
  37 + for (let i = subOrders.length; i < 6; i++) {
  38 + columns.push(
  39 + <tr height="30" style={{ height: '15.00pt' }}>
  40 + <td height="30" style={{ height: '15.00pt' }} colSpan={1}></td>
  41 + <td className="xl72" colSpan={3}></td>
  42 + <td className="xl72" colSpan={3}></td>
  43 + <td className="xl72" colSpan={1}></td>
  44 + <td className="xl72" colSpan={1}></td>
  45 + <td className="xl72" colSpan={1}></td>
  46 + <td className="xl72" colSpan={1}></td>
  47 + <td className="xl72" colSpan={3}></td>
  48 + </tr>,
  49 + );
  50 + }
  51 +
  52 + return (
  53 + <div
  54 + id="printArea"
  55 + className="flex items-center justify-center bg-gray-100"
  56 + >
  57 + <div className="w-full max-w-4xl p-10 my-10 bg-white border border-gray-300">
  58 + <table
  59 + className="p-10"
  60 + width="855"
  61 + border={0}
  62 + cellPadding={0}
  63 + cellSpacing={0}
  64 + style={{
  65 + width: '423.00pt',
  66 + borderCollapse: 'collapse',
  67 + tableLayout: 'fixed',
  68 + }}
  69 + >
  70 + <col width="57" />
  71 + <col width="57" />
  72 + <col width="57" />
  73 + <col width="57" />
  74 + <col width="57" />
  75 + <col width="57" />
  76 + <col width="57" />
  77 + <col width="57" />
  78 + <col width="57" />
  79 + <col width="57" />
  80 + <col width="57" />
  81 + <col width="57" />
  82 + <col width="57" />
  83 + <col width="57" />
  84 + <col width="57" />
  85 +
  86 + <tr height="42" style={{ height: '21.00pt' }}>
  87 + <td height="42" colSpan={5} style={{ height: '21.00pt' }}></td>
  88 + <td
  89 + className="xl65"
  90 + colSpan={5}
  91 + style={{ borderRight: 'none', borderBottom: 'none' }}
  92 + >
  93 + 科 路 得
  94 + </td>
  95 + <td height="42" colSpan={5} style={{ height: '21.00pt' }}></td>
  96 + </tr>
  97 + <tr height="30" style={{ height: '15.00pt' }}>
  98 + <td height="30" colSpan={3} style={{ height: '15.00pt' }}></td>
  99 + <td
  100 + className="xl66"
  101 + colSpan={5}
  102 + style={{ borderRight: 'none', borderBottom: 'none' }}
  103 + >
  104 + 网址:www.canrd.com
  105 + </td>
  106 + <td
  107 + className="xl66"
  108 + colSpan="4"
  109 + style={{
  110 + borderRight: 'none',
  111 + borderBottom: 'none',
  112 + textAlign: 'left',
  113 + }}
  114 + >
  115 + QQ:2902385824
  116 + </td>
  117 + </tr>
  118 + <tr height="35" style={{ height: '17.50pt' }}>
  119 + <td height="35" colSpan={5} style={{ height: '17.50pt' }}></td>
  120 + <td
  121 + className="xl67"
  122 + colSpan={5}
  123 + style={{ borderRight: 'none', borderBottom: 'none' }}
  124 + >
  125 + 销售出货单
  126 + </td>
  127 + <td height="35" colSpan={5} style={{ height: '17.50pt' }}></td>
  128 + </tr>
  129 + <tr height="30" style={{ height: '15.00pt' }}>
  130 + <td
  131 + className="xl69"
  132 + colSpan={1}
  133 + style={{ borderRight: 'none', borderBottom: 'none' }}
  134 + ></td>
  135 + <td
  136 + className="xl69"
  137 + colSpan="1"
  138 + style={{ borderRight: 'none', borderBottom: 'none' }}
  139 + >
  140 + 单位名称:
  141 + </td>
  142 + <td
  143 + className="xl69"
  144 + colSpan="4"
  145 + style={{ borderRight: 'none', borderBottom: 'none' }}
  146 + >
  147 + {mainOrder.institution}
  148 + </td>
  149 + <td
  150 + className="xl69"
  151 + colSpan={2}
  152 + style={{ borderRight: 'none', borderBottom: 'none' }}
  153 + ></td>
  154 + <td
  155 + className="xl69"
  156 + colSpan={1}
  157 + style={{ borderRight: 'none', borderBottom: 'none' }}
  158 + >
  159 + 单号:
  160 + </td>
  161 + <td
  162 + className="xl69"
  163 + colSpan={6}
  164 + style={{ borderRight: 'none', borderBottom: 'none' }}
  165 + >
  166 + {mainOrder.id}
  167 + </td>
  168 + </tr>
  169 + <tr height="30" style={{ height: '15.00pt' }}>
  170 + <td height="30" colSpan={1} style={{ height: '15.00pt' }}></td>
  171 + <td
  172 + className="xl69"
  173 + colSpan={1}
  174 + style={{ borderRight: 'none', borderBottom: 'none' }}
  175 + >
  176 + 联系人:
  177 + </td>
  178 + <td
  179 + className="xl69"
  180 + colSpan={4}
  181 + style={{ borderRight: 'none', borderBottom: 'none' }}
  182 + >
  183 + {mainOrder.customerName}
  184 + </td>
  185 + <td height="30" colSpan={2} style={{ height: '15.00pt' }}></td>
  186 + <td
  187 + className="xl69"
  188 + colSpan={1}
  189 + style={{ borderRight: 'none', borderBottom: 'none' }}
  190 + >
  191 + 开单日期:
  192 + </td>
  193 + <td
  194 + className="xl69"
  195 + colSpan={6}
  196 + style={{ borderRight: 'none', borderBottom: 'none' }}
  197 + >
  198 + {mainOrder.createTime}
  199 + </td>
  200 + </tr>
  201 + <tr height="30" style={{ height: '15.00pt' }}>
  202 + <td height="30" colSpan={1} style={{ height: '15.00pt' }}></td>
  203 + <td
  204 + className="xl69"
  205 + colSpan={1}
  206 + style={{ borderRight: 'none', borderBottom: 'none' }}
  207 + >
  208 + 联系电话:
  209 + </td>
  210 + <td className="xl70" colSpan={4} style={{ msoIgnore: 'colSpan' }}>
  211 + {mainOrder.customerContactNumber}
  212 + </td>
  213 + <td className="xl70"></td>
  214 + </tr>
  215 + <tr height="30" style={{ height: '15.00pt' }}>
  216 + <td height="30" colSpan={1} style={{ height: '15.00pt' }}></td>
  217 + <td
  218 + className="xl69"
  219 + colSpan={1}
  220 + style={{ borderRight: 'none', borderBottom: 'none' }}
  221 + >
  222 + 送货地址:
  223 + </td>
  224 + <td
  225 + className="xl69"
  226 + colSpan={4}
  227 + style={{ borderRight: 'none', borderBottom: 'none' }}
  228 + >
  229 + {mainOrder.customerShippingAddress}
  230 + </td>
  231 + </tr>
  232 + <tr height="30" style={{ height: '15.00pt' }}>
  233 + <td height="30" colSpan={1} style={{ height: '15.00pt' }}></td>
  234 + <td className="xl71" colSpan={3}>
  235 + 货品名称
  236 + </td>
  237 + <td className="xl71" colSpan={3}>
  238 + 规格
  239 + </td>
  240 + <td className="xl71" colSpan={1}>
  241 + 单位
  242 + </td>
  243 + <td className="xl71" colSpan={1}>
  244 + 数量
  245 + </td>
  246 + <td className="xl71" colSpan={1}>
  247 + 单价
  248 + </td>
  249 + <td className="xl71" colSpan={1}>
  250 + 货款
  251 + </td>
  252 + <td className="xl71" colSpan={3}>
  253 + 备注
  254 + </td>
  255 + </tr>
  256 +
  257 + {columns}
  258 +
  259 + <tr style={{ height: '19.00pt' }}>
  260 + <td height="30" colSpan={1} style={{ height: '15.00pt' }}></td>
  261 + <td
  262 + className="xl74"
  263 + colSpan={3}
  264 + style={{
  265 + borderRight: '0.5pt solid windowtext',
  266 + borderBottom: '0.5pt solid windowtext',
  267 + }}
  268 + >
  269 + 合计
  270 + </td>
  271 + <td
  272 + className="xl74"
  273 + colSpan={10}
  274 + style={{
  275 + textAlign: 'left',
  276 + borderRight: '0.5pt solid windowtext',
  277 + borderBottom: '0.5pt solid windowtext',
  278 + }}
  279 + >
  280 + 199
  281 + </td>
  282 + </tr>
  283 +
  284 + <tr style={{ height: '19.00pt' }}>
  285 + <td height="30" colSpan={1} style={{ height: '15.00pt' }}></td>
  286 + <td
  287 + className="xl74"
  288 + colSpan={3}
  289 + style={{
  290 + borderRight: '0.5pt solid windowtext',
  291 + borderBottom: '0.5pt solid windowtext',
  292 + }}
  293 + >
  294 + 摘要
  295 + </td>
  296 + <td
  297 + className="xl74"
  298 + colSpan={10}
  299 + style={{
  300 + textAlign: 'left',
  301 + borderRight: '0.5pt solid windowtext',
  302 + borderBottom: '0.5pt solid windowtext',
  303 + }}
  304 + ></td>
  305 + </tr>
  306 +
  307 + <tr style={{ height: '19.00pt' }}>
  308 + <td style={{ height: '19.00pt' }}></td>
  309 + <td className="xl73">销货单位</td>
  310 + <td
  311 + className="xl74"
  312 + colSpan={2}
  313 + style={{
  314 + borderRight: '0.5pt solid windowtext',
  315 + borderBottom: '0.5pt solid windowtext',
  316 + }}
  317 + >
  318 + 发货地址
  319 + </td>
  320 + <td
  321 + className="xl74"
  322 + colSpan={4}
  323 + style={{
  324 + textAlign: 'left',
  325 + borderRight: '0.5pt solid windowtext',
  326 + borderBottom: '0.5pt solid windowtext',
  327 + }}
  328 + >
  329 + 广东省东莞市大朗镇松木山祥明路38号
  330 + </td>
  331 + <td className="xl73" colSpan={2}>
  332 + 开户银行及账号
  333 + </td>
  334 + <td
  335 + className="xl74"
  336 + colSpan={4}
  337 + style={{
  338 + textAlign: 'left',
  339 + borderRight: '0.5pt solid windowtext',
  340 + borderBottom: '0.5pt solid windowtext',
  341 + }}
  342 + >
  343 + 招商银行股份有限公司东美东骏路支行
  344 + <br />
  345 + 769906437110802
  346 + </td>
  347 + </tr>
  348 +
  349 + <tr style={{ height: 30 }}>
  350 + <td height="30" style={{ height: '15.00pt' }}></td>
  351 + <td className="xl76" colSpan={3} style={{ msoIgnore: 'colSpan' }}>
  352 + 客户签名:
  353 + </td>
  354 + <td className="xl76" colSpan={3}>
  355 + 仓管员:Luo YH
  356 + </td>
  357 + <td
  358 + className="xl78"
  359 + colSpan={4}
  360 + style={{ borderRight: 'none', borderBottom: 'none' }}
  361 + >
  362 + 业务员:Linda
  363 + </td>
  364 + <td
  365 + className="xl78"
  366 + colSpan={2}
  367 + style={{ borderRight: 'none', borderBottom: 'none' }}
  368 + >
  369 + 开单人:真丽娟
  370 + </td>
  371 + </tr>
  372 + <tr style={{ display: 'none', width: 0 }}>
  373 + <td width="26" style={{ width: 13 }}></td>
  374 + <td width="53" style={{ width: 26 }}></td>
  375 + <td width="116" style={{ width: 58 }}></td>
  376 + <td width="170" style={{ width: 85 }}></td>
  377 + <td width="165" style={{ width: 83 }}></td>
  378 + <td width="96" style={{ width: 48 }}></td>
  379 + <td width="114" style={{ width: 57 }}></td>
  380 + </tr>
  381 + </table>
  382 + </div>
  383 + </div>
  384 + );
  385 +};
src/pages/OrderPrint/components/HoujiePrinter.tsx 0 → 100644
  1 +import '@/pages/OrderPrint/index.less';
  2 +
  3 +export default ({ mainOrder, subOrders }) => {
  4 + console.log(subOrders);
  5 + let columns = [];
  6 + for (let i = 0; i < subOrders.length; i++) {
  7 + let subOrder = subOrders[i];
  8 + columns.push(
  9 + <tr height="30" style={{ height: '15.00pt' }}>
  10 + <td height="30" style={{ height: '15.00pt' }}></td>
  11 + <td className="xl72">{i + 1}</td>
  12 + <td className="xl72">{subOrder.id}</td>
  13 + <td className="xl72">{subOrder.productName}</td>
  14 + <td className="xl72">{subOrder.parameters}</td>
  15 + <td className="xl72">{subOrder.unit}</td>
  16 + <td className="xl72">{subOrder.quantity}</td>
  17 + <td className="xl72">{subOrder.notes}</td>
  18 + </tr>,
  19 + );
  20 + }
  21 +
  22 + //补充空白行,使表格不少于六行
  23 + for (let i = subOrders.length; i < 6; i++) {
  24 + columns.push(
  25 + <tr height="30" style={{ height: '15.00pt' }}>
  26 + <td height="30" style={{ height: '15.00pt' }}></td>
  27 + <td className="xl72"></td>
  28 + <td className="xl72"></td>
  29 + <td className="xl72"></td>
  30 + <td className="xl72"></td>
  31 + <td className="xl72"></td>
  32 + <td className="xl72"></td>
  33 + <td className="xl72"></td>
  34 + </tr>,
  35 + );
  36 + }
  37 +
  38 + return (
  39 + <div
  40 + id="printArea"
  41 + className="flex items-center justify-center bg-gray-100"
  42 + >
  43 + <div className="w-full max-w-4xl p-10 my-10 bg-white border border-gray-300">
  44 + <table
  45 + className="p-10"
  46 + width="846"
  47 + border={0}
  48 + cellPadding={0}
  49 + cellSpacing={0}
  50 + style={{
  51 + width: '423.00pt',
  52 + borderCollapse: 'collapse',
  53 + tableLayout: 'fixed',
  54 + }}
  55 + >
  56 + <col
  57 + width="25.50"
  58 + style={{ msoWidthSource: 'userset', msoWidthAlt: 544 }}
  59 + />
  60 + <col
  61 + width="52.50"
  62 + style={{ msoWidthSource: 'userset', msoWidthAlt: 1120 }}
  63 + />
  64 + <col
  65 + width="151.50"
  66 + style={{ msoWidthSource: 'userset', msoWidthAlt: 2464 }}
  67 + />
  68 + <col
  69 + width="169.50"
  70 + style={{ msoWidthSource: 'userset', msoWidthAlt: 3616 }}
  71 + />
  72 + <col
  73 + width="165"
  74 + style={{ msoWidthSource: 'userset', msoWidthAlt: 3520 }}
  75 + />
  76 + <col
  77 + width="60"
  78 + style={{ msoWidthSource: 'userset', msoWidthAlt: 2048 }}
  79 + />
  80 + <col
  81 + width="114"
  82 + style={{ msoWidthSource: 'userset', msoWidthAlt: 2432 }}
  83 + />
  84 + <col width="108" style={{ width: '54.00pt' }} />
  85 + <tr height="42" style={{ height: '21.00pt' }}>
  86 + <td height="42" style={{ height: '21.00pt' }}></td>
  87 + <td
  88 + className="xl65"
  89 + colSpan="7"
  90 + style={{ borderRight: 'none', borderBottom: 'none' }}
  91 + >
  92 + 科 路 得
  93 + </td>
  94 + </tr>
  95 + <tr height="30" style={{ height: '15.00pt' }}>
  96 + <td height="30" style={{ height: '15.00pt' }}></td>
  97 + <td
  98 + className="xl66"
  99 + colSpan="7"
  100 + style={{ borderRight: 'none', borderBottom: 'none' }}
  101 + >
  102 + 网址:www.canrd.com
  103 + </td>
  104 + </tr>
  105 + <tr height="35" style={{ height: '17.50pt' }}>
  106 + <td height="35" style={{ height: '17.50pt' }}></td>
  107 + <td
  108 + className="xl67"
  109 + colSpan="7"
  110 + style={{ borderRight: 'none', borderBottom: 'none' }}
  111 + >
  112 + 销售出货单
  113 + </td>
  114 + </tr>
  115 + <tr height="30" style={{ height: '15.00pt' }}>
  116 + <td height="30" style={{ height: '15.00pt' }}></td>
  117 + <td
  118 + className="xl69"
  119 + colSpan="4"
  120 + style={{ borderRight: 'none', borderBottom: 'none' }}
  121 + >
  122 + 单位名称:{mainOrder.institution}
  123 + </td>
  124 + <td
  125 + className="xl69"
  126 + colSpan="3"
  127 + style={{ borderRight: 'none', borderBottom: 'none' }}
  128 + >
  129 + 单号:{mainOrder.id}
  130 + </td>
  131 + </tr>
  132 + <tr height="30" style={{ height: '15.00pt' }}>
  133 + <td height="30" style={{ height: '15.00pt' }}></td>
  134 + <td
  135 + className="xl69"
  136 + colSpan="4"
  137 + style={{ borderRight: 'none', borderBottom: 'none' }}
  138 + >
  139 + 联系人:{mainOrder.customerName}
  140 + </td>
  141 + <td
  142 + className="xl69"
  143 + colSpan="3"
  144 + style={{ borderRight: 'none', borderBottom: 'none' }}
  145 + >
  146 + 开单日期:{mainOrder.createTime}
  147 + </td>
  148 + </tr>
  149 + <tr height="30" style={{ height: '15.00pt' }}>
  150 + <td height="30" style={{ height: '15.00pt' }}></td>
  151 + <td
  152 + className="xl69"
  153 + colSpan="4"
  154 + style={{ borderRight: 'none', borderBottom: 'none' }}
  155 + >
  156 + 联系电话:{mainOrder.customerContactNumber}
  157 + </td>
  158 + <td
  159 + className="xl70"
  160 + colSpan={2}
  161 + style={{ msoIgnore: 'colSpan' }}
  162 + ></td>
  163 + <td className="xl70"></td>
  164 + </tr>
  165 + <tr height="30" style={{ height: '15.00pt' }}>
  166 + <td height="30" style={{ height: '15.00pt' }}></td>
  167 + <td
  168 + className="xl69"
  169 + colSpan="7"
  170 + style={{ borderRight: 'none', borderBottom: 'none' }}
  171 + >
  172 + 送货地址:{mainOrder.customerShippingAddress}
  173 + </td>
  174 + </tr>
  175 + <tr height="30" style={{ height: '15.00pt' }}>
  176 + <td height="30" style={{ height: '15.00pt' }}></td>
  177 + <td className="xl71">序号</td>
  178 + <td className="xl71">订单号</td>
  179 + <td className="xl71">货品名称</td>
  180 + <td className="xl71">规格</td>
  181 + <td className="xl71">单位</td>
  182 + <td className="xl71">数量</td>
  183 + <td className="xl71">备注</td>
  184 + </tr>
  185 +
  186 + {columns}
  187 +
  188 + <tr style={{ height: '19.00pt' }}>
  189 + <td style={{ height: '19.00pt' }}></td>
  190 + <td className="xl73">销货单位</td>
  191 + <td
  192 + className="xl74"
  193 + colSpan="3"
  194 + style={{
  195 + borderRight: '0.5pt solid windowtext',
  196 + borderBottom: '0.5pt solid windowtext',
  197 + }}
  198 + >
  199 + 发货地址:广东省东莞市厚街镇锦丰路9号科路得产业园
  200 + </td>
  201 + <td className="xl73">开户银行及账号</td>
  202 + <td
  203 + className="xl74"
  204 + colSpan={2}
  205 + style={{
  206 + borderRight: '0.5pt solid windowtext',
  207 + borderBottom: '0.5pt solid windowtext',
  208 + }}
  209 + >
  210 + 招商银行股份有限公司东莞东骏路支行
  211 + <br />
  212 + 账号:769906437110802
  213 + </td>
  214 + </tr>
  215 + <tr style={{ height: 30 }}>
  216 + <td height="30" style={{ height: '15.00pt' }}></td>
  217 + <td className="xl76" colSpan={2} style={{ msoIgnore: 'colSpan' }}>
  218 + 客户签名:
  219 + </td>
  220 + <td className="xl76">核准:屠亚辉</td>
  221 + <td
  222 + className="xl78"
  223 + colSpan={2}
  224 + style={{ borderRight: 'none', borderBottom: 'none' }}
  225 + >
  226 + 业务员:Peter
  227 + </td>
  228 + <td
  229 + className="xl78"
  230 + colSpan={2}
  231 + style={{ borderRight: 'none', borderBottom: 'none' }}
  232 + >
  233 + 开单人:张玉红
  234 + </td>
  235 + </tr>
  236 + <tr style={{ display: 'none', width: 0 }}>
  237 + <td width="26" style={{ width: 13 }}></td>
  238 + <td width="53" style={{ width: 26 }}></td>
  239 + <td width="116" style={{ width: 58 }}></td>
  240 + <td width="170" style={{ width: 85 }}></td>
  241 + <td width="165" style={{ width: 83 }}></td>
  242 + <td width="96" style={{ width: 48 }}></td>
  243 + <td width="114" style={{ width: 57 }}></td>
  244 + </tr>
  245 + </table>
  246 + </div>
  247 + </div>
  248 + );
  249 +};
src/pages/OrderPrint/components/ZhuguangPrinter.tsx 0 → 100644
  1 +import '@/pages/OrderPrint/index.less';
  2 +
  3 +export default ({ mainOrder, subOrders }) => {
  4 + console.log(subOrders);
  5 + let columns = [];
  6 + for (let i = 0; i < subOrders.length; i++) {
  7 + let subOrder = subOrders[i];
  8 + columns.push(
  9 + <tr height="30" style={{ height: '15.00pt' }}>
  10 + <td height="30" colSpan={1} style={{ height: '15.00pt' }}></td>
  11 + <td className="xl72" colSpan={3}>
  12 + {subOrder.productName}
  13 + </td>
  14 + <td className="xl72" colSpan={3}>
  15 + {subOrder.parameters}
  16 + </td>
  17 + <td className="xl72" colSpan={2}>
  18 + {subOrder.quantity}
  19 + </td>
  20 + <td className="xl72" colSpan={1}>
  21 + {subOrder.unit}
  22 + </td>
  23 + <td className="xl72" colSpan={4} style={{ textAlign: 'left' }}>
  24 + {subOrder.notes}
  25 + </td>
  26 + </tr>,
  27 + );
  28 + }
  29 +
  30 + //补充空白行,使表格不少于六行
  31 + for (let i = subOrders.length; i < 6; i++) {
  32 + columns.push(
  33 + <tr height="30" style={{ height: '15.00pt' }}>
  34 + <td height="30" style={{ height: '15.00pt' }} colSpan={1}></td>
  35 + <td className="xl72" colSpan={3}></td>
  36 + <td className="xl72" colSpan={3}></td>
  37 + <td className="xl72" colSpan={2}></td>
  38 + <td className="xl72" colSpan={1}></td>
  39 + <td className="xl72" colSpan={4}></td>
  40 + </tr>,
  41 + );
  42 + }
  43 +
  44 + return (
  45 + <div
  46 + id="printArea"
  47 + className="flex items-center justify-center bg-gray-100"
  48 + >
  49 + <div className="w-full max-w-4xl p-10 my-10 bg-white border border-gray-300">
  50 + <table
  51 + className="p-10"
  52 + width="855"
  53 + border={0}
  54 + cellPadding={0}
  55 + cellSpacing={0}
  56 + style={{
  57 + width: '423.00pt',
  58 + borderCollapse: 'collapse',
  59 + tableLayout: 'fixed',
  60 + }}
  61 + >
  62 + <col width="57" />
  63 + <col width="57" />
  64 + <col width="57" />
  65 + <col width="57" />
  66 + <col width="57" />
  67 + <col width="57" />
  68 + <col width="57" />
  69 + <col width="57" />
  70 + <col width="57" />
  71 + <col width="57" />
  72 + <col width="57" />
  73 + <col width="57" />
  74 + <col width="57" />
  75 + <col width="57" />
  76 + <col width="57" />
  77 +
  78 + <tr height="42" style={{ height: '21.00pt' }}>
  79 + <td height="42" colSpan={5} style={{ height: '21.00pt' }}></td>
  80 + <td
  81 + className="xl65"
  82 + colSpan={5}
  83 + style={{ borderRight: 'none', borderBottom: 'none' }}
  84 + >
  85 + 广东烛光新能源科技有限公司
  86 + </td>
  87 + <td height="42" colSpan={5} style={{ height: '21.00pt' }}></td>
  88 + </tr>
  89 + <tr height="30" style={{ height: '15.00pt' }}>
  90 + <td height="30" colSpan={3} style={{ height: '15.00pt' }}></td>
  91 + <td
  92 + className="xl66"
  93 + colSpan={5}
  94 + style={{ borderRight: 'none', borderBottom: 'none' }}
  95 + >
  96 + 网址:www.canrd.com
  97 + </td>
  98 + <td
  99 + className="xl66"
  100 + colSpan="4"
  101 + style={{
  102 + borderRight: 'none',
  103 + borderBottom: 'none',
  104 + textAlign: 'left',
  105 + }}
  106 + >
  107 + QQ:2902385824
  108 + </td>
  109 + </tr>
  110 + <tr height="35" style={{ height: '17.50pt' }}>
  111 + <td height="35" colSpan={5} style={{ height: '17.50pt' }}></td>
  112 + <td
  113 + className="xl67"
  114 + colSpan={5}
  115 + style={{ borderRight: 'none', borderBottom: 'none' }}
  116 + >
  117 + 销售出货单
  118 + </td>
  119 + <td height="35" colSpan={5} style={{ height: '17.50pt' }}></td>
  120 + </tr>
  121 + <tr height="30" style={{ height: '15.00pt' }}>
  122 + <td
  123 + className="xl69"
  124 + colSpan={1}
  125 + style={{ borderRight: 'none', borderBottom: 'none' }}
  126 + ></td>
  127 + <td
  128 + className="xl69"
  129 + colSpan="1"
  130 + style={{ borderRight: 'none', borderBottom: 'none' }}
  131 + >
  132 + 单位名称:
  133 + </td>
  134 + <td
  135 + className="xl69"
  136 + colSpan="4"
  137 + style={{ borderRight: 'none', borderBottom: 'none' }}
  138 + >
  139 + {mainOrder.institution}
  140 + </td>
  141 + <td
  142 + className="xl69"
  143 + colSpan={2}
  144 + style={{ borderRight: 'none', borderBottom: 'none' }}
  145 + ></td>
  146 + <td
  147 + className="xl69"
  148 + colSpan={1}
  149 + style={{ borderRight: 'none', borderBottom: 'none' }}
  150 + >
  151 + 单号:
  152 + </td>
  153 + <td
  154 + className="xl69"
  155 + colSpan={6}
  156 + style={{ borderRight: 'none', borderBottom: 'none' }}
  157 + >
  158 + {mainOrder.id}
  159 + </td>
  160 + </tr>
  161 + <tr height="30" style={{ height: '15.00pt' }}>
  162 + <td height="30" colSpan={1} style={{ height: '15.00pt' }}></td>
  163 + <td
  164 + className="xl69"
  165 + colSpan={1}
  166 + style={{ borderRight: 'none', borderBottom: 'none' }}
  167 + >
  168 + 联系人:
  169 + </td>
  170 + <td
  171 + className="xl69"
  172 + colSpan={4}
  173 + style={{ borderRight: 'none', borderBottom: 'none' }}
  174 + >
  175 + {mainOrder.customerName}
  176 + </td>
  177 + <td height="30" colSpan={2} style={{ height: '15.00pt' }}></td>
  178 + <td
  179 + className="xl69"
  180 + colSpan={1}
  181 + style={{ borderRight: 'none', borderBottom: 'none' }}
  182 + >
  183 + 开单日期:
  184 + </td>
  185 + <td
  186 + className="xl69"
  187 + colSpan={6}
  188 + style={{ borderRight: 'none', borderBottom: 'none' }}
  189 + >
  190 + {mainOrder.createTime}
  191 + </td>
  192 + </tr>
  193 + <tr height="30" style={{ height: '15.00pt' }}>
  194 + <td height="30" colSpan={1} style={{ height: '15.00pt' }}></td>
  195 + <td
  196 + className="xl69"
  197 + colSpan={1}
  198 + style={{ borderRight: 'none', borderBottom: 'none' }}
  199 + >
  200 + 联系电话:
  201 + </td>
  202 + <td className="xl70" colSpan={4} style={{ msoIgnore: 'colSpan' }}>
  203 + {mainOrder.customerContactNumber}
  204 + </td>
  205 + <td className="xl70"></td>
  206 + </tr>
  207 + <tr height="30" style={{ height: '15.00pt' }}>
  208 + <td height="30" colSpan={1} style={{ height: '15.00pt' }}></td>
  209 + <td
  210 + className="xl69"
  211 + colSpan={1}
  212 + style={{ borderRight: 'none', borderBottom: 'none' }}
  213 + >
  214 + 送货地址:
  215 + </td>
  216 + <td
  217 + className="xl69"
  218 + colSpan={4}
  219 + style={{ borderRight: 'none', borderBottom: 'none' }}
  220 + >
  221 + {mainOrder.customerShippingAddress}
  222 + </td>
  223 + </tr>
  224 + <tr height="30" style={{ height: '15.00pt' }}>
  225 + <td height="30" colSpan={1} style={{ height: '15.00pt' }}></td>
  226 + <td className="xl71" colSpan={3}>
  227 + 货品名称
  228 + </td>
  229 + <td className="xl71" colSpan={3}>
  230 + 规格
  231 + </td>
  232 + <td className="xl71" colSpan={2}>
  233 + 单位
  234 + </td>
  235 + <td className="xl71" colSpan={1}>
  236 + 数量
  237 + </td>
  238 + <td className="xl71" colSpan={4}>
  239 + 备注
  240 + </td>
  241 + </tr>
  242 +
  243 + {columns}
  244 +
  245 + <tr style={{ height: '19.00pt' }}>
  246 + <td height="30" colSpan={1} style={{ height: '15.00pt' }}></td>
  247 + <td
  248 + className="xl74"
  249 + colSpan={3}
  250 + style={{
  251 + borderRight: '0.5pt solid windowtext',
  252 + borderBottom: '0.5pt solid windowtext',
  253 + }}
  254 + >
  255 + 合计
  256 + </td>
  257 + <td
  258 + className="xl74"
  259 + colSpan={10}
  260 + style={{
  261 + textAlign: 'left',
  262 + borderRight: '0.5pt solid windowtext',
  263 + borderBottom: '0.5pt solid windowtext',
  264 + }}
  265 + >
  266 + 199
  267 + </td>
  268 + </tr>
  269 +
  270 + <tr style={{ height: '19.00pt' }}>
  271 + <td height="30" colSpan={1} style={{ height: '15.00pt' }}></td>
  272 + <td
  273 + className="xl74"
  274 + colSpan={3}
  275 + style={{
  276 + borderRight: '0.5pt solid windowtext',
  277 + borderBottom: '0.5pt solid windowtext',
  278 + }}
  279 + >
  280 + 摘要
  281 + </td>
  282 + <td
  283 + className="xl74"
  284 + colSpan={10}
  285 + style={{
  286 + textAlign: 'left',
  287 + borderRight: '0.5pt solid windowtext',
  288 + borderBottom: '0.5pt solid windowtext',
  289 + }}
  290 + ></td>
  291 + </tr>
  292 +
  293 + <tr style={{ height: '19.00pt' }}>
  294 + <td style={{ height: '19.00pt' }}></td>
  295 + <td className="xl73">销货单位</td>
  296 + <td
  297 + className="xl74"
  298 + colSpan={2}
  299 + style={{
  300 + borderRight: '0.5pt solid windowtext',
  301 + borderBottom: '0.5pt solid windowtext',
  302 + }}
  303 + >
  304 + 发货地址
  305 + </td>
  306 + <td
  307 + className="xl74"
  308 + colSpan={4}
  309 + style={{
  310 + textAlign: 'left',
  311 + borderRight: '0.5pt solid windowtext',
  312 + borderBottom: '0.5pt solid windowtext',
  313 + }}
  314 + >
  315 + 广东省东莞市大朗镇松木山祥明路38号
  316 + </td>
  317 + <td className="xl73" colSpan={2}>
  318 + 开户银行及账号
  319 + </td>
  320 + <td
  321 + className="xl74"
  322 + colSpan={4}
  323 + style={{
  324 + textAlign: 'left',
  325 + borderRight: '0.5pt solid windowtext',
  326 + borderBottom: '0.5pt solid windowtext',
  327 + }}
  328 + >
  329 + 广发银行股份有限公司东莞松山湖支行
  330 + <br />
  331 + 106016516010004141
  332 + </td>
  333 + </tr>
  334 +
  335 + <tr style={{ height: 30 }}>
  336 + <td height="30" style={{ height: '15.00pt' }}></td>
  337 + <td className="xl76" colSpan={3} style={{ msoIgnore: 'colSpan' }}>
  338 + 客户签名:
  339 + </td>
  340 + <td className="xl76" colSpan={3}>
  341 + 仓管员:Luo YH
  342 + </td>
  343 + <td
  344 + className="xl78"
  345 + colSpan={4}
  346 + style={{ borderRight: 'none', borderBottom: 'none' }}
  347 + >
  348 + 业务员:Tina
  349 + </td>
  350 + <td
  351 + className="xl78"
  352 + colSpan={2}
  353 + style={{ borderRight: 'none', borderBottom: 'none' }}
  354 + >
  355 + 开单人:真丽娟
  356 + </td>
  357 + </tr>
  358 + <tr style={{ display: 'none', width: 0 }}>
  359 + <td width="26" style={{ width: 13 }}></td>
  360 + <td width="53" style={{ width: 26 }}></td>
  361 + <td width="116" style={{ width: 58 }}></td>
  362 + <td width="170" style={{ width: 85 }}></td>
  363 + <td width="165" style={{ width: 83 }}></td>
  364 + <td width="96" style={{ width: 48 }}></td>
  365 + <td width="114" style={{ width: 57 }}></td>
  366 + </tr>
  367 + </table>
  368 + </div>
  369 + </div>
  370 + );
  371 +};
src/pages/OrderPrint/index.less
@@ -1009,6 +1009,7 @@ td { @@ -1009,6 +1009,7 @@ td {
1009 font-size: 8pt; 1009 font-size: 8pt;
1010 //mso-font-charset: 134; 1010 //mso-font-charset: 134;
1011 border: 0.5pt solid windowtext; 1011 border: 0.5pt solid windowtext;
  1012 + white-space: normal;
1012 } 1013 }
1013 1014
1014 .xl73 { 1015 .xl73 {
src/services/definition.ts
@@ -365,30 +365,6 @@ export interface DictionaryVO { @@ -365,30 +365,6 @@ export interface DictionaryVO {
365 sort?: number; 365 sort?: number;
366 } 366 }
367 367
368 -export interface InvoicingDto {  
369 - /**  
370 - * @description  
371 - * 收款时间  
372 - * @format date-time  
373 - * @example  
374 - * 2023-11-12 16:12  
375 - */  
376 - collectMoneyTime?: string;  
377 - /**  
378 - * @description  
379 - * 开票时间  
380 - * @format date-time  
381 - * @example  
382 - * 2023-11-12 16:12  
383 - */  
384 - invoicingTime?: string;  
385 - /**  
386 - * @description  
387 - * 子订单id集合  
388 - */  
389 - subIds?: Array<number>;  
390 -}  
391 -  
392 export interface ModelAndView { 368 export interface ModelAndView {
393 empty?: boolean; 369 empty?: boolean;
394 model?: any; 370 model?: any;
@@ -509,15 +485,6 @@ export interface OrderBaseInfoVO { @@ -509,15 +485,6 @@ export interface OrderBaseInfoVO {
509 smallPicUrl?: string; 485 smallPicUrl?: string;
510 } 486 }
511 487
512 -export interface OrderCancelDto {  
513 - /**  
514 - * @description  
515 - * 订单id  
516 - * @format int64  
517 - */  
518 - id?: number;  
519 -}  
520 -  
521 export interface OrderCompletionReportFieldVO { 488 export interface OrderCompletionReportFieldVO {
522 ideaManualRate?: string; 489 ideaManualRate?: string;
523 ideaSource?: string; 490 ideaSource?: string;
@@ -782,110 +749,15 @@ export interface View { @@ -782,110 +749,15 @@ export interface View {
782 export interface Dto { 749 export interface Dto {
783 /** 750 /**
784 * @description 751 * @description
785 - * 银行名称  
786 - */  
787 - bank?: string;  
788 - /**  
789 - * @description  
790 - * 开始时间  
791 - * @format date-time  
792 - * @example  
793 - * 2023-11-11 10:10  
794 - */  
795 - beginTime?: string;  
796 - /** @format int32 */  
797 - current?: number;  
798 - /**  
799 - * @description  
800 - * 收货人联系手机号  
801 - */  
802 - customerContactNumber?: string;  
803 - /**  
804 - * @description  
805 - * 收货人姓名  
806 - */  
807 - customerName?: string;  
808 - /**  
809 - * @description  
810 - * 收货人地址信息  
811 - */  
812 - customerShippingAddress?: string;  
813 - /**  
814 - * @description  
815 - * 结束时间 752 + * 收款时间
816 * @format date-time 753 * @format date-time
817 * @example 754 * @example
818 - * 2023-11-11 10:20  
819 - */  
820 - endTime?: string;  
821 - /**  
822 - * @description  
823 - * 主订单号id  
824 - * @format int64  
825 - */  
826 - id?: number;  
827 - /**  
828 - * @description  
829 - * 单位  
830 - */  
831 - institution?: string;  
832 - /**  
833 - * @description  
834 - * 单位联系人  
835 - */  
836 - institutionContactName?: string;  
837 - /**  
838 - * @description  
839 - * 开票状态  
840 - */  
841 - invoicingStatus?: string;  
842 - /**  
843 - * @description  
844 - * 物流方式  
845 - */  
846 - logisticsMethod?: string;  
847 - /**  
848 - * @description  
849 - * 订单状态  
850 - */  
851 - orderStatus?: string;  
852 - /** @format int32 */  
853 - pageSize?: number;  
854 - /**  
855 - * @description  
856 - * 商品参数  
857 - */  
858 - parameters?: string;  
859 - /**  
860 - * @description  
861 - * 支付渠道  
862 - */  
863 - paymentChannel?: string;  
864 - /**  
865 - * @description  
866 - * 支付方式  
867 - */  
868 - paymentMethod?: string;  
869 - /**  
870 - * @description  
871 - * 支付流水号  
872 - */  
873 - paymentTransactionId?: string;  
874 - /**  
875 - * @description  
876 - * 商品所属事业部门  
877 - */  
878 - productBelongBusiness?: string;  
879 - /**  
880 - * @description  
881 - * 商品名称 755 + * 2023-11-12 16:12
882 */ 756 */
883 - productName?: string; 757 + collectMoneyTime?: string;
884 /** 758 /**
885 * @description 759 * @description
886 - * 销售代号 760 + * 子订单id集合
887 */ 761 */
888 - salesCode?: string;  
889 - /** @format int32 */  
890 - total?: number; 762 + subIds?: Array<number>;
891 } 763 }
src/services/order.ts
@@ -4,9 +4,10 @@ export const orderExport = async (data: any = {}) =&gt; { @@ -4,9 +4,10 @@ export const orderExport = async (data: any = {}) =&gt; {
4 // const res = await defHttp.post<any>({ url: Api.EXPORT, data }); 4 // const res = await defHttp.post<any>({ url: Api.EXPORT, data });
5 5
6 axios({ 6 axios({
7 - url: '/service/order/export', 7 + url: '/api/service/order/export',
8 method: 'post', 8 method: 'post',
9 responseType: 'blob', 9 responseType: 'blob',
  10 + headers: { Authorization: localStorage.getItem('token') },
10 data, 11 data,
11 }) 12 })
12 .then((response) => { 13 .then((response) => {
src/services/request.ts
@@ -26,12 +26,9 @@ import type { @@ -26,12 +26,9 @@ import type {
26 DictionaryQueryVO, 26 DictionaryQueryVO,
27 DictionaryVO, 27 DictionaryVO,
28 Dto, 28 Dto,
29 - InvoicingDto,  
30 - ModelAndView,  
31 OrderAddVO, 29 OrderAddVO,
32 OrderAuditLogQueryVO, 30 OrderAuditLogQueryVO,
33 OrderBaseInfoQueryVO, 31 OrderBaseInfoQueryVO,
34 - OrderCancelDto,  
35 OrderFieldLockApplyQueryVO, 32 OrderFieldLockApplyQueryVO,
36 OrderOptLogQueryVO, 33 OrderOptLogQueryVO,
37 OrderProfitAnalysisVo, 34 OrderProfitAnalysisVo,
@@ -220,7 +217,9 @@ export interface GetErrorResponse { @@ -220,7 +217,9 @@ export interface GetErrorResponse {
220 * @description 217 * @description
221 * OK 218 * OK
222 */ 219 */
223 - 200: ModelAndView; 220 + 200: {
  221 + [propertyName: string]: any;
  222 + };
224 /** 223 /**
225 * @description 224 * @description
226 * Unauthorized 225 * Unauthorized
@@ -241,9 +240,9 @@ export interface GetErrorResponse { @@ -241,9 +240,9 @@ export interface GetErrorResponse {
241 export type GetErrorResponseSuccess = GetErrorResponse[200]; 240 export type GetErrorResponseSuccess = GetErrorResponse[200];
242 /** 241 /**
243 * @description 242 * @description
244 - * errorHtml 243 + * error
245 * @tags basic-error-controller 244 * @tags basic-error-controller
246 - * @produces text/html 245 + * @produces *
247 */ 246 */
248 export const getError = /* #__PURE__ */ (() => { 247 export const getError = /* #__PURE__ */ (() => {
249 const method = 'get'; 248 const method = 'get';
@@ -267,7 +266,9 @@ export interface PutErrorResponse { @@ -267,7 +266,9 @@ export interface PutErrorResponse {
267 * @description 266 * @description
268 * OK 267 * OK
269 */ 268 */
270 - 200: ModelAndView; 269 + 200: {
  270 + [propertyName: string]: any;
  271 + };
271 /** 272 /**
272 * @description 273 * @description
273 * Created 274 * Created
@@ -293,9 +294,9 @@ export interface PutErrorResponse { @@ -293,9 +294,9 @@ export interface PutErrorResponse {
293 export type PutErrorResponseSuccess = PutErrorResponse[200]; 294 export type PutErrorResponseSuccess = PutErrorResponse[200];
294 /** 295 /**
295 * @description 296 * @description
296 - * errorHtml 297 + * error
297 * @tags basic-error-controller 298 * @tags basic-error-controller
298 - * @produces text/html 299 + * @produces *
299 * @consumes application/json 300 * @consumes application/json
300 */ 301 */
301 export const putError = /* #__PURE__ */ (() => { 302 export const putError = /* #__PURE__ */ (() => {
@@ -320,7 +321,9 @@ export interface PostErrorResponse { @@ -320,7 +321,9 @@ export interface PostErrorResponse {
320 * @description 321 * @description
321 * OK 322 * OK
322 */ 323 */
323 - 200: ModelAndView; 324 + 200: {
  325 + [propertyName: string]: any;
  326 + };
324 /** 327 /**
325 * @description 328 * @description
326 * Created 329 * Created
@@ -346,9 +349,9 @@ export interface PostErrorResponse { @@ -346,9 +349,9 @@ export interface PostErrorResponse {
346 export type PostErrorResponseSuccess = PostErrorResponse[200]; 349 export type PostErrorResponseSuccess = PostErrorResponse[200];
347 /** 350 /**
348 * @description 351 * @description
349 - * errorHtml 352 + * error
350 * @tags basic-error-controller 353 * @tags basic-error-controller
351 - * @produces text/html 354 + * @produces *
352 * @consumes application/json 355 * @consumes application/json
353 */ 356 */
354 export const postError = /* #__PURE__ */ (() => { 357 export const postError = /* #__PURE__ */ (() => {
@@ -373,7 +376,9 @@ export interface DeleteErrorResponse { @@ -373,7 +376,9 @@ export interface DeleteErrorResponse {
373 * @description 376 * @description
374 * OK 377 * OK
375 */ 378 */
376 - 200: ModelAndView; 379 + 200: {
  380 + [propertyName: string]: any;
  381 + };
377 /** 382 /**
378 * @description 383 * @description
379 * No Content 384 * No Content
@@ -394,9 +399,9 @@ export interface DeleteErrorResponse { @@ -394,9 +399,9 @@ export interface DeleteErrorResponse {
394 export type DeleteErrorResponseSuccess = DeleteErrorResponse[200]; 399 export type DeleteErrorResponseSuccess = DeleteErrorResponse[200];
395 /** 400 /**
396 * @description 401 * @description
397 - * errorHtml 402 + * error
398 * @tags basic-error-controller 403 * @tags basic-error-controller
399 - * @produces text/html 404 + * @produces *
400 */ 405 */
401 export const deleteError = /* #__PURE__ */ (() => { 406 export const deleteError = /* #__PURE__ */ (() => {
402 const method = 'delete'; 407 const method = 'delete';
@@ -420,7 +425,9 @@ export interface OptionsErrorResponse { @@ -420,7 +425,9 @@ export interface OptionsErrorResponse {
420 * @description 425 * @description
421 * OK 426 * OK
422 */ 427 */
423 - 200: ModelAndView; 428 + 200: {
  429 + [propertyName: string]: any;
  430 + };
424 /** 431 /**
425 * @description 432 * @description
426 * No Content 433 * No Content
@@ -441,9 +448,9 @@ export interface OptionsErrorResponse { @@ -441,9 +448,9 @@ export interface OptionsErrorResponse {
441 export type OptionsErrorResponseSuccess = OptionsErrorResponse[200]; 448 export type OptionsErrorResponseSuccess = OptionsErrorResponse[200];
442 /** 449 /**
443 * @description 450 * @description
444 - * errorHtml 451 + * error
445 * @tags basic-error-controller 452 * @tags basic-error-controller
446 - * @produces text/html 453 + * @produces *
447 * @consumes application/json 454 * @consumes application/json
448 */ 455 */
449 export const optionsError = /* #__PURE__ */ (() => { 456 export const optionsError = /* #__PURE__ */ (() => {
@@ -468,7 +475,9 @@ export interface HeadErrorResponse { @@ -468,7 +475,9 @@ export interface HeadErrorResponse {
468 * @description 475 * @description
469 * OK 476 * OK
470 */ 477 */
471 - 200: ModelAndView; 478 + 200: {
  479 + [propertyName: string]: any;
  480 + };
472 /** 481 /**
473 * @description 482 * @description
474 * No Content 483 * No Content
@@ -489,9 +498,9 @@ export interface HeadErrorResponse { @@ -489,9 +498,9 @@ export interface HeadErrorResponse {
489 export type HeadErrorResponseSuccess = HeadErrorResponse[200]; 498 export type HeadErrorResponseSuccess = HeadErrorResponse[200];
490 /** 499 /**
491 * @description 500 * @description
492 - * errorHtml 501 + * error
493 * @tags basic-error-controller 502 * @tags basic-error-controller
494 - * @produces text/html 503 + * @produces *
495 * @consumes application/json 504 * @consumes application/json
496 */ 505 */
497 export const headError = /* #__PURE__ */ (() => { 506 export const headError = /* #__PURE__ */ (() => {
@@ -516,7 +525,9 @@ export interface PatchErrorResponse { @@ -516,7 +525,9 @@ export interface PatchErrorResponse {
516 * @description 525 * @description
517 * OK 526 * OK
518 */ 527 */
519 - 200: ModelAndView; 528 + 200: {
  529 + [propertyName: string]: any;
  530 + };
520 /** 531 /**
521 * @description 532 * @description
522 * No Content 533 * No Content
@@ -537,9 +548,9 @@ export interface PatchErrorResponse { @@ -537,9 +548,9 @@ export interface PatchErrorResponse {
537 export type PatchErrorResponseSuccess = PatchErrorResponse[200]; 548 export type PatchErrorResponseSuccess = PatchErrorResponse[200];
538 /** 549 /**
539 * @description 550 * @description
540 - * errorHtml 551 + * error
541 * @tags basic-error-controller 552 * @tags basic-error-controller
542 - * @produces text/html 553 + * @produces *
543 * @consumes application/json 554 * @consumes application/json
544 */ 555 */
545 export const patchError = /* #__PURE__ */ (() => { 556 export const patchError = /* #__PURE__ */ (() => {
@@ -4707,7 +4718,7 @@ export interface PostServiceOrderOrderCancelOption { @@ -4707,7 +4718,7 @@ export interface PostServiceOrderOrderCancelOption {
4707 /** 4718 /**
4708 @description 4719 @description
4709 dto */ 4720 dto */
4710 - dto: OrderCancelDto; 4721 + dto: Dto;
4711 }; 4722 };
4712 } 4723 }
4713 4724
@@ -4914,13 +4925,13 @@ export const postServiceOrderCheckOrder = /* #__PURE__ */ (() =&gt; { @@ -4914,13 +4925,13 @@ export const postServiceOrderCheckOrder = /* #__PURE__ */ (() =&gt; {
4914 export interface PostServiceOrderConfirmReceiptOption { 4925 export interface PostServiceOrderConfirmReceiptOption {
4915 /** 4926 /**
4916 * @description 4927 * @description
4917 - * file 4928 + * files
4918 */ 4929 */
4919 formData: { 4930 formData: {
4920 /** 4931 /**
4921 @description 4932 @description
4922 - file */  
4923 - file: File; 4933 + files */
  4934 + files: Array<File>;
4924 }; 4935 };
4925 } 4936 }
4926 4937
@@ -4976,7 +4987,7 @@ export type PostServiceOrderConfirmReceiptResponseSuccess = @@ -4976,7 +4987,7 @@ export type PostServiceOrderConfirmReceiptResponseSuccess =
4976 * 确认收货 4987 * 确认收货
4977 * @tags 内部订单 4988 * @tags 内部订单
4978 * @produces * 4989 * @produces *
4979 - * @consumes multipart/form-data 4990 + * @consumes application/json
4980 */ 4991 */
4981 export const postServiceOrderConfirmReceipt = /* #__PURE__ */ (() => { 4992 export const postServiceOrderConfirmReceipt = /* #__PURE__ */ (() => {
4982 const method = 'post'; 4993 const method = 'post';
@@ -4997,6 +5008,77 @@ export const postServiceOrderConfirmReceipt = /* #__PURE__ */ (() =&gt; { @@ -4997,6 +5008,77 @@ export const postServiceOrderConfirmReceipt = /* #__PURE__ */ (() =&gt; {
4997 return request; 5008 return request;
4998 })(); 5009 })();
4999 5010
  5011 +/** @description request parameter type for postServiceOrderEditOrder */
  5012 +export interface PostServiceOrderEditOrderOption {
  5013 + /**
  5014 + * @description
  5015 + * dto
  5016 + */
  5017 + body: {
  5018 + /**
  5019 + @description
  5020 + dto */
  5021 + dto: Dto;
  5022 + };
  5023 +}
  5024 +
  5025 +/** @description response type for postServiceOrderEditOrder */
  5026 +export interface PostServiceOrderEditOrderResponse {
  5027 + /**
  5028 + * @description
  5029 + * OK
  5030 + */
  5031 + 200: ServerResult;
  5032 + /**
  5033 + * @description
  5034 + * Created
  5035 + */
  5036 + 201: any;
  5037 + /**
  5038 + * @description
  5039 + * Unauthorized
  5040 + */
  5041 + 401: any;
  5042 + /**
  5043 + * @description
  5044 + * Forbidden
  5045 + */
  5046 + 403: any;
  5047 + /**
  5048 + * @description
  5049 + * Not Found
  5050 + */
  5051 + 404: any;
  5052 +}
  5053 +
  5054 +export type PostServiceOrderEditOrderResponseSuccess =
  5055 + PostServiceOrderEditOrderResponse[200];
  5056 +/**
  5057 + * @description
  5058 + * 财务编辑订单
  5059 + * @tags 内部订单
  5060 + * @produces *
  5061 + * @consumes application/json
  5062 + */
  5063 +export const postServiceOrderEditOrder = /* #__PURE__ */ (() => {
  5064 + const method = 'post';
  5065 + const url = '/service/order/editOrder';
  5066 + function request(
  5067 + option: PostServiceOrderEditOrderOption,
  5068 + ): Promise<PostServiceOrderEditOrderResponseSuccess> {
  5069 + return requester(request.url, {
  5070 + method: request.method,
  5071 + ...option,
  5072 + }) as unknown as Promise<PostServiceOrderEditOrderResponseSuccess>;
  5073 + }
  5074 +
  5075 + /** http method */
  5076 + request.method = method;
  5077 + /** request url */
  5078 + request.url = url;
  5079 + return request;
  5080 +})();
  5081 +
5000 /** @description request parameter type for postServiceOrderExport */ 5082 /** @description request parameter type for postServiceOrderExport */
5001 export interface PostServiceOrderExportOption { 5083 export interface PostServiceOrderExportOption {
5002 /** 5084 /**
@@ -5078,7 +5160,7 @@ export interface PostServiceOrderInvoicingOption { @@ -5078,7 +5160,7 @@ export interface PostServiceOrderInvoicingOption {
5078 /** 5160 /**
5079 @description 5161 @description
5080 dto */ 5162 dto */
5081 - dto: InvoicingDto; 5163 + dto: Dto;
5082 }; 5164 };
5083 } 5165 }
5084 5166
src/utils/index.ts
@@ -26,4 +26,26 @@ function getUserInfo() { @@ -26,4 +26,26 @@ function getUserInfo() {
26 return JSON.parse(userInfoString); 26 return JSON.parse(userInfoString);
27 } 27 }
28 28
29 -export { customMessage, enumToSelect, enumValueToLabel, getUserInfo }; 29 +//将状态枚举值转换为ProTable的enumValue格式
  30 +function enumToProTableEnumValue(enumConstants: any) {
  31 + const result = {};
  32 +
  33 + for (const key in enumConstants) {
  34 + if (enumConstants.hasOwnProperty(key)) {
  35 + result[key] = {
  36 + text: enumConstants[key],
  37 + status: enumValueToLabel(key, enumConstants),
  38 + };
  39 + }
  40 + }
  41 +
  42 + return result;
  43 +}
  44 +
  45 +export {
  46 + customMessage,
  47 + enumToProTableEnumValue,
  48 + enumToSelect,
  49 + enumValueToLabel,
  50 + getUserInfo,
  51 +};