Commit 757a713f2a6a437086d6eabb41832870ec5886f2
Merge remote-tracking branch 'origin/pms'
Showing
7 changed files
with
376 additions
and
4 deletions
config/routers/pms.ts
... | ... | @@ -47,10 +47,10 @@ export default [ |
47 | 47 | path: '/pms/storage/areaStorage', // 区域库设置 |
48 | 48 | component: './pms/storage/areaStorageSetting' |
49 | 49 | }, |
50 | - { | |
51 | - path: '/pms/partPlan/partSetting', // 配件设置 | |
52 | - component: './pms/partPlan/Setting' | |
53 | - }, | |
50 | + // { | |
51 | + // path: '/pms/partPlan/partSetting', // 配件设置 | |
52 | + // component: './pms/partPlan/Setting' | |
53 | + // }, | |
54 | 54 | { |
55 | 55 | path: '/pms/partPlan/amountPlan', // 指定金额计划 |
56 | 56 | component: './pms/partPlan/AmountPlan' |
... | ... | @@ -175,4 +175,20 @@ export default [ |
175 | 175 | path: '/pms/storage/partStock', // 配件锁库时长 |
176 | 176 | component: './pms/storage/partStock' |
177 | 177 | }, |
178 | + { | |
179 | + path: '/pms/setting/planSetting', // 计划设置 | |
180 | + component: './pms/setting/PlanSetting' | |
181 | + }, | |
182 | + { | |
183 | + path: '/pms/setting/transferSetting', // 调拨设置 | |
184 | + component: './pms/setting/TransferSetting' | |
185 | + }, | |
186 | + { | |
187 | + path: '/pms/setting/prepareSetting', // 备料设置 | |
188 | + component: './pms/setting/PrepareSetting' | |
189 | + }, | |
190 | + { | |
191 | + path: '/pms/setting/performanceSetting', // 绩效设置 | |
192 | + component: './pms/setting/PerformanceSetting' | |
193 | + }, | |
178 | 194 | ]; | ... | ... |
src/pages/pms/setting/PerformanceSetting/index.tsx
0 → 100644
1 | +import React, { useState } from 'react'; | |
2 | +import { Card, InputNumber, message } from 'antd'; | |
3 | +import { PageHeaderWrapper } from '@ant-design/pro-layout'; | |
4 | +import useInitail from '@/hooks/useInitail'; | |
5 | +import ConfirmBnt from '../components/ConfirmBnt'; | |
6 | +import { getDetail, saveApi, Item } from '../api'; | |
7 | + | |
8 | +export default function Index() { | |
9 | + const { data, setData, setLoading, loading } = useInitail<Item, { type: number }>(getDetail, {}, { type: 4 }); | |
10 | + const [disable, setDisable] = useState(false); | |
11 | + | |
12 | + function handleSave() { | |
13 | + saveApi({ ...data, type: 4 }).then(() => { | |
14 | + message.success("操作成功"); | |
15 | + setLoading(true); | |
16 | + setDisable(false); | |
17 | + }).catch((e: any) => { | |
18 | + message.error(e.message); | |
19 | + }); | |
20 | + } | |
21 | + | |
22 | + function handleCancel() { | |
23 | + setData(data); | |
24 | + setDisable(false); | |
25 | + } | |
26 | + | |
27 | + return ( | |
28 | + <PageHeaderWrapper title="绩效设置"> | |
29 | + <Card loading={loading}> | |
30 | + <div style={{ display: "flex", flexDirection: "column", fontSize: 16, padding: 20, }}> | |
31 | + <span style={{ marginBottom: 20 }}>1、库销比≥ | |
32 | + <InputNumber | |
33 | + disabled={!disable} | |
34 | + bordered={disable} | |
35 | + size="small" | |
36 | + controls={false} | |
37 | + style={{width: 60}} | |
38 | + value={data.ratioMorax1} | |
39 | + onChange={(value: any) => setData({ ...data, ratioMorax1: value })} | |
40 | + /> | |
41 | + 时每增加 | |
42 | + <InputNumber | |
43 | + disabled={!disable} | |
44 | + bordered={disable} | |
45 | + size="small" | |
46 | + controls={false} | |
47 | + style={{ width: 60 }} | |
48 | + value={data.ratioMorax2} | |
49 | + onChange={(value: any) => setData({ ...data, ratioMorax2: value })} | |
50 | + /> | |
51 | + 扣 | |
52 | + <InputNumber | |
53 | + disabled={!disable} | |
54 | + bordered={disable} | |
55 | + size="small" | |
56 | + controls={false} | |
57 | + style={{ width: 60 }} | |
58 | + value={data.ratioMorax3} | |
59 | + onChange={(value: any) => setData({ ...data, ratioMorax3: value })} | |
60 | + /> | |
61 | + % | |
62 | + </span> | |
63 | + <ConfirmBnt | |
64 | + disable={disable} | |
65 | + onOk={handleSave} | |
66 | + onCancel={handleCancel} | |
67 | + onEdit={() => { | |
68 | + setDisable(true); | |
69 | + setData(data); | |
70 | + }} | |
71 | + /> | |
72 | + </div> | |
73 | + </Card> | |
74 | + </PageHeaderWrapper> | |
75 | + ); | |
76 | +} | ... | ... |
src/pages/pms/setting/PlanSetting/index.tsx
0 → 100644
1 | +import React, { useState } from 'react'; | |
2 | +import { Card, InputNumber, message, Radio } from 'antd'; | |
3 | +import { PageHeaderWrapper } from '@ant-design/pro-layout'; | |
4 | +import useInitail from '@/hooks/useInitail'; | |
5 | +import ConfirmBnt from '../components/ConfirmBnt'; | |
6 | +import { getDetail, saveApi, Item } from '../api'; | |
7 | + | |
8 | +export default function Index() { | |
9 | + const { data, setData, setLoading, loading } = useInitail<Item, {type: number}>(getDetail, {}, {type: 1}); | |
10 | + const [disable, setDisable] = useState(false); | |
11 | + | |
12 | + function handleSave() { | |
13 | + saveApi({ ...data, type: 1 }).then(() => { | |
14 | + message.success("操作成功"); | |
15 | + setLoading(true); | |
16 | + setDisable(false); | |
17 | + }).catch((e: any) => { | |
18 | + message.error(e.message); | |
19 | + }); | |
20 | + } | |
21 | + | |
22 | + function handleCancel() { | |
23 | + setData(data); | |
24 | + setDisable(false); | |
25 | + } | |
26 | + | |
27 | + return ( | |
28 | + <PageHeaderWrapper title="计划设置"> | |
29 | + <Card loading={loading}> | |
30 | + <div style={{ display: "flex", flexDirection: "column", fontSize: 16, padding: 20, }}> | |
31 | + <span style={{ marginBottom: 20 }}>1、当库存为零,本月有出库,但90天月均出库量{'<'}1,动态库销比指定为: | |
32 | + <InputNumber | |
33 | + min={0} | |
34 | + max={10000} | |
35 | + disabled={!disable} | |
36 | + bordered={disable} | |
37 | + size="small" | |
38 | + style={{ width: 80 }} | |
39 | + value={data.ratio} | |
40 | + onChange={(value: any) => setData({ ...data, ratio: value })} | |
41 | + /> | |
42 | + </span> | |
43 | + <span style={{ marginBottom: 20 }}>2、配件外采价格管控:小于加权成本价 * | |
44 | + <InputNumber | |
45 | + min={0} | |
46 | + max={10} | |
47 | + disabled={!disable} | |
48 | + bordered={disable} | |
49 | + size="small" | |
50 | + style={{ width: 80 }} | |
51 | + value={data.limit} | |
52 | + onChange={(value: any) => setData({ ...data, limit: value })} | |
53 | + /> | |
54 | + </span> | |
55 | + <span style={{ marginBottom: 20 }}>3、低于库销比: | |
56 | + <InputNumber | |
57 | + min={0} | |
58 | + max={10} | |
59 | + disabled={!disable} | |
60 | + bordered={disable} | |
61 | + size="small" | |
62 | + style={{ width: 80 }} | |
63 | + value={data.noApprovalRatio} | |
64 | + onChange={(value: any) => setData({ ...data, noApprovalRatio: value })} | |
65 | + /> | |
66 | + ,配件计划不审批 | |
67 | + </span> | |
68 | + <span style={{ marginBottom: 20 }}>4、计划员能否修改订件的错误配件编码: | |
69 | + <Radio.Group value={Number(data.editBuyPartCode)} disabled={!disable} onChange={v => setData({ ...data, editBuyPartCode: !!v.target.value})}> | |
70 | + <Radio value={1}>是</Radio> | |
71 | + <Radio value={0}>否</Radio> | |
72 | + </Radio.Group> | |
73 | + </span> | |
74 | + <ConfirmBnt | |
75 | + disable={disable} | |
76 | + onOk={handleSave} | |
77 | + onCancel={handleCancel} | |
78 | + onEdit={() => { | |
79 | + setDisable(true); | |
80 | + setData(data); | |
81 | + }} | |
82 | + /> | |
83 | + </div> | |
84 | + </Card> | |
85 | + </PageHeaderWrapper> | |
86 | + ); | |
87 | +} | ... | ... |
src/pages/pms/setting/PrepareSetting/index.tsx
0 → 100644
1 | +import React, { useState } from 'react'; | |
2 | +import { Card, InputNumber, message } from 'antd'; | |
3 | +import { PageHeaderWrapper } from '@ant-design/pro-layout'; | |
4 | +import useInitail from '@/hooks/useInitail'; | |
5 | +import ConfirmBnt from '../components/ConfirmBnt'; | |
6 | +import { getDetail, saveApi, Item } from '../api'; | |
7 | + | |
8 | +export default function Index() { | |
9 | + const { data, setData, setLoading, loading } = useInitail<Item, { type: number }>(getDetail, {}, { type: 3 }); | |
10 | + const [disable, setDisable] = useState(false); | |
11 | + | |
12 | + function handleSave() { | |
13 | + saveApi({...data, type: 3}).then(() => { | |
14 | + message.success("操作成功"); | |
15 | + setLoading(true); | |
16 | + setDisable(false); | |
17 | + }).catch((e: any) => { | |
18 | + message.error(e.message); | |
19 | + }); | |
20 | + } | |
21 | + | |
22 | + function handleCancel() { | |
23 | + setData(data); | |
24 | + setDisable(false); | |
25 | + } | |
26 | + | |
27 | + return ( | |
28 | + <PageHeaderWrapper title="备料设置"> | |
29 | + <Card loading={loading}> | |
30 | + <div style={{ display: "flex", flexDirection: "column", fontSize: 16, padding: 20, }}> | |
31 | + <span style={{ marginBottom: 20 }}>1、备料时效: | |
32 | + <InputNumber | |
33 | + disabled={!disable} | |
34 | + step={1} | |
35 | + size="small" | |
36 | + bordered={disable} | |
37 | + style={{width: 80}} | |
38 | + value={data.prepareTime} | |
39 | + onChange={(value: any) => setData({ ...data, prepareTime: value })} | |
40 | + /> | |
41 | + 分钟/品种 | |
42 | + </span> | |
43 | + <ConfirmBnt | |
44 | + disable={disable} | |
45 | + onOk={handleSave} | |
46 | + onCancel={handleCancel} | |
47 | + onEdit={() => { | |
48 | + setDisable(true); | |
49 | + setData(data); | |
50 | + }} | |
51 | + /> | |
52 | + </div> | |
53 | + </Card> | |
54 | + </PageHeaderWrapper> | |
55 | + ); | |
56 | +} | ... | ... |
src/pages/pms/setting/TransferSetting/index.tsx
0 → 100644
1 | +import React, { useState } from 'react'; | |
2 | +import { Card, InputNumber, message } from 'antd'; | |
3 | +import { PageHeaderWrapper } from '@ant-design/pro-layout'; | |
4 | +import useInitail from '@/hooks/useInitail'; | |
5 | +import ConfirmBnt from '../components/ConfirmBnt'; | |
6 | +import { getDetail, saveApi, Item } from '../api'; | |
7 | + | |
8 | +export default function Index() { | |
9 | + const { data, setData, setLoading, loading } = useInitail<Item, { type: number }>(getDetail, {}, { type: 2 }); | |
10 | + const [disable, setDisable] = useState(false); | |
11 | + | |
12 | + function handleSave() { | |
13 | + saveApi({ ...data, type: 2 }).then(() => { | |
14 | + message.success("操作成功"); | |
15 | + setLoading(true); | |
16 | + setDisable(false); | |
17 | + }).catch((e: any) => { | |
18 | + message.error(e.message); | |
19 | + }); | |
20 | + } | |
21 | + | |
22 | + function handleCancel() { | |
23 | + setData(data); | |
24 | + setDisable(false); | |
25 | + } | |
26 | + | |
27 | + return ( | |
28 | + <PageHeaderWrapper title="调拨设置"> | |
29 | + <Card loading={loading}> | |
30 | + <div style={{ display: "flex", flexDirection: "column", fontSize: 16, padding: 20, }}> | |
31 | + <span style={{ marginBottom: 20 }}>1、调运起步价格: | |
32 | + <InputNumber | |
33 | + disabled={!disable} | |
34 | + size="small" | |
35 | + style={{ width: 80 }} | |
36 | + bordered={disable} | |
37 | + value={data.startingPrice} | |
38 | + onChange={(value: any) => setData({ ...data, startingPrice: value })} | |
39 | + /> | |
40 | + 元/次 | |
41 | + </span> | |
42 | + <span style={{ marginBottom: 20 }}>2、调运起步距离: | |
43 | + <InputNumber | |
44 | + disabled={!disable} | |
45 | + size="small" | |
46 | + style={{ width: 80 }} | |
47 | + bordered={disable} | |
48 | + value={data.startingDistance} | |
49 | + onChange={(value: any) => setData({ ...data, startingDistance: value })} | |
50 | + /> | |
51 | + 公里 | |
52 | + </span> | |
53 | + <span style={{ marginBottom: 20 }}>3、员工调运费用: | |
54 | + <InputNumber | |
55 | + disabled={!disable} | |
56 | + size="small" | |
57 | + style={{ width: 80 }} | |
58 | + bordered={disable} | |
59 | + value={data.transferAmount} | |
60 | + onChange={(value: any) => setData({ ...data, transferAmount: value })} | |
61 | + /> | |
62 | + 元/公里 | |
63 | + </span> | |
64 | + <ConfirmBnt | |
65 | + disable={disable} | |
66 | + onOk={handleSave} | |
67 | + onCancel={handleCancel} | |
68 | + onEdit={() => { | |
69 | + setDisable(true); | |
70 | + setData(data); | |
71 | + }} | |
72 | + /> | |
73 | + </div> | |
74 | + </Card> | |
75 | + </PageHeaderWrapper> | |
76 | + ); | |
77 | +} | ... | ... |
src/pages/pms/setting/api.ts
0 → 100644
1 | +import { http } from '@/typing/http'; | |
2 | +import request from '@/utils/request'; | |
3 | +import { PMS_HOST } from '@/utils/host'; | |
4 | + | |
5 | +export interface Item { | |
6 | + ratio?: number, // 当库存为零,本月有出库,但90天月均出库量<1,动态库销比指定为 | |
7 | + limit?: number, // 外采标准管控 | |
8 | + noApprovalRatio?: number | |
9 | + editBuyPartCode?:boolean | |
10 | + transferAmount?: number// 员工调运费用, 1.5元 / 公里 | |
11 | + prepareTime?: number // 备料时效 | |
12 | + startingPrice?: number// 调运起步价 | |
13 | + startingDistance?: number // 调运起步距离 | |
14 | + ratioMorax1?:string | |
15 | + ratioMorax2?:string | |
16 | + ratioMorax3?:string | |
17 | + type?:number | |
18 | +} | |
19 | + | |
20 | +/** | |
21 | + * 查询配件设置明细 | |
22 | + */ | |
23 | +export function getDetail(params: {type: number}): http.PromiseResp<Item> { | |
24 | + return request.get(`${PMS_HOST}/erp/part/setting/detail`, {params}); | |
25 | +} | |
26 | + | |
27 | +/** | |
28 | + * 保存配件设置 | |
29 | + */ | |
30 | +export function saveApi(params: Item): http.PromiseResp<void> { | |
31 | + return request.post(`${PMS_HOST}/erp/part/setting/save`, params); | |
32 | +} | ... | ... |
src/pages/pms/setting/components/ConfirmBnt.tsx
0 → 100644
1 | +import React from 'react'; | |
2 | +import { Button, Popconfirm } from 'antd'; | |
3 | + | |
4 | +interface Props { | |
5 | + disable: boolean | |
6 | + onCancel: () => any | |
7 | + onOk: () => any | |
8 | + onEdit: () => any | |
9 | +} | |
10 | +export default function Index({disable = false, onCancel = () => null, onOk = () => null, onEdit = () => null}: Props) { | |
11 | + return ( | |
12 | + <span style={{display: 'flex', justifyContent: 'center', marginTop: 30, fontSize: 30, marginBottom: 30}}> | |
13 | + {disable ? ( | |
14 | + <> | |
15 | + <Popconfirm | |
16 | + placement="top" | |
17 | + title="请确认数据是否填写正确!" | |
18 | + onConfirm={onOk} | |
19 | + onCancel={onCancel} | |
20 | + > | |
21 | + <Button style={{marginRight: 30 }} type="primary">保存</Button> | |
22 | + </Popconfirm> | |
23 | + <Button onClick={onCancel}>取消</Button> | |
24 | + </> | |
25 | + ) : (<Button type="primary" onClick={onEdit}>编辑</Button>)} | |
26 | + </span> | |
27 | + ); | |
28 | +} | ... | ... |