Yansen 2 years ago
parent
commit
4dcbae7cad

+ 7
- 0
config/routes.js View File

@@ -88,6 +88,13 @@
88 88
     // hideInMenu: true,
89 89
     component: './guaranteeTask/Edit/index',
90 90
   },
91
+  {
92
+    path: '/guaranteeTask/print',
93
+    name: '保障单',
94
+    hideInMenu: true,
95
+    layout: false,
96
+    component: './guaranteeTask/print/index',
97
+  },
91 98
   {
92 99
     component: './404',
93 100
   },

+ 7
- 3
src/pages/guaranteeTask/Edit/BasicForm.jsx View File

@@ -1,5 +1,6 @@
1 1
 import React, { useState, useEffect } from 'react';
2 2
 import moment from 'moment';
3
+import { Link } from 'umi';
3 4
 import { Button, Row, Col, Form, Input, InputNumber, DatePicker, notification } from 'antd';
4 5
 import { addGuaranteeTask, updateGuaranteeTask } from '@/services/api/guaranteeTask';
5 6
 
@@ -8,6 +9,7 @@ const { RangePicker } = DatePicker;
8 9
 
9 10
 export default (props) => {
10 11
   const { dataSource, setDataSource } = props;
12
+  const id = dataSource ? dataSource.id : undefined;
11 13
 
12 14
   const [form] = Form.useForm()
13 15
   const [rangeDate, setRangeDate] = useState([]);
@@ -32,7 +34,6 @@ export default (props) => {
32 34
     const startDate = start ? start.format('YYYY-MM-DD') : undefined;
33 35
     const endDate = end ? end.format('YYYY-MM-DD') : undefined;
34 36
 
35
-    const id = dataSource ? dataSource.id : undefined;
36 37
     const func = id ? updateGuaranteeTask : addGuaranteeTask;
37 38
 
38 39
     setLoading(true);
@@ -196,9 +197,12 @@ export default (props) => {
196 197
       </Row>
197 198
 
198 199
       <Row gutter={48}>
199
-        <Col offset={6} span={6}>
200
+        <Col offset={6} span={12}>
200 201
           <Button type="primary" htmlType="submit" loading={loading}>提交</Button>
201
-          <Button style={{ marginLeft: '100px' }}>返回</Button>
202
+          <Button style={{ marginLeft: '48px' }}>返回</Button>
203
+          <Button style={{ marginLeft: '48px' }}>
204
+            <Link target="_blank" to={`/guaranteeTask/print?id=${id}`}>打印预览</Link>
205
+          </Button>
202 206
         </Col>
203 207
       </Row>
204 208
 

+ 0
- 1
src/pages/guaranteeTask/Edit/index.jsx View File

@@ -46,7 +46,6 @@ export default (props) => {
46 46
         {
47 47
           activeTabKey === 'item-2' && <DishList dataSource={dataSource} setDataSource={setDataSource} />
48 48
         }
49
-
50 49
       </Card>
51 50
     </PageContainer>
52 51
   )

+ 132
- 0
src/pages/guaranteeTask/print/index.jsx View File

@@ -0,0 +1,132 @@
1
+import React, { useRef, useState, useEffect } from 'react';
2
+import moment from 'moment';
3
+import { Button } from 'antd';
4
+import { useSearchParams } from '@umijs/max';
5
+import { getGuaranteeTask } from '@/services/api/guaranteeTask';
6
+import { getGuaranteeDetailList } from '@/services/api/guaranteeTask';
7
+import Styles from './style.less';
8
+
9
+export default (props) => {
10
+  const [dataSource, setDataSource] = useState({});
11
+  const [list, setList] = useState([]);
12
+  const [searchParams] = useSearchParams();
13
+  const id = searchParams.get('id');
14
+
15
+  const onPrint = () => {
16
+    window.print();
17
+  }
18
+  
19
+  useEffect(() => {
20
+    if (id) {
21
+      // setLoading(true);
22
+      getGuaranteeTask(id).then(res => {
23
+        // setLoading(false);
24
+        setDataSource(res);
25
+      }).catch(() => {
26
+        // setLoading(false);
27
+      });
28
+      
29
+      // setLoading(true);
30
+      getGuaranteeDetailList({ pageNum: 1, pageSize: 500, guaranteeId: id }).then(res => {
31
+        // setLoading(false);
32
+        setList(res.records || []);
33
+      }).catch(() => {
34
+        // setLoading(false);
35
+      })
36
+    }
37
+  }, [id]);
38
+
39
+  const details = list.map(x => `${x.dishName} × ${x.dishAmount}`).join(',');
40
+  const startDate = dataSource.startDate ? moment(dataSource.startDate).format('YYYY-MM-DD') : '';
41
+  const endDate = dataSource.endDate ? moment(dataSource.endDate).format('YYYY-MM-DD') : '';
42
+  const dateStr = `${startDate} ~ ${endDate}`;
43
+
44
+  return (
45
+    <div className={Styles['print-page']}>
46
+      <table className={Styles['print-table']}>
47
+        {/* col 用于固定宽度 */}
48
+        <col />
49
+        <col />
50
+        <col />
51
+        <col />
52
+        <col />
53
+        <col />
54
+        <col />
55
+        <col />
56
+        <thead>
57
+          <tr>
58
+            <th className={Styles['title']} colSpan={8}>江苏省海安军供站军供保障受领单</th>
59
+          </tr>
60
+          <tr className={Styles['sub-title']}>
61
+            <th colSpan={2}><div>军代表:{dataSource.deputyMan || ' '}</div></th>
62
+            <th colSpan={2}><div>电话:{dataSource.deputyPhone || ' '}</div></th>
63
+            <th colSpan={2}><div>通报时间:{dataSource.gotDate || ' '}</div></th>
64
+            <th colSpan={2}><div>受领人:{dataSource.receiver || ' '}</div></th>
65
+          </tr>
66
+        </thead>
67
+        <tbody>
68
+          <tr>
69
+            <td><div>保障序号</div></td>
70
+            <td colSpan={2}><div>{dataSource.guaranteeNo || ' '}</div></td>
71
+            <td><div>军运号</div></td>
72
+            <td colSpan={2}><div>{dataSource.transportNo || ' '}</div></td>
73
+            <td><div>车次</div></td>
74
+            <td><div>{dataSource.tripsNo || ' '}</div></td>
75
+          </tr>
76
+          <tr>
77
+            <td><div>保障日期</div></td>
78
+            <td colSpan={3}>{dateStr}</td>
79
+            <td><div>保障时间</div></td>
80
+            <td colSpan={3}>{dataSource.timeRange || ' '}</td>
81
+          </tr>
82
+          <tr>
83
+            <td rowSpan={2}><div>保障人数</div></td>
84
+            <td rowSpan={2}>{dataSource.totalPersonNum || ' '}</td>
85
+            <td><div>其中回民</div></td>
86
+            <td>{dataSource.huiPersonNum || ' '}</td>
87
+            <td rowSpan={2}><div>伙食标准</div></td>
88
+            <td>{dataSource.standard || ' '}</td>
89
+          </tr>
90
+          <tr>
91
+            <td className={Styles['bd-left']}><div>其中病号</div></td>
92
+            <td>{dataSource.patientNum || ' '}</td>
93
+            <td>套餐: {dataSource.packageName || ' '}</td>
94
+          </tr>
95
+          <tr>
96
+            <td><div>保障地点</div></td>
97
+            <td colSpan={7}>{dataSource.address || ' '}</td>
98
+          </tr>
99
+          <tr>
100
+            <td><div>部队联系人</div></td>
101
+            <td colSpan={3}>{dataSource.concatPerson || ' '}</td>
102
+            <td><div>联系电话</div></td>
103
+            <td colSpan={3}>{dataSource.concatPhone || ' '}</td>
104
+          </tr>
105
+          <tr>
106
+            <td><div>制餐人</div></td>
107
+            <td colSpan={3}>{dataSource.chef || ' '}</td>
108
+            <td><div>联系电话</div></td>
109
+            <td colSpan={3}>{dataSource.chefPhone || ' '}</td>
110
+          </tr>
111
+          <tr>
112
+            <td><div>配送人</div></td>
113
+            <td colSpan={3}>{dataSource.deliveryMan || ' '}</td>
114
+            <td><div>联系电话</div></td>
115
+            <td colSpan={3}>{dataSource.deliveryPhone || ' '}</td>
116
+          </tr>
117
+          <tr className={Styles['cell-lg']}>
118
+            <td>配餐明细</td>
119
+            <td colSpan={7}><div>{details}</div></td>
120
+          </tr>
121
+          <tr className={Styles['cell-lg']}>
122
+            <td>备注</td>
123
+            <td colSpan={7}><div>{dataSource.remark || ' '}</div></td>
124
+          </tr>
125
+        </tbody>
126
+      </table>
127
+      <div className={Styles['print-btn']}>
128
+        <Button type="primary" onClick={onPrint}>打印</Button>
129
+      </div>
130
+    </div>
131
+  )
132
+}

+ 109
- 0
src/pages/guaranteeTask/print/style.less View File

@@ -0,0 +1,109 @@
1
+.print-page {
2
+  width: 100%;
3
+  height: 100%;
4
+  position: relative;
5
+  box-sizing: border-box;
6
+  padding: 1cm;
7
+}
8
+
9
+// A4 大小 210 * 279
10
+@width: 190mm; // 210 - 20
11
+@height: 277mm;  // 279 - 20
12
+
13
+@minWidth: calc(@width / 8);
14
+
15
+.print-table {
16
+  table-layout: fixed;
17
+  width: @width;
18
+  height: @height;
19
+  margin: auto;
20
+  font-size: 16px;
21
+  overflow-x: hidden;
22
+
23
+  col {
24
+    width: @minWidth;
25
+  }
26
+
27
+  th {
28
+    font-weight: 400;
29
+  }
30
+
31
+  thead {
32
+    tr {
33
+      border: none !important;
34
+    }
35
+  }
36
+
37
+  @border: 1.5px solid #333;
38
+
39
+  tbody {
40
+    border: @border;
41
+  }
42
+  
43
+  tr {
44
+    & + tr {
45
+      border-top: @border;
46
+    }
47
+  }
48
+
49
+  td {
50
+    padding: 0 .5em;
51
+    overflow: hidden;
52
+    text-overflow: ellipsis;
53
+    div {
54
+      min-width: @minWidth;
55
+      min-height: 10mm;
56
+      line-height: 10mm;
57
+    }
58
+
59
+    & + td {
60
+      border-left: @border;
61
+    }
62
+  }
63
+
64
+  .cell-lg {
65
+    div {
66
+      width: auto;
67
+      min-height: 70mm;
68
+      line-height: 1.6em;
69
+    }
70
+  }
71
+
72
+  .title {
73
+    font-size: 2em;
74
+  }
75
+
76
+  .sub-title {
77
+    // font-size: 12px;
78
+  }
79
+
80
+  .bd-left {
81
+    border-left: @border;
82
+  }
83
+}
84
+
85
+@media screen {
86
+  .print-btn {
87
+    text-align: center;
88
+    margin: 64px auto;
89
+  }
90
+
91
+  .print-table {
92
+    padding: 5mm 5mm 5mm 10mm;
93
+  }
94
+}
95
+
96
+@media print {
97
+  .print-table {
98
+    padding: 0;
99
+  }
100
+
101
+  .print-btn {
102
+    display: none;
103
+  }
104
+}
105
+
106
+@page {
107
+  size: A4;
108
+  margin: 0;
109
+}