import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react' import styles from './index.module.scss' import { useDispatch, useSelector } from 'react-redux' import { D2_APIgetList } from '@/store/action/D2storSet' import { RootState } from '@/store' import { useParams } from 'react-router-dom' import { FourTableType } from '@/pages/B_enterTibet/B1collect/type' import { C1GoodType } from '@/pages/A3_ledger/C1ledger/type' import { D5_APIcreate, D5_APIdel, D5_APIgetInfo, D5_APIgetStorageNum, D5_APIrevocation, D5_APIsaveApply, D5_APIsaveAudit, D5_APIsaveCreate, D5_APIsaveDraft } from '@/store/action/D5moveStor' import { API_goodsInfo } from '@/store/action/C1ledger' import { pageTitTxtObj } from '../../D4impStor/D4edit' import dayjs from 'dayjs' import { MessageFu } from '@/utils/message' import { findFirstDuplicate } from '../../D4impStor/data' import history, { btnFlagFu2, openGoodsInfoFu } from '@/utils/history' import classNames from 'classnames' import { Button, DatePicker, Input, InputNumber, Modal, Select } from 'antd' import TextArea from 'antd/es/input/TextArea' import MyPopconfirm from '@/components/MyPopconfirm' import { EXbtnFu } from '@/utils/EXBtn' import D4check, { D4checkArrType } from '../../D4impStor/D4edit/D4check' import X3auditInfo from '@/pages/X_stock/X3auditInfo' import { D4tableCgoods, statusObj } from '@/utils/tableData' import MyTable from '@/components/MyTable' import ZflowTable from '@/components/ZflowTable' import ZupFileTable from '@/components/ZupFileTable' import Y1cathet from '@/pages/Y_goodsDetails/Y1cathet' import ZGaddNow from '@/components/ZGaddNow' function D5edit() { // 获取库房设置列表 用于分库缩写下拉 const dispatch = useDispatch() useEffect(() => { dispatch(D2_APIgetList({ pageNum: 1, pageSize: 99999 })) }, [dispatch]) const { list: storageIdArr } = useSelector((state: RootState) => state.D2storSet.tableInfo) const { key, id } = useParams() // key:1 新增 2编辑 3审批 4查看 // 滚到顶部 const sollrDom = useRef(null) // 顶部数据 const [topInfo, setTopInfo] = useState({} as FourTableType) // 藏品清单快照数据 const [snaps, setSnaps] = useState([]) const delSnapIdsRef = useRef([]) const snapsID2ref = useRef<{ goodsId: number; id: number }[]>([]) // 创建订单 const creatFu = useCallback(async () => { const res = await D5_APIcreate() if (res.code === 0) { // 从藏品详情点击按钮进来 const urlAll = window.location.href if (urlAll.includes('?id=')) { const urlId = urlAll.split('?id=')[1] const res2 = await API_goodsInfo(Number(urlId)) if (res2.code === 0) { setTopInfo({ ...res.data, storageOutId: res2.data.storageId }) setSnaps([res2.data]) } } else setTopInfo(res.data) } }, []) // 获取详情 const getInfoFu = useCallback( async (id2?: number) => { const res = await D5_APIgetInfo(id2 || id) if (res.code === 0) { const data = res.data setTopInfo(data) // 藏品清单快照信息id对比 const arrTemp: any = [] const snapsTemp = data.snaps || [] snapsTemp.forEach((v: any) => { snapsID2ref.current.push({ goodsId: v.goodsId, id: v.id }) const obj = JSON.parse(v.snap || '{}') if (obj.id) obj.id2 = v.id arrTemp.push(obj) }) setSnaps(arrTemp) } }, [id] ) useEffect(() => { if (key === '1') creatFu() else getInfoFu() if (sollrDom.current) sollrDom.current.scrollTop = 0 }, [creatFu, getInfoFu, key]) const pageTitTxt = useMemo(() => { return Reflect.get(pageTitTxtObj, key) }, [key]) const timeChange = useCallback( (e: any, key: 'date') => { setTopInfo({ ...topInfo, [key]: dayjs(e).format('YYYY-MM-DD') }) }, [topInfo] ) // 审批意见的ref const ZAuditRef = useRef(null) // 审批的sta const [auditSta, setAuDitSta] = useState('') // 字段的校验 const checkFu = useCallback(() => { if (!topInfo.date) { MessageFu.warning('请选择移库日期') return true } if (!topInfo.num) { MessageFu.warning('请输入移库单编号') return true } if (!topInfo.storageOutId) { MessageFu.warning('请选择出库分库缩写') return true } if (!topInfo.storageId) { MessageFu.warning('请选择入库分库缩写') return true } if (!topInfo.reason) { MessageFu.warning('请输入移库原因') return true } if (!topInfo.sonUser) { MessageFu.warning('请输入移库人员') return true } }, [topInfo]) // 新增的底部按钮点击 const btnClickFu = useCallback( async (val: '草稿' | '创建' | '保存' | '审批') => { if (checkFu()) { if (sollrDom.current) sollrDom.current.scrollTop = 0 return } if (val !== '草稿') { if (snaps.length === 0) return MessageFu.warning('请添加藏品') if (snaps.some(v => !v.siteNumNew)) return MessageFu.warning('请输入入库分库号') // 分库号输入重复校验 const siteNumArr = snaps.map(v => v.siteNumNew!) const num = findFirstDuplicate(siteNumArr) if (num) return MessageFu.warning(`入库分库号${num}重复`) } if (val === '审批') { // console.log('审批信息富文本', rtf2) if (!auditSta) { if (sollrDom.current) sollrDom.current.scrollTop = 0 return MessageFu.warning('请选择审批结果') } const rtf2 = ZAuditRef.current?.resData() const res: any = await D5_APIsaveAudit({ orderId: topInfo.id, rtfOpinion: rtf2, status: auditSta === '同意' ? 1 : 2 }) if (res.code === 0) { MessageFu.success('审批成功') // 跳详情页 history.push(`/moveStor_edit/4/${topInfo.id}`) } else if (res.code === 3101) { const data = JSON.parse(res.msg || '[]') setCheckArr(data) } } else { const obj = { ...topInfo, goodsIds: snaps.map(v => v.id).join(','), siteNums: snaps.map(v => v.siteNumNew).join(','), delSnapIds: delSnapIdsRef.current.length ? delSnapIdsRef.current : '', snaps: snaps.map(v => ({ goodsId: v.id, id: v.id2 ? v.id2 : null, orderId: topInfo.id, siteNum: v.siteNumNew, snap: JSON.stringify(v) })) } // console.log(123, obj.snaps) // if (1 + 1 === 2) return if (val === '草稿') { // 存草稿 当前页保存 不跳转 const res = await D5_APIsaveDraft(obj) if (res.code === 0) { MessageFu.success('草稿保存成功') getInfoFu(topInfo.id) } } else { const res: any = val === '创建' ? await D5_APIsaveCreate(obj) : await D5_APIsaveApply(obj) if (res.code === 0) { MessageFu.success(`${val}成功`) // 跳到详情页 history.push(`/moveStor_edit/4/${topInfo.id}`) } else if (res.code === 3101) { const data = JSON.parse(res.msg || '[]') // setCheckArr(data) const siteNumArr = data.map((v: any) => v.siteNum) MessageFu.warning(`入库分库号${siteNumArr}已存在`) } } } }, [auditSta, checkFu, getInfoFu, snaps, topInfo] ) // 打开侧边栏 const [cathet, setCathet] = useState(0) // 表格的输入框改变 const tableInputChange = useCallback( (id: number, val: number | null, key: 'siteNumNew') => { setSnaps( snaps.map(v => ({ ...v, [key]: v.id === id ? val : v[key] })) ) }, [snaps] ) const startBtn = useMemo(() => { return [ { title: '编号', render: (item: C1GoodType) => { return ( setCathet(item.id)} className={classNames('D1GtNum', item.id === cathet ? 'D1GtNumAc' : '')} > {item.num || '(空)'} ) } }, { title: '登记号类型', render: (item: C1GoodType) => item.numName || '(空)' }, // { // title: '出库分库号', // render: (item: C1GoodType) => item.siteNumOld || '(空)' // }, { title: (
* 入库分库号
), width: 180, render: (item: C1GoodType) => ( tableInputChange(item.id, e, 'siteNumNew')} placeholder={!topInfo.storageId ? '请先选择入库分库缩写' : '请输入'} /> ) } ] }, [cathet, key, tableInputChange, topInfo.storageId]) const tableLastBtn = useMemo(() => { return [ { title: '备注', width: 240, render: (item: C1GoodType) => (