Commit 757a713f2a6a437086d6eabb41832870ec5886f2

Authored by by1642146903
2 parents d8b0d18c e8ed4786

Merge remote-tracking branch 'origin/pms'

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、库销比≥&nbsp;
  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 + &nbsp;时每增加&nbsp;
  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 + &nbsp;扣&nbsp;
  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 + &nbsp;&nbsp;%
  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,动态库销比指定为:&nbsp;&nbsp;
  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、配件外采价格管控:小于加权成本价 * &nbsp;&nbsp;
  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 + &nbsp;&nbsp;,配件计划不审批
  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 + &nbsp;&nbsp;分钟/品种
  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 + &nbsp;&nbsp;元/次
  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 + &nbsp;&nbsp;公里
  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 + &nbsp;&nbsp;元/公里
  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 +}
... ...