Commit 78f597bb78205ee04378f96ac21b4bac82c7d5e0
Merge branch 'bug_fix' into 'master'
考评组bugfix See merge request !187
Showing
8 changed files
with
172 additions
and
29 deletions
src/pages/performance/CompensateGroupConfig/components/DraftList.tsx
... | ... | @@ -89,7 +89,7 @@ export default ({ type }: Props) => { |
89 | 89 | 新增 |
90 | 90 | </Button> |
91 | 91 | </Row> |
92 | - <Table loading={loading} rowKey={(row) => `id${row.id}`} dataSource={list} pagination={paginationConfig}> | |
92 | + <Table loading={loading} rowKey={(row) => `id${row.draftId}`} dataSource={list} pagination={paginationConfig}> | |
93 | 93 | <Column title="薪酬组名称" dataIndex="name" align="center" render={(name) => name || ""} /> |
94 | 94 | <Column title="岗位" dataIndex="postName" align="center" /> |
95 | 95 | <Column | ... | ... |
src/pages/performance/EvaDataImport/components/FileDatailsModal.tsx
0 → 100644
1 | +import React, { useState, useEffect } from "react"; | |
2 | +import { | |
3 | + Table, | |
4 | + Input, | |
5 | + InputNumber, | |
6 | + Popconfirm, | |
7 | + Form, | |
8 | + Typography, | |
9 | + Button, | |
10 | + message, | |
11 | + Space, | |
12 | + Divider, | |
13 | + Modal, | |
14 | + Card, | |
15 | +} from "antd"; | |
16 | +import { cloneDeep } from "lodash"; | |
17 | +import { KpiGroupSetteing } from "@/pages/performance/KpiGroupSetting/interface"; | |
18 | +import { TargetType, TargetTypeEnum } from "@/pages/performance/entity"; | |
19 | +import { render } from "react-dom"; | |
20 | +import moment from "moment"; | |
21 | +import { ReasonsEnum } from "../entity"; | |
22 | +import { history } from "umi"; | |
23 | +import st from "./style.less"; | |
24 | + | |
25 | +const Column = Table.Column; | |
26 | + | |
27 | +interface Props { | |
28 | + visible: boolean; | |
29 | + fileData: any; | |
30 | + tarOnCancel: Function; | |
31 | +} | |
32 | +const columns = [ | |
33 | + { | |
34 | + title: "目标名称", | |
35 | + dataIndex: "indicatorName", | |
36 | + key: "indicatorName", | |
37 | + }, | |
38 | + | |
39 | + { | |
40 | + title: "目标值", | |
41 | + dataIndex: "targetValue", | |
42 | + key: "targetValue", | |
43 | + render: (value: Number, record: any) => { | |
44 | + return record.targetType === 2 ? `${value}%` : record.targetType === 3 ? `${value}元` : `${value}台`; | |
45 | + }, | |
46 | + }, | |
47 | +]; | |
48 | +const TargetModal = ({ visible, fileData, tarOnCancel }: Props) => { | |
49 | + return ( | |
50 | + <> | |
51 | + <Modal title="导入数据详情" visible={visible} onCancel={() => tarOnCancel()} maskClosable={false} width={1500}> | |
52 | + <Table bordered dataSource={fileData.details}> | |
53 | + <Column title="归属人员" dataIndex="userName" align="center" render={(name) => <span>{name || "--"}</span>} /> | |
54 | + <Column title="归属门店" dataIndex="shopName" align="center" render={(name) => <span>{name || "--"}</span>} /> | |
55 | + <Column | |
56 | + title="指标名称" | |
57 | + dataIndex="indicatorName" | |
58 | + align="center" | |
59 | + render={(name) => <span>{name || "--"}</span>} | |
60 | + /> | |
61 | + <Column | |
62 | + title="指标值" | |
63 | + dataIndex="indicatorValue" | |
64 | + align="center" | |
65 | + render={(num, record: any) => ( | |
66 | + <span> | |
67 | + {num !== undefined | |
68 | + ? `${num}${ | |
69 | + record.dataType == 1 ? "台" : record.dataType == 2 ? "%" : record.dataType == 3 ? "元" : "" | |
70 | + }` | |
71 | + : "--"} | |
72 | + </span> | |
73 | + )} | |
74 | + /> | |
75 | + <Column | |
76 | + title="考核周期" | |
77 | + dataIndex="dataDate" | |
78 | + align="center" | |
79 | + render={(time: number) => (time ? moment(time).format("YYYY-MM-DD") : "--")} | |
80 | + /> | |
81 | + <Column | |
82 | + title="是否导入" | |
83 | + dataIndex="errorType" | |
84 | + align="center" | |
85 | + render={(_: any, record: any) => | |
86 | + record.errorType ? <div className={st.no}>未导入</div> : <div className={st.yes}>已导入</div> | |
87 | + } | |
88 | + /> | |
89 | + <Column | |
90 | + title="未导入原因" | |
91 | + dataIndex="errorType" | |
92 | + align="center" | |
93 | + render={(_: any, record: any) => (record.errorType ? ReasonsEnum[record.errorType] : "--")} | |
94 | + /> | |
95 | + </Table> | |
96 | + </Modal> | |
97 | + </> | |
98 | + ); | |
99 | +}; | |
100 | + | |
101 | +export default TargetModal; | ... | ... |
src/pages/performance/EvaDataImport/components/style.less
0 → 100644
1 | +.no { | |
2 | + width: 47px; | |
3 | + height: 18px; | |
4 | + margin: 0 auto; | |
5 | + color: #f4333c; | |
6 | + font-weight: 500; | |
7 | + font-size: 12px; | |
8 | + line-height: 18px; | |
9 | + border: 1px solid #f8797f; | |
10 | + border-radius: 2px; | |
11 | +} | |
12 | +.yes { | |
13 | + width: 47px; | |
14 | + height: 18px; | |
15 | + margin: 0 auto; | |
16 | + color: #20c688; | |
17 | + font-weight: 500; | |
18 | + font-size: 12px; | |
19 | + line-height: 18px; | |
20 | + border: 1px solid #6ddab2; | |
21 | + border-radius: 2px; | |
22 | +} | ... | ... |
src/pages/performance/EvaDataImport/index.tsx
... | ... | @@ -8,6 +8,7 @@ import type { UploadProps } from "antd"; |
8 | 8 | import { history } from "umi"; |
9 | 9 | import moment from "moment"; |
10 | 10 | import Filter from './components/Filter'; |
11 | +import FileDatailsModal from './components/FileDatailsModal'; | |
11 | 12 | |
12 | 13 | const Column = Table.Column; |
13 | 14 | |
... | ... | @@ -15,6 +16,8 @@ export default () => { |
15 | 16 | const { loading, list, paginationConfig, setParams, innerParams } = usePagination(evaDataListApi, { |
16 | 17 | pageSize: 10, |
17 | 18 | }); |
19 | + const [fileData, setFileData] = useState({}); | |
20 | + const [visible, setVisible] = useState<boolean>(false); | |
18 | 21 | const uploadPerson: UploadProps = { |
19 | 22 | name: "file", |
20 | 23 | action: "/api/morax/erp/eval-indicator/staff-indicator", |
... | ... | @@ -25,10 +28,12 @@ export default () => { |
25 | 28 | console.log(info.file, info.fileList); |
26 | 29 | } |
27 | 30 | if (info.file.status === "done") { |
28 | - message.success(`${info.file.name} 导入成功`); | |
31 | + message.success(`${info.file.name} 上传成功`); | |
29 | 32 | setParams({ ...innerParams }, true); |
33 | + // setFileData(info.file.response.data); | |
34 | + // setVisible(true); | |
30 | 35 | } else if (info.file.status === "error") { |
31 | - message.error(`${info.file.name} 导入失败`); | |
36 | + message.error(`${info.file.name} 上传失败`); | |
32 | 37 | } |
33 | 38 | }, |
34 | 39 | }; |
... | ... | @@ -42,10 +47,10 @@ export default () => { |
42 | 47 | console.log(info.file, info.fileList); |
43 | 48 | } |
44 | 49 | if (info.file.status === "done") { |
45 | - message.success(`${info.file.name} 导入成功`); | |
50 | + message.success(`${info.file.name} 上传成功`); | |
46 | 51 | setParams({ ...innerParams }, true); |
47 | 52 | } else if (info.file.status === "error") { |
48 | - message.error(`${info.file.name} 导入失败`); | |
53 | + message.error(`${info.file.name} 上传失败`); | |
49 | 54 | } |
50 | 55 | }, |
51 | 56 | }; |
... | ... | @@ -57,12 +62,20 @@ export default () => { |
57 | 62 | <Filter setParams={setParams} /> |
58 | 63 | <div> |
59 | 64 | <Button type="default" style={{ marginRight: 10 }}> |
60 | - <a href="https://gate.feewee.cn/file/download?fid=74d1d724f9be48baa5921f3782037c3b" target="_blank" rel="noreferrer"> | |
65 | + <a | |
66 | + href="https://gate.feewee.cn/file/download?fid=74d1d724f9be48baa5921f3782037c3b" | |
67 | + target="_blank" | |
68 | + rel="noreferrer" | |
69 | + > | |
61 | 70 | 下载人员模板 |
62 | 71 | </a> |
63 | 72 | </Button> |
64 | 73 | <Button type="default" style={{ marginRight: 10 }}> |
65 | - <a href="https://gate.feewee.cn/file/download?fid=e4eb136962164264a78753bd1d6061f3" target="_blank" rel="noreferrer"> | |
74 | + <a | |
75 | + href="https://gate.feewee.cn/file/download?fid=e4eb136962164264a78753bd1d6061f3" | |
76 | + target="_blank" | |
77 | + rel="noreferrer" | |
78 | + > | |
66 | 79 | 下载门店模板 |
67 | 80 | </a> |
68 | 81 | </Button> |
... | ... | @@ -76,7 +89,6 @@ export default () => { |
76 | 89 | </Upload> |
77 | 90 | </div> |
78 | 91 | </Row> |
79 | - | |
80 | 92 | <Table |
81 | 93 | loading={loading} |
82 | 94 | rowKey={(row) => `id${row.indicatorCode}`} |
... | ... | @@ -137,6 +149,7 @@ export default () => { |
137 | 149 | )} |
138 | 150 | /> |
139 | 151 | </Table> |
152 | + {/* <FileDatailsModal visible={visible} tarOnCancel={() => setVisible(false)} fileData={fileData} /> */} | |
140 | 153 | </Card> |
141 | 154 | </PageHeaderWrapper> |
142 | 155 | ); | ... | ... |
src/pages/performance/EvaGroupSetting/EditComfirm/components/RankModal.tsx
src/pages/performance/EvaGroupSetting/EditComfirm/components/TotalAmountSal.tsx
... | ... | @@ -58,7 +58,7 @@ const TotalAmount = ({ |
58 | 58 | if (dataIndex == "upper" && isPercent == 2) { |
59 | 59 | precision = 2; |
60 | 60 | } |
61 | - const inputNode = inputType === "number" ? <InputNumber precision={precision} min={0} /> : <Input />; | |
61 | + const inputNode = inputType === "number" ? <InputNumber precision={precision} /> : <Input />; | |
62 | 62 | |
63 | 63 | return ( |
64 | 64 | <td {...restProps}> |
... | ... | @@ -360,24 +360,28 @@ const TotalAmount = ({ |
360 | 360 | }} |
361 | 361 | /> |
362 | 362 | </Form> |
363 | + <div>金额可为负数,负数为负激励</div> | |
363 | 364 | </Modal> |
364 | 365 | ) : ( |
365 | - <Form form={form} component={false}> | |
366 | - <Table | |
367 | - components={{ | |
368 | - body: { | |
369 | - cell: EditableCell, | |
370 | - }, | |
371 | - }} | |
372 | - bordered | |
373 | - dataSource={value} | |
374 | - columns={mergedColumns} | |
375 | - rowClassName="editable-row" | |
376 | - pagination={{ | |
377 | - onChange: cancel, | |
378 | - }} | |
379 | - /> | |
380 | - </Form> | |
366 | + <> | |
367 | + <Form form={form} component={false}> | |
368 | + <Table | |
369 | + components={{ | |
370 | + body: { | |
371 | + cell: EditableCell, | |
372 | + }, | |
373 | + }} | |
374 | + bordered | |
375 | + dataSource={value} | |
376 | + columns={mergedColumns} | |
377 | + rowClassName="editable-row" | |
378 | + pagination={{ | |
379 | + onChange: cancel, | |
380 | + }} | |
381 | + /> | |
382 | + </Form> | |
383 | + <div>金额可为负数,负数为负激励</div> | |
384 | + </> | |
381 | 385 | )} |
382 | 386 | </> |
383 | 387 | ); | ... | ... |
src/pages/performance/EvaGroupSetting/components/DraftList.tsx
1 | -import React, { useState } from "react"; | |
1 | +import React, { useEffect, useState } from "react"; | |
2 | 2 | import { PageHeaderWrapper } from "@ant-design/pro-layout"; |
3 | 3 | import { Button, Card, Table, Row, Space, Typography, Divider, Popconfirm, message } from "antd"; |
4 | 4 | import usePagination from "@/hooks/usePagination"; |
... | ... | @@ -22,6 +22,9 @@ export default ({ type }: Props) => { |
22 | 22 | status: 2, |
23 | 23 | type: 1, |
24 | 24 | }); |
25 | + useEffect(() => { | |
26 | + console.log("list", list); | |
27 | + }, [list]); | |
25 | 28 | const [visibleDetail, setVisibleDetail] = useState(false); |
26 | 29 | const [item, setItem] = useState<any>({}); |
27 | 30 | //删除 |
... | ... | @@ -69,7 +72,7 @@ export default ({ type }: Props) => { |
69 | 72 | </Row> |
70 | 73 | <Table |
71 | 74 | loading={loading} |
72 | - rowKey={(row) => `id${row.id}`} | |
75 | + rowKey={(row) => `id${row.draftId}`} | |
73 | 76 | dataSource={list} |
74 | 77 | pagination={paginationConfig} |
75 | 78 | scroll={{ x: 500 }} | ... | ... |
src/pages/performance/KpiGroupSetting/components/DraftList.tsx