Commit f3db209c4b75d8a92b747c7cfb9c2a26ba191081
Merge branch 'master' into d-cas
Showing
15 changed files
with
396 additions
and
16 deletions
config/routers/pms.ts
... | ... | @@ -191,4 +191,12 @@ export default [ |
191 | 191 | path: '/pms/setting/performanceSetting', // 绩效设置 |
192 | 192 | component: './pms/setting/PerformanceSetting' |
193 | 193 | }, |
194 | + { | |
195 | + path: '/pms/setting/perTarget', // 绩效目标设置 | |
196 | + component: './pms/setting/PerTarget' | |
197 | + }, | |
198 | + { | |
199 | + path: '/pms/setting/freightTarget', // 运费目标设置 | |
200 | + component: './pms/setting/FreightTarget' | |
201 | + }, | |
194 | 202 | ]; | ... | ... |
src/pages/pms/entity.ts
... | ... | @@ -201,3 +201,20 @@ export const typeSenderObj: {[key: string]: string} = { |
201 | 201 | '调出锁定': '', |
202 | 202 | '': '', |
203 | 203 | }; |
204 | + | |
205 | +export function getUrl(url: string, obj: object): string { | |
206 | + if (!Object.keys(obj).length) { | |
207 | + return url; | |
208 | + } | |
209 | + const pa: string[] = []; | |
210 | + for (let k in obj) { | |
211 | + if (obj[k]) { | |
212 | + pa.push(`${k}=${obj[k]}`); | |
213 | + } | |
214 | + } | |
215 | + const st = pa.join("&"); | |
216 | + if (st) { | |
217 | + return `${url}?${st}`; | |
218 | + } | |
219 | + return ''; | |
220 | +} | ... | ... |
src/pages/pms/partPlan/CustBuyPlanProcess/api.ts
src/pages/pms/partPlan/CustBuyPlanProcess/index.tsx
... | ... | @@ -35,14 +35,31 @@ export default function Index() { |
35 | 35 | <div style={{ display: 'flex', alignItems: 'center', marginBottom: 20 }}> |
36 | 36 | <Search |
37 | 37 | allowClear |
38 | - enterButton | |
39 | 38 | placeholder="配件名称/编码搜索" |
40 | 39 | style={{ width: 220, marginRight: 10 }} |
41 | 40 | onSearch={e => setParams({keywords: e}, true)} |
42 | 41 | /> |
42 | + <Search | |
43 | + allowClear | |
44 | + placeholder="顾问名称搜索" | |
45 | + style={{ width: 200, marginRight: 10 }} | |
46 | + onSearch={e => setParams({ serviceName: e}, true)} | |
47 | + /> | |
48 | + <Search | |
49 | + allowClear | |
50 | + placeholder="车牌号搜索" | |
51 | + style={{ width: 200, marginRight: 10 }} | |
52 | + onSearch={e => setParams({ plateNo: e}, true)} | |
53 | + /> | |
54 | + <Search | |
55 | + allowClear | |
56 | + placeholder="VIN搜索" | |
57 | + style={{ width: 200, marginRight: 10 }} | |
58 | + onSearch={e => setParams({ vin: e}, true)} | |
59 | + /> | |
43 | 60 | <Select |
44 | 61 | allowClear |
45 | - placeholder="选择品牌" | |
62 | + placeholder="品牌筛选" | |
46 | 63 | style={{ width: 200, marginRight: 10 }} |
47 | 64 | onChange={v => setParams({ brandId: v }, true)} |
48 | 65 | showSearch |
... | ... | @@ -52,7 +69,7 @@ export default function Index() { |
52 | 69 | </Select> |
53 | 70 | <Select |
54 | 71 | allowClear |
55 | - placeholder="选择门店" | |
72 | + placeholder="门店筛选" | |
56 | 73 | style={{ width: 200, marginRight: 10 }} |
57 | 74 | onChange={v => setParams({shopId: v }, true)} |
58 | 75 | showSearch |
... | ... | @@ -91,6 +108,7 @@ export default function Index() { |
91 | 108 | <Column title="工单号" dataIndex="remark" /> |
92 | 109 | <Column title="品牌" dataIndex="brandName" /> |
93 | 110 | <Column title="门店名称" dataIndex="shopName" /> |
111 | + <Column title="服务顾问" dataIndex="userName" /> | |
94 | 112 | <Column title="状态" dataIndex="status" /> |
95 | 113 | |
96 | 114 | {/* <Column title="接车服务顾问" dataIndex="userName" /> */} | ... | ... |
src/pages/pms/partPlan/PlanPool/components/DetailModal.tsx
... | ... | @@ -5,6 +5,7 @@ import StorageTable from './StorageTable'; |
5 | 5 | import SeriesTable from './SeriesTable'; |
6 | 6 | import SpecTable from './SpecTable'; |
7 | 7 | import PartTable from './PartTable'; |
8 | +import OutFlowModal from './OutFlowModal'; | |
8 | 9 | |
9 | 10 | interface Props { |
10 | 11 | visible: boolean, |
... | ... | @@ -33,6 +34,7 @@ export default function Index(props: Props) { |
33 | 34 | {detailType == 3 && <SeriesTable type={type} detailType={detailType} id={id} showAnalyse={false} />} |
34 | 35 | {detailType == 4 && <SpecTable type={type} detailType={detailType} id={id} />} |
35 | 36 | {detailType == 5 && <PartTable type={type} detailType={detailType} id={id} showAnalyse={false} />} |
37 | + <OutFlowModal /> | |
36 | 38 | </Modal> |
37 | 39 | ); |
38 | 40 | } | ... | ... |
src/pages/pms/partPlan/PlanPool/components/Filter.tsx
1 | -import React from 'react'; | |
1 | +import React, { useEffect, useState } from 'react'; | |
2 | 2 | import { Input } from 'antd'; |
3 | 3 | import { useStore } from '../index'; |
4 | 4 | import debounce from 'lodash/debounce'; |
5 | -import {planPoolTypeData} from '@/pages/pms/entity'; | |
5 | +import { planPoolTypeData, getUrl } from '@/pages/pms/entity'; | |
6 | 6 | import usePagination from "@/hooks/usePagination"; |
7 | 7 | import {getStoragePage} from "@/pages/pms/storage/StorageManage/api"; |
8 | 8 | import useInitail from "@/hooks/useInitail"; |
... | ... | @@ -15,13 +15,18 @@ export default function Filter() { |
15 | 15 | const { list: storages } = usePagination<PartStorageSpace.PageVO>(getStoragePage, {pageSize: 1000}); |
16 | 16 | const { data: shops } = useInitail<PmsStoragePartShop.Option[], {}>(api.getShopApi, [], {}); |
17 | 17 | const { dfParams, setDfParams, partTypeData } = useStore(); |
18 | + const [url, setUrl] = useState('/api/pms/erp/plan/pool/export'); | |
19 | + | |
20 | + useEffect(() => { | |
21 | + setUrl(getUrl('/api/pms/erp/plan/pool/export', dfParams)); | |
22 | + }, [dfParams]); | |
18 | 23 | |
19 | 24 | const handleChangeKeywords = debounce((value: string) => { |
20 | 25 | setDfParams({ ...dfParams, current: 1, keywords: value }); |
21 | 26 | }, 500); |
22 | 27 | |
23 | 28 | return ( |
24 | - <div style={{display: 'flex', flexWrap: 'wrap', justifyContent: 'flex-start', marginBottom: 10}}> | |
29 | + <div style={{display: 'flex', flexWrap: 'wrap', justifyContent: 'flex-start', marginBottom: 10, alignItems: 'center'}}> | |
25 | 30 | <PmsSelect |
26 | 31 | style={{ width: 200, marginRight: 10}} |
27 | 32 | allowClear |
... | ... | @@ -71,6 +76,11 @@ export default function Filter() { |
71 | 76 | placeholder="配件编码|名称" |
72 | 77 | onSearch={v => handleChangeKeywords(v)} |
73 | 78 | /> |
79 | + <a | |
80 | + href={url} | |
81 | + > | |
82 | + 导出计划池表格 | |
83 | + </a> | |
74 | 84 | </div> |
75 | 85 | ); |
76 | 86 | } | ... | ... |
src/pages/pms/partPlan/PlanPool/index.tsx
... | ... | @@ -11,7 +11,6 @@ import st from "@/pages/pms/partPlan/PlanShipping/style.less"; |
11 | 11 | import Filter from './components/Filter'; |
12 | 12 | import {createStore} from "@/hooks/moz"; |
13 | 13 | import store from "./useStore"; |
14 | -import OutFlowModal from './components/OutFlowModal'; | |
15 | 14 | import CustBuyModal from './components/CustBuyModal'; |
16 | 15 | |
17 | 16 | export const { Provider, useStore } = createStore(store); |
... | ... | @@ -40,7 +39,7 @@ function Index() { |
40 | 39 | <StoragePartTable type={6} /> |
41 | 40 | </Tabs.TabPane> |
42 | 41 | </Tabs> |
43 | - <OutFlowModal /> | |
42 | + {/* <OutFlowModal /> */} | |
44 | 43 | <CustBuyModal /> |
45 | 44 | </Card> |
46 | 45 | </ConfigProvider> | ... | ... |
src/pages/pms/partPlan/PlanShipping/components/UploadExcel.tsx
... | ... | @@ -31,9 +31,17 @@ export default function UploadExcel({ getList, importVisible, setImportVisible, |
31 | 31 | useEffect(() => { |
32 | 32 | if (!importVisible) { |
33 | 33 | setUploadResult(null); |
34 | + setParam({ brandId: null, storageId: null, supplierId: null, settleShopId: null }); | |
35 | + setFileList([]); | |
34 | 36 | } |
35 | 37 | }, [importVisible]); |
36 | 38 | |
39 | + useEffect(() => { | |
40 | + if (!visibleDetail) { | |
41 | + setImportVisible(false); | |
42 | + } | |
43 | + }, [visibleDetail]); | |
44 | + | |
37 | 45 | function beforeUpload(file: any) { |
38 | 46 | const isLt2M = file.size / 1024 / 1024 < 20; |
39 | 47 | if (!isLt2M) { |
... | ... | @@ -145,7 +153,7 @@ export default function UploadExcel({ getList, importVisible, setImportVisible, |
145 | 153 | visible={visibleDetail} |
146 | 154 | item={uploadResult?.data || {}} |
147 | 155 | confirm |
148 | - onCancel={() => { setVisibleDetail(false); setImportVisible(false); }} | |
156 | + onCancel={() => setVisibleDetail(false)} | |
149 | 157 | fetchList={() => { setUploadResult(null); getList(); }} |
150 | 158 | /> |
151 | 159 | </Modal> | ... | ... |
src/pages/pms/setting/FreightTarget/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 | + id?: number, | |
7 | + index?:number | |
8 | + amount?: any, // | |
9 | + startDays?: any | |
10 | + endDays?: any// | |
11 | +} | |
12 | +interface Params { | |
13 | + shopId?: number | |
14 | + keywords?: string | |
15 | + storageId?: number | |
16 | +} | |
17 | +/** | |
18 | + * 查询绩效--运费目标达成设置 | |
19 | + */ | |
20 | +export function getDetail(params: Params): http.PromiseResp<Item[]> { | |
21 | + return request.get(`${PMS_HOST}/erp/target/amount/setting/get/list`, { params }); | |
22 | +} | |
23 | +/** | |
24 | + * 新增或编辑绩效--运费目标设置 | |
25 | + */ | |
26 | +export function saveApi(params: {list: Item[]}) { | |
27 | + return request.post(`${PMS_HOST}/erp/target/amount/setting/add/or/update`, params); | |
28 | +} | ... | ... |
src/pages/pms/setting/FreightTarget/components/AddModal.tsx
0 → 100644
src/pages/pms/setting/FreightTarget/index.tsx
0 → 100644
1 | +import React, { useState } from 'react'; | |
2 | +import { PageHeaderWrapper } from '@ant-design/pro-layout'; | |
3 | +import { Card, InputNumber, Button, message } from 'antd'; | |
4 | +import useInitial from '@/hooks/useInitail'; | |
5 | +import { getDetail, saveApi, Item} from './api'; | |
6 | +import ConfirmBnt from '../components/ConfirmBnt'; | |
7 | +import { DeleteOutlined } from '@ant-design/icons'; | |
8 | + | |
9 | +const Index = () => { | |
10 | + const [disable, setDisable] = useState(false); | |
11 | + const { data, setData, loading, setLoading } = useInitial<Item[], object>(getDetail, [{ startDays: 1, endDays: null, amount: null }, { startDays: null, endDays: null, amount: null }], {}); | |
12 | + | |
13 | + const handleAdd = () => { | |
14 | + setData([...data, { startDays: null, endDays: null, amount: null }]); | |
15 | + }; | |
16 | + | |
17 | + const handleInputChange = (index: number, p: any) => { | |
18 | + let arr = data; | |
19 | + if (p.endDays) { | |
20 | + arr[index + 1].startDays = p.endDays + 1; | |
21 | + } | |
22 | + setData(arr.map((it, i) => { | |
23 | + if (index == i) { | |
24 | + return { ...it, ...p}; | |
25 | + } else { | |
26 | + return it; | |
27 | + } | |
28 | + } | |
29 | + )); | |
30 | + }; | |
31 | + | |
32 | + const handleDel = (event: any, index: number) => { | |
33 | + let arr = data; | |
34 | + arr.splice(index, 1); | |
35 | + arr[arr.length -1].startDays = arr[arr.length-2].endDays+1; | |
36 | + setData(arr); | |
37 | + }; | |
38 | + | |
39 | + const svae = () => { | |
40 | + saveApi({list: data}).then(() => { | |
41 | + message.success('保存成功'); | |
42 | + setLoading(true); | |
43 | + setDisable(false); | |
44 | + }).catch(e => message.error(e.message)); | |
45 | + }; | |
46 | + | |
47 | + return ( | |
48 | + <PageHeaderWrapper title="运费目标设置"> | |
49 | + <Card loading={loading}> | |
50 | + {!!data?.length && data.map((it, index) => ( | |
51 | + index < data.length-1 ? ( | |
52 | + <div key={index} style={{ display: 'flex', alignItems: 'center', marginBottom: 10 }}> | |
53 | + <span style={{ marginRight: 10 }}>{index + 1}、</span> | |
54 | + <> | |
55 | + 缺件起始天数 | |
56 | + <InputNumber | |
57 | + disabled | |
58 | + min={index > 0 ? data[index - 1].endDays : 1} | |
59 | + value={index > 0 ? data[index - 1].endDays+1 : 1} | |
60 | + style={{ width: 100, marginLeft: 10, marginRight: 20 }} | |
61 | + /> | |
62 | + </> | |
63 | + <> | |
64 | + 缺件结束天数 | |
65 | + <InputNumber | |
66 | + disabled={!disable} | |
67 | + min={0} | |
68 | + value={it.endDays} | |
69 | + onChange={value => { | |
70 | + handleInputChange(index, { startDays: index > 0 ? data[index - 1].endDays + 1 : it.startDays, endDays: value }); | |
71 | + }} | |
72 | + style={{ width: 100, marginLeft: 10, marginRight: 20 }} | |
73 | + /> | |
74 | + </> | |
75 | + <> | |
76 | + 运费统计增加 | |
77 | + <InputNumber | |
78 | + disabled={!disable} | |
79 | + addonAfter="元" | |
80 | + value={it.amount} | |
81 | + min={0} | |
82 | + onChange={value => handleInputChange(index, { amount: value })} | |
83 | + style={{ width: 100, marginLeft: 10, marginRight: 20 }} | |
84 | + /> | |
85 | + </> | |
86 | + {(index == data.length - 2 && disable && index != 0) ? <Button onClick={(event: any) => handleDel(event, index)} shape="circle" icon={<DeleteOutlined />} /> : ''} | |
87 | + </div> | |
88 | + ) : | |
89 | + ( | |
90 | + <div style={{ display: 'flex', alignItems: 'center', marginBottom: 10 }}> | |
91 | + <span style={{ marginRight: 10 }}>{data.length}、</span> | |
92 | + <div style={{ marginRight: 20 }}> | |
93 | + <InputNumber disabled min={0} value={data[data.length - 2].endDays + 1} style={{ width: 100, marginRight: 10 }} /> | |
94 | + 天及以上 | |
95 | + </div> | |
96 | + <> | |
97 | + 运费统计增加 | |
98 | + <InputNumber | |
99 | + disabled={!disable} | |
100 | + addonAfter="元" | |
101 | + value={it.amount} | |
102 | + min={0} | |
103 | + onChange={value => handleInputChange(data.length - 1, { startDays: index > 0 ? data[index - 1].endDays + 1 : it.startDays, endDays: null, amount: value })} | |
104 | + style={{ width: 100, marginLeft: 10, marginRight: 20 }} | |
105 | + /> | |
106 | + </> | |
107 | + </div> | |
108 | + ) | |
109 | + ))} | |
110 | + <Button type="default" disabled={!disable} onClick={() => handleAdd()}>添加梯度</Button> | |
111 | + <ConfirmBnt | |
112 | + disable={disable} | |
113 | + onOk={() => svae()} | |
114 | + onCancel={() => { setDisable(false); setLoading(true); }} | |
115 | + onEdit={() => { | |
116 | + setDisable(true); | |
117 | + setData(data); | |
118 | + }} | |
119 | + /> | |
120 | + </Card> | |
121 | + </PageHeaderWrapper> | |
122 | + ); | |
123 | +}; | |
124 | +export default Index; | |
0 | 125 | \ No newline at end of file | ... | ... |
src/pages/pms/setting/PerTarget/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 | + id?: number, | |
7 | + amount?: number, // | |
8 | + days?: number | |
9 | + storageId?: number// 员工调运费用, 1.5元 / 公里 | |
10 | + shopId?: number // 备料时效 | |
11 | + storageName?: string | |
12 | + shopName?: string | |
13 | +} | |
14 | +interface Params { | |
15 | + shopId?:number | |
16 | + keywords?:string | |
17 | + storageId?:number | |
18 | +} | |
19 | +/** | |
20 | + * 查询绩效--目标设置明细 | |
21 | + */ | |
22 | +export function getDetail(params: Params): http.PromiseResp<Item[]> { | |
23 | + return request.get(`${PMS_HOST}/erp/target/setting/get/list`, { params }); | |
24 | +} | |
25 | +/** | |
26 | + * 新增或编辑绩效--目标设置明细 | |
27 | + */ | |
28 | +export function saveApi(params: Item) { | |
29 | + return request.post(`${PMS_HOST}/erp/target/setting/add/or/update`, params); | |
30 | +} | |
31 | +/** | |
32 | + * 删除绩效--目标设置明细 | |
33 | + */ | |
34 | +export function DeleteApi(params: {id?: number}) { | |
35 | + return request.post(`${PMS_HOST}/erp/target/setting/delete`, params, {contentType: 'form-urlencoded'}); | |
36 | +} | ... | ... |
src/pages/pms/setting/PerTarget/components/AddModal.tsx
0 → 100644
1 | +import React, { useEffect } from 'react'; | |
2 | +import {Modal, Form, InputNumber, message} from 'antd'; | |
3 | +import PmsSelsct from '@/pages/pms/comonents/PmsSelect'; | |
4 | +import { getStoragePage } from '@/pages/pms/storage/StorageManage/api'; | |
5 | +import usePagination from '@/hooks/usePagination'; | |
6 | +import { saveApi } from '../api'; | |
7 | + | |
8 | +const {Item} = Form; | |
9 | + | |
10 | +interface Props { | |
11 | + item:any | |
12 | + visible:boolean | |
13 | + onCancel:Function | |
14 | + refesh:Function | |
15 | +} | |
16 | + | |
17 | +export default function Index(props: Props) { | |
18 | + const { item, onCancel, visible, refesh } = props; | |
19 | + const [form] = Form.useForm(); | |
20 | + const { list: storages } = usePagination<PartStorageSpace.PageVO>(getStoragePage, { pageSize: 1000 }); | |
21 | + | |
22 | + const OK = () => { | |
23 | + form.validateFields().then(fileds => { | |
24 | + const params = { | |
25 | + id: item?.id, | |
26 | + storageId: fileds.storageId, | |
27 | + days: fileds.days, | |
28 | + amount: fileds.amount | |
29 | + }; | |
30 | + saveApi(params).then(res => { | |
31 | + message.success("提交成功"); | |
32 | + onCancel(); | |
33 | + refesh(); | |
34 | + }).catch(e => { | |
35 | + message.error(e.message); | |
36 | + }); | |
37 | + }); | |
38 | + }; | |
39 | + | |
40 | + useEffect(() => { | |
41 | + if (visible && item.id) { | |
42 | + form.setFieldsValue({ | |
43 | + ...item | |
44 | + }); | |
45 | + } | |
46 | + if (!visible) { | |
47 | + form.resetFields(); | |
48 | + } | |
49 | + }, [visible]); | |
50 | + | |
51 | + return ( | |
52 | + <Modal | |
53 | + open={visible} | |
54 | + maskClosable={false} | |
55 | + onCancel={() => onCancel()} | |
56 | + onOk={() => OK()} | |
57 | + title={item.id ? '编辑' : '新增'} | |
58 | + > | |
59 | + <Form form={form} labelCol={{span: 6}} wrapperCol={{span: 16}}> | |
60 | + <Item name="storageId" label="库房" required rules={[{ required: true, message: '请选择库房' }]}> | |
61 | + <PmsSelsct | |
62 | + style={{width: 300}} | |
63 | + options={storages.map((item: PartStorageSpace.PageVO) => ({ value: item.id, label: item.storageName }))} | |
64 | + /> | |
65 | + </Item> | |
66 | + <Item name="days" label="订件时长目标" required rules={[{ required: true, message: '请输入' }]}> | |
67 | + <InputNumber style={{ width: 300 }} addonAfter="天" /> | |
68 | + </Item> | |
69 | + <Item name="amount" label="运费目标" required rules={[{ required: true, message: '请输入' }]}> | |
70 | + <InputNumber style={{ width: 300 }} addonAfter="元" /> | |
71 | + </Item> | |
72 | + </Form> | |
73 | + </Modal> | |
74 | + ); | |
75 | +} | |
0 | 76 | \ No newline at end of file | ... | ... |
src/pages/pms/setting/PerTarget/index.tsx
0 → 100644
1 | +import React, { useState } from 'react'; | |
2 | +import { PageHeaderWrapper } from '@ant-design/pro-layout'; | |
3 | +import { Table, Button, Card, Popconfirm, Divider, message } from 'antd'; | |
4 | +import AddModal from './components/AddModal'; | |
5 | +import {Item, getDetail, DeleteApi} from './api'; | |
6 | +import useInitial from '@/hooks/useInitail'; | |
7 | + | |
8 | +const {Column} = Table; | |
9 | + | |
10 | +const Index = () => { | |
11 | + const [current, setCurrent] = useState<{visible:boolean, item?:any}>({visible: false, item: {}}); | |
12 | + const { data, loading, setParams } = useInitial<Item[], object>(getDetail, [], {}); | |
13 | + | |
14 | + const dele = (id?: number) => { | |
15 | + DeleteApi({id}).then(res => { | |
16 | + message.success('操作成功'); | |
17 | + setParams({}, true); | |
18 | + }).catch(e => message.error(e.message)); | |
19 | + }; | |
20 | + | |
21 | + return ( | |
22 | + <PageHeaderWrapper title="绩效目标设置"> | |
23 | + <Card> | |
24 | + <div style={{display: 'flex', justifyContent: 'flex-end', marginBottom: 20}}> | |
25 | + <Button type="primary" onClick={() => setCurrent({visible: true, item: {}})}>新增</Button> | |
26 | + </div> | |
27 | + <Table | |
28 | + dataSource={data} | |
29 | + loading={loading} | |
30 | + rowKey={r => `${r.id}`} | |
31 | + pagination={false} | |
32 | + > | |
33 | + <Column title="库房" dataIndex="storageName" /> | |
34 | + <Column title="门店" dataIndex="shopName" /> | |
35 | + <Column title="订件时长目标(天)" dataIndex="days" /> | |
36 | + <Column title="运费目标(元)" dataIndex="amount" /> | |
37 | + <Column | |
38 | + title="操作" | |
39 | + render={(r:Item) => ( | |
40 | + <> | |
41 | + <a onClick={() => setCurrent({visible: true, item: r})}>编辑</a> | |
42 | + <Divider type="vertical" /> | |
43 | + <Popconfirm | |
44 | + title="确认删除" | |
45 | + onConfirm={() => dele(r.id)} | |
46 | + > | |
47 | + <a>删除</a> | |
48 | + </Popconfirm> | |
49 | + </> | |
50 | + )} | |
51 | + /> | |
52 | + </Table> | |
53 | + <AddModal item={current.item} visible={current.visible} onCancel={() => setCurrent({visible: false, item: {}})} refesh={() => setParams({}, true)} /> | |
54 | + </Card> | |
55 | + </PageHeaderWrapper> | |
56 | + ); | |
57 | +}; | |
58 | +export default Index; | |
0 | 59 | \ No newline at end of file | ... | ... |
src/pages/pms/setting/PlanSetting/index.tsx
1 | 1 | import React, { useState } from 'react'; |
2 | -import { Card, InputNumber, message, Radio } from 'antd'; | |
2 | +import { Card, InputNumber, message } from 'antd'; | |
3 | 3 | import { PageHeaderWrapper } from '@ant-design/pro-layout'; |
4 | 4 | import useInitail from '@/hooks/useInitail'; |
5 | 5 | import ConfirmBnt from '../components/ConfirmBnt'; |
... | ... | @@ -65,12 +65,6 @@ export default function Index() { |
65 | 65 | /> |
66 | 66 | ,配件计划不审批 |
67 | 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 | 68 | <ConfirmBnt |
75 | 69 | disable={disable} |
76 | 70 | onOk={handleSave} | ... | ... |