| |
| import React, { useState, useEffect } from 'react'; |
| import { Form, Input, InputNumber, Popconfirm, Table, Typography, message, DatePicker, Select } from 'antd'; |
| import { Menu, MenuSearchParams } from './service'; |
| import { PageResponseData } from '@/component/basicTable/type'; |
| import { useCutPlanCreateMutation, useLazyComputeTotalLayerListQuery, useCutPlanProcessCreateMutation, useCutPlanDetailListMutation } from '@/restapi/service/cropListManage/cropListManage'; |
| import moment from 'moment'; |
| import postGrest from "@/redux/postgrest" |
| import CroppModel from '@/views/orderManagement/productionList/model/CroppModel'; |
| import { filter } from 'lodash'; |
| const { Option } = Select |
| interface Item { |
| id?: any, |
| sew_date?: any, |
| cut_date?: any, |
| target_capacity?: any, |
| today_cut_qty?: any, |
| style_number?: any, |
| po?: any, |
| key?: any, |
| materielId?:any |
| } |
| interface EditableCellProps extends React.HTMLAttributes<HTMLElement> { |
| editing: boolean; |
| dataIndex: string | number; |
| title: any; |
| inputType: 'number' | 'text' | 'input'; |
| record: any; |
| index: number; |
| children: React.ReactNode; |
| } |
| const MenuManage: React.FC<any> = (props) => { |
| const { drawerData } = props |
| const [customerId, setCustomerId] = useState(''); |
| const [CutPlanDetailList] = useCutPlanDetailListMutation() |
| const onchangeBed = (e: any) => { |
| console.log(e, "value") |
| form.setFieldsValue({ bedQty: Math.ceil(Number(form.getFieldValue("totalLayer")) / Number(e.target.value)) }) |
| } |
| const onChangeValue = (value: any) => { |
| computeTotalLayerList({ cutPlanId: drawerData.id, cutSchemeId: value }) |
| .unwrap() |
| .then((response: any) => { |
| if (response.code === 200) { |
| setCustomerId(value) |
| |
| form.setFieldsValue({ totalLayer: response.data }) |
| |
| initPageList(); |
| } |
| }); |
| } |
| const [form] = Form.useForm(); |
| const [editingKey, setEditingKey] = useState(''); |
| const isEditing = (record: Item) => record.id === editingKey; |
| const [materieList, setMaterieList] = useState<any[]>([]) |
| const [cutPlanDetailId, setCutPlanDetailId] = useState<any>("") |
| const [cutPlanCreate] = useCutPlanCreateMutation() |
| const [cutPlanProcessCreate] = useCutPlanProcessCreateMutation() |
| const edit = (record: any) => { |
| |
| postGrest().getSelect('search_cut_scheme', "id,name", { manufacture_id: `eq.${record.manufactureId}`,materiel_id:`eq.${record.materielId}` }).then((response: any) => { |
| if (!response.code) { |
| setMaterieList(response.data) |
| } else { |
| message.warning(response.message) |
| } |
| }) |
| setCutPlanDetailId(record.setCutPlanDetailId) |
| |
| let obj: any = {} |
| obj.cutSchemeName = record.cutSchemeName |
| obj.layer = record.layer |
| console.log({ ...obj }, "objobjobjobjobj") |
| form.setFieldsValue({ ...obj }); |
| setEditingKey(record.id); |
| }; |
| |
| const EditableCell: React.FC<EditableCellProps> = ({ |
| editing, |
| dataIndex, |
| title, |
| inputType, |
| record, |
| index, |
| children, |
| ...restProps |
| }) => { |
| const selectNode = (dataIndex == 'layer' || dataIndex == 'totalLayer' || dataIndex == 'bedQty') ? <Input onChange={onchangeBed} disabled={dataIndex == 'totalLayer' || dataIndex == 'bedQty'} /> : |
| <Select |
| style={{ width: "300px" }} |
| placeholder="请选择尺寸" |
| optionFilterProp="children" |
| onChange={onChangeValue} |
| > |
| {materieList && materieList.map((item: any) => ( |
| <Option value={item.id}>{item.name}</Option> |
| ))} |
| </Select> |
| return ( |
| <td {...restProps}> |
| {editing ? ( |
| <Form.Item |
| name={dataIndex} |
| style={{ margin: 0 }} |
| rules={[ |
| { |
| required: true, |
| message: `请输入${title}!`, |
| }, |
| ]} |
| > |
| {selectNode} |
| </Form.Item> |
| ) : ( |
| children |
| )} |
| </td> |
| ); |
| }; |
| const cancel = () => { |
| setEditingKey(''); |
| }; |
| const [loading, setLoading] = useState<boolean>(false); |
| const [computeTotalLayerList] = useLazyComputeTotalLayerListQuery() |
| const [page, setPage] = useState<{ pageIndex: number; pageSize: number }>({ pageIndex: 1, pageSize: 10 }); |
| const [menuData, setMenuData] = useState<{ list: Menu[]; page: PageResponseData }>({ |
| list: [], |
| page: {}, |
| }); |
| const initPageList = async (params?: MenuSearchParams) => { |
| setLoading(true); |
| try { |
| let text = { |
| ...page, |
| ...{ cutPlanId: drawerData.id } |
| } |
| CutPlanDetailList(text) |
| .unwrap() |
| .then((response: any) => { |
| if (response.code === 200) { |
| setMenuData({ |
| list: response.data, page: { |
| dataTotal: response.total, |
| pageTotal: response.pages, |
| size: response.size, |
| page: response.current |
| } |
| }); |
| } |
| }); |
| } catch (error) { |
| } finally { |
| setLoading(false); |
| } |
| }; |
| useEffect(() => { |
| initPageList(); |
| }, [page]); |
| const save = async (key: React.Key) => { |
| console.log(key, "keykeykey") |
| try { |
| const row = await form.validateFields(); |
| cutPlanProcessCreate({ |
| materielId: key, cutSchemeId: customerId, cutPlanId: drawerData.id, |
| totalLayer: form.getFieldValue("totalLayer"), |
| bedQty: form.getFieldValue("bedQty"), |
| layer: form.getFieldValue("layer"), |
| |
| }) |
| .unwrap() |
| .then((response: any) => { |
| if (response.code === 200) { |
| message.success("编辑成功") |
| initPageList(); |
| } |
| }); |
| |
| |
| |
| |
| |
| |
| |
| |
| console.log(row, "rowrowrowrow") |
| const newData = [...menuData.list]; |
| const index = newData.findIndex(item => key === item.id); |
| if (index > -1) { |
| const item = newData[index]; |
| newData.splice(index, 1, { |
| ...item, |
| ...row |
| }); |
| console.log(newData, "newData22222") |
| setEditingKey(''); |
| } else { |
| const item = newData[index]; |
| newData.splice(index, 1, { |
| ...item, |
| ...row |
| }); |
| setEditingKey(''); |
| } |
| } catch (errInfo) { |
| console.log('Validate Failed:', errInfo); |
| } |
| }; |
| |
| const columns = [ |
| { |
| title: '款式', |
| dataIndex: 'styleNumber', |
| editable: false, |
| |
| }, |
| { |
| title: '物料代码', |
| dataIndex: 'materielCode', |
| editable: false, |
| |
| }, |
| { |
| title: '物料名称', |
| dataIndex: 'materielName', |
| editable: false, |
| inputType: "text", |
| }, |
| |
| { |
| title: '裁剪方案', |
| dataIndex: 'cutSchemeName', |
| editable: true, |
| inputType: "input", |
| }, |
| { |
| title: '铺布总数', |
| dataIndex: 'totalLayer', |
| editable: true, |
| inputType: "input", |
| |
| }, |
| { |
| title: '铺布层数', |
| dataIndex: 'layer', |
| editable: true, |
| |
| }, |
| { |
| title: '床数', |
| dataIndex: 'bedQty', |
| editable: true, |
| |
| }, |
| |
| { |
| title: 'operation', |
| dataIndex: 'operation', |
| render: (_: any, record: Item) => { |
| const editable = isEditing(record); |
| return editable ? ( |
| <span> |
| <Typography.Link onClick={() => save(record.materielId)} style={{ marginRight: 8 }}> |
| 保存 |
| </Typography.Link> |
| <Popconfirm title="确定取消?" onConfirm={cancel}> |
| <a>取消</a> |
| </Popconfirm> |
| </span> |
| ) : ( |
| <Typography.Link disabled={editingKey !== ''} onClick={() => edit(record)}> |
| 修改 |
| </Typography.Link> |
| ); |
| }, |
| }, |
| ]; |
| |
| const mergedColumns = columns.map(col => { |
| if (!col.editable) { |
| return col; |
| } |
| return { |
| ...col, |
| onCell: (record: Item) => ({ |
| record, |
| inputType: col.dataIndex === 'age' ? 'number' : 'text', |
| dataIndex: col.dataIndex, |
| title: col.title, |
| editing: isEditing(record), |
| }), |
| }; |
| }); |
| return ( |
| <Form form={form} component={false}> |
| <Table |
| rowKey="id" |
| components={{ |
| body: { |
| cell: EditableCell, |
| }, |
| }} |
| bordered |
| dataSource={menuData.list} |
| columns={mergedColumns} |
| rowClassName="editable-row" |
| pagination={false} |
| /> |
| </Form> |
| ); |
| } |
| |
| export default MenuManage; |

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!