|
@@ -1,10 +1,10 @@
|
|
|
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
|
|
|
import styles from './index.module.scss'
|
|
|
import { useParams } from 'react-router-dom'
|
|
|
-import { Button, Input, Select } from 'antd'
|
|
|
+import { Button, Cascader, Checkbox, Input } from 'antd'
|
|
|
import ZRichTexts from '@/components/ZRichTexts'
|
|
|
import MyPopconfirm from '@/components/MyPopconfirm'
|
|
|
-import history, { btnFlagFu2, openGoodsInfoFu } from '@/utils/history'
|
|
|
+import history, { btnFlagFu2, cascaderObjFu, openGoodsInfoFu } from '@/utils/history'
|
|
|
import { MessageFu } from '@/utils/message'
|
|
|
import MyTable from '@/components/MyTable'
|
|
|
import classNames from 'classnames'
|
|
@@ -12,23 +12,19 @@ import { D4goodsTableC, statusObj } from '@/utils/tableData'
|
|
|
import ZGaddNow from '@/components/ZGaddNow'
|
|
|
import X3auditInfo from '@/pages/X_stock/X3auditInfo'
|
|
|
import ZflowTable from '@/components/ZflowTable'
|
|
|
-import {
|
|
|
- D4_APIcreate,
|
|
|
- D4_APIdel,
|
|
|
- D4_APIgetInfo,
|
|
|
- D4_APIrevocation,
|
|
|
- D4_APIsaveApply,
|
|
|
- D4_APIsaveAudit,
|
|
|
- D4_APIsaveCreate,
|
|
|
- D4_APIsaveDraft
|
|
|
-} from '@/store/action/D4impStor'
|
|
|
-import { useDispatch, useSelector } from 'react-redux'
|
|
|
-import { RootState } from '@/store'
|
|
|
-import { D2_APIgetList } from '@/store/action/D2storSet'
|
|
|
import { C1GoodType } from '@/pages/A3_ledger/C1ledger/type'
|
|
|
import { EXbtnFu } from '@/utils/EXBtn'
|
|
|
-import { D6_APIgetList } from '@/store/action/D6putsStor'
|
|
|
-import { FourTableType } from '@/pages/B_enterTibet/B1collect/type'
|
|
|
+import {
|
|
|
+ C21_APIcreate,
|
|
|
+ C21_APIdel,
|
|
|
+ C21_APIgetInfo,
|
|
|
+ C21_APIsaveApply,
|
|
|
+ C21_APIsaveAudit,
|
|
|
+ C21_APIsaveCreate,
|
|
|
+ C21_APIsaveDraft
|
|
|
+} from '@/store/action/C21wealth'
|
|
|
+import { MEDIA_TYPES } from '../constants'
|
|
|
+import { IC21Detail } from '../types'
|
|
|
|
|
|
export const pageTitTxtObj = {
|
|
|
1: '新增',
|
|
@@ -44,39 +40,48 @@ function C21edit() {
|
|
|
// 滚到顶部
|
|
|
const sollrDom = useRef<HTMLDivElement>(null)
|
|
|
|
|
|
- // 获取出库列表,下拉 - 相关出库单用
|
|
|
- const dispatch = useDispatch()
|
|
|
-
|
|
|
- useEffect(() => {
|
|
|
- dispatch(D6_APIgetList({ pageNum: 1, pageSize: 99999 }))
|
|
|
- }, [dispatch])
|
|
|
-
|
|
|
- const putsList = useSelector((state: RootState) => state.D6putsStor.tableInfo.list)
|
|
|
-
|
|
|
// 顶部数据
|
|
|
- const [topInfo, setTopInfo] = useState({} as FourTableType)
|
|
|
+ const [topInfo, setTopInfo] = useState({
|
|
|
+ sonTypeName: '',
|
|
|
+ effect: ''
|
|
|
+ } as IC21Detail)
|
|
|
|
|
|
- // 入库库房数组信息
|
|
|
- useEffect(() => {
|
|
|
- dispatch(D2_APIgetList({ pageNum: 1, pageSize: 99999 }))
|
|
|
- }, [dispatch])
|
|
|
+ // 藏品清单快照数据
|
|
|
+ const [snaps, setSnaps] = useState<C1GoodType[]>([])
|
|
|
+ const delSnapIdsRef = useRef<number[]>([])
|
|
|
+
|
|
|
+ const snapsID2ref = useRef<{ goodsId: number; id: number }[]>([])
|
|
|
|
|
|
// 创建订单
|
|
|
const creatFu = useCallback(async () => {
|
|
|
- const res = await D4_APIcreate()
|
|
|
+ const res = await C21_APIcreate()
|
|
|
if (res.code === 0) {
|
|
|
- setTopInfo(res.data)
|
|
|
+ setTopInfo({ ...res.data, sonTypeName: MEDIA_TYPES.map(i => i.value).join(',') })
|
|
|
}
|
|
|
}, [])
|
|
|
|
|
|
// 获取详情
|
|
|
const getInfoFu = useCallback(async () => {
|
|
|
- const res = await D4_APIgetInfo(id)
|
|
|
+ const res = await C21_APIgetInfo(id)
|
|
|
if (res.code === 0) {
|
|
|
setTopInfo(res.data)
|
|
|
|
|
|
// 设置富文本
|
|
|
ZRichTextRef.current?.ritxtShowFu(JSON.parse(res.data.rtf || '{}'))
|
|
|
+
|
|
|
+ // 藏品清单快照信息id对比
|
|
|
+ const arrTemp: any = []
|
|
|
+ const snapsTemp = res.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])
|
|
|
|
|
@@ -87,10 +92,6 @@ function C21edit() {
|
|
|
if (sollrDom.current) sollrDom.current.scrollTop = 0
|
|
|
}, [creatFu, getInfoFu, key])
|
|
|
|
|
|
- // 上传附件的ref
|
|
|
- const filesRef = useRef<any>(null)
|
|
|
- // const filesRes = filesRef.current.filesIdRes();
|
|
|
-
|
|
|
// 富文本的ref
|
|
|
const ZRichTextRef = useRef<any>(null)
|
|
|
|
|
@@ -102,16 +103,12 @@ function C21edit() {
|
|
|
}, [key])
|
|
|
|
|
|
const checkDataFu = useCallback(() => {
|
|
|
- if (!topInfo.name) {
|
|
|
- MessageFu.warning('申请名称不能为空')
|
|
|
+ if (!topInfo.effect) {
|
|
|
+ MessageFu.warning('请选择使用途径')
|
|
|
return true
|
|
|
}
|
|
|
if (!topInfo.sonTypeName) {
|
|
|
- MessageFu.warning('请选择业务类型')
|
|
|
- return true
|
|
|
- }
|
|
|
- if (!topInfo.storageId) {
|
|
|
- MessageFu.warning('请选择入库库房')
|
|
|
+ MessageFu.warning('请选择资源类型')
|
|
|
return true
|
|
|
}
|
|
|
|
|
@@ -127,13 +124,7 @@ function C21edit() {
|
|
|
if (checkDataFu()) return
|
|
|
|
|
|
if (val !== '草稿') {
|
|
|
- if (!topInfo.goods || (topInfo.goods && topInfo.goods.length === 0)) {
|
|
|
- return MessageFu.warning('请添加藏品')
|
|
|
- } else {
|
|
|
- if (topInfo.goods.some(v => !v.siteStr || !v.siteId)) {
|
|
|
- return MessageFu.warning('请选择存放位置')
|
|
|
- }
|
|
|
- }
|
|
|
+ if (snaps.length === 0) return MessageFu.warning('请添加藏品')
|
|
|
}
|
|
|
|
|
|
if (val === '审批') {
|
|
@@ -144,7 +135,7 @@ function C21edit() {
|
|
|
}
|
|
|
const rtf2 = ZAuditRef.current?.resData()
|
|
|
|
|
|
- const res = await D4_APIsaveAudit({
|
|
|
+ const res = await C21_APIsaveAudit({
|
|
|
orderId: topInfo.id,
|
|
|
rtfOpinion: rtf2,
|
|
|
status: auditSta === '同意' ? 1 : 2
|
|
@@ -159,17 +150,16 @@ function C21edit() {
|
|
|
const rtf1 = ZRichTextRef.current?.fatherBtnOkFu() || { flag: true }
|
|
|
// console.log('申请信息富文本', JSON.stringify(rtf1.val || ''))
|
|
|
|
|
|
- // 上传附件
|
|
|
- const filesRes = filesRef.current.filesIdRes()
|
|
|
-
|
|
|
const obj = {
|
|
|
...topInfo,
|
|
|
- fileIds: filesRes.join(','),
|
|
|
rtf: JSON.stringify(rtf1.val || ''),
|
|
|
- goodsIds: topInfo.goods.map(v => v.id).join(','),
|
|
|
- goods: topInfo.goods.map(v => ({
|
|
|
+ goodsIds: snaps.map(v => v.id).join(','),
|
|
|
+ delSnapIds: delSnapIdsRef.current.length ? delSnapIdsRef.current : '',
|
|
|
+ snaps: snaps.map(v => ({
|
|
|
goodsId: v.id,
|
|
|
- siteId: v.siteId
|
|
|
+ id: v.id2 ? v.id2 : null,
|
|
|
+ orderId: topInfo.id,
|
|
|
+ snap: JSON.stringify(v)
|
|
|
}))
|
|
|
}
|
|
|
// console.log(123, obj)
|
|
@@ -178,21 +168,21 @@ function C21edit() {
|
|
|
|
|
|
if (val === '草稿') {
|
|
|
// 存草稿 当前页保存 不跳转
|
|
|
- const res = await D4_APIsaveDraft(obj)
|
|
|
+ const res = await C21_APIsaveDraft(obj)
|
|
|
if (res.code === 0) {
|
|
|
MessageFu.success('草稿保存成功')
|
|
|
}
|
|
|
} else {
|
|
|
- const res = val === '创建' ? await D4_APIsaveCreate(obj) : await D4_APIsaveApply(obj)
|
|
|
+ const res = val === '创建' ? await C21_APIsaveCreate(obj) : await C21_APIsaveApply(obj)
|
|
|
if (res.code === 0) {
|
|
|
MessageFu.success(`${val}成功`)
|
|
|
// 跳到详情页
|
|
|
- history.push(`/impStor_edit/4/${topInfo.id}`)
|
|
|
+ history.push(`/wealth_edit/4/${topInfo.id}`)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
- [auditSta, checkDataFu, topInfo]
|
|
|
+ [auditSta, checkDataFu, topInfo, snaps]
|
|
|
)
|
|
|
|
|
|
// 打开侧边栏
|
|
@@ -249,39 +239,24 @@ function C21edit() {
|
|
|
|
|
|
// 查看的按钮创建-提交-撤回
|
|
|
const lookBtnFu = useCallback(
|
|
|
- async (val: '创建' | '提交' | '撤回') => {
|
|
|
- if (val !== '撤回') {
|
|
|
- if (!topInfo.goods || (topInfo.goods && topInfo.goods.length === 0)) {
|
|
|
- return MessageFu.warning('请添加藏品')
|
|
|
- } else {
|
|
|
- if (topInfo.goods.some(v => !v.siteStr || !v.siteId)) {
|
|
|
- return MessageFu.warning('请选择存放位置')
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
+ async (val: '创建' | '提交') => {
|
|
|
const rtf1 = ZRichTextRef.current?.fatherBtnOkFu() || { flag: true }
|
|
|
// console.log('申请信息富文本', JSON.stringify(rtf1.val || ''))
|
|
|
|
|
|
- // 上传附件
|
|
|
- const filesRes = filesRef.current.filesIdRes()
|
|
|
const obj = {
|
|
|
...topInfo,
|
|
|
- fileIds: filesRes.join(','),
|
|
|
rtf: JSON.stringify(rtf1.val || ''),
|
|
|
- goodsIds: topInfo.goods.map(v => v.id).join(','),
|
|
|
- goods: topInfo.goods.map(v => ({
|
|
|
+ goodsIds: snaps.map(v => v.id).join(','),
|
|
|
+ delSnapIds: delSnapIdsRef.current.length ? delSnapIdsRef.current : '',
|
|
|
+ snaps: snaps.map(v => ({
|
|
|
goodsId: v.id,
|
|
|
- siteId: v.siteId
|
|
|
+ id: v.id2 ? v.id2 : null,
|
|
|
+ orderId: topInfo.id,
|
|
|
+ snap: JSON.stringify(v)
|
|
|
}))
|
|
|
}
|
|
|
|
|
|
- const res =
|
|
|
- val === '创建'
|
|
|
- ? await D4_APIsaveCreate(obj)
|
|
|
- : val === '提交'
|
|
|
- ? await D4_APIsaveApply(obj)
|
|
|
- : await D4_APIrevocation(id)
|
|
|
+ const res = val === '创建' ? await C21_APIsaveCreate(obj) : await C21_APIsaveApply(obj)
|
|
|
|
|
|
if (res.code === 0) {
|
|
|
if (sollrDom.current) sollrDom.current.scrollTop = 0
|
|
@@ -289,22 +264,22 @@ function C21edit() {
|
|
|
getInfoFu()
|
|
|
}
|
|
|
},
|
|
|
- [getInfoFu, id, topInfo]
|
|
|
+ [getInfoFu, topInfo, snaps]
|
|
|
)
|
|
|
|
|
|
// 查看模式点击删除
|
|
|
const delFu = useCallback(async () => {
|
|
|
- const res = await D4_APIdel(id)
|
|
|
+ const res = await C21_APIdel(id)
|
|
|
if (res.code === 0) {
|
|
|
MessageFu.success('删除成功')
|
|
|
- history.push('/impStor')
|
|
|
+ history.push('/wealth')
|
|
|
}
|
|
|
}, [id])
|
|
|
|
|
|
// 查看模式点击审批 编辑
|
|
|
const lookJumpFu = useCallback(
|
|
|
(val: '审批' | '编辑') => {
|
|
|
- history.push(`/impStor_edit/${val === '审批' ? 3 : 2}/${id}`)
|
|
|
+ history.push(`/wealth_edit/${val === '审批' ? 3 : 2}/${id}`)
|
|
|
MessageFu.success(`已跳转至${val}页面`)
|
|
|
},
|
|
|
[id]
|
|
@@ -325,18 +300,6 @@ function C21edit() {
|
|
|
</Button>
|
|
|
) : null}
|
|
|
|
|
|
- {btnFlagFu2(topInfo)['撤回'] ? (
|
|
|
- <MyPopconfirm
|
|
|
- txtK='撤回'
|
|
|
- onConfirm={() => lookBtnFu('撤回')}
|
|
|
- Dom={
|
|
|
- <Button type='primary' danger>
|
|
|
- 撤回
|
|
|
- </Button>
|
|
|
- }
|
|
|
- />
|
|
|
- ) : null}
|
|
|
-
|
|
|
{btnFlagFu2(topInfo)['审批'] ? (
|
|
|
<Button type='primary' onClick={() => lookJumpFu('审批')}>
|
|
|
审批
|
|
@@ -368,7 +331,7 @@ function C21edit() {
|
|
|
/>
|
|
|
) : null}
|
|
|
|
|
|
- <Button onClick={() => history.push('/impStor')}>返回</Button>
|
|
|
+ <Button onClick={() => history.push('/wealth')}>返回</Button>
|
|
|
</>
|
|
|
)
|
|
|
}, [delFu, lookBtnFu, lookJumpFu, topInfo])
|
|
@@ -383,7 +346,7 @@ function C21edit() {
|
|
|
<div className='D4main' ref={sollrDom}>
|
|
|
{['3'].includes(key) ? (
|
|
|
<X3auditInfo
|
|
|
- dirCode='D4impStor'
|
|
|
+ dirCode='D4wealth'
|
|
|
myUrl='cms/orderIn/upload'
|
|
|
auditSta={auditSta}
|
|
|
auditStaFu={val => setAuDitSta(val)}
|
|
@@ -401,37 +364,39 @@ function C21edit() {
|
|
|
<div className='D4rowAll'>
|
|
|
<div className='D4row'>
|
|
|
<div className='D4rowll'>业务单号:</div>
|
|
|
- <div className='D4rowrr'>--</div>
|
|
|
+ <div className='D4rowrr'>{topInfo.num}</div>
|
|
|
</div>
|
|
|
|
|
|
<div className='D4row'>
|
|
|
<div className='D4rowll'>业务名称:</div>
|
|
|
- <div className='D4rowrr'>--</div>
|
|
|
+ <div className='D4rowrr'>{topInfo.name}</div>
|
|
|
</div>
|
|
|
|
|
|
<div className='D4row'>
|
|
|
<div className='D4rowll'>发起人:</div>
|
|
|
- <div className='D4rowrr'>--</div>
|
|
|
+ <div className='D4rowrr'>{topInfo.creatorName}</div>
|
|
|
</div>
|
|
|
|
|
|
<div className='D4row'>
|
|
|
<div className='D4rowll'>发起部门:</div>
|
|
|
- <div className='D4rowrr'>--</div>
|
|
|
+ <div className='D4rowrr'>{topInfo.deptName}</div>
|
|
|
</div>
|
|
|
|
|
|
<div className='D4row'>
|
|
|
- <div className='D4rowll'>使用途径:</div>
|
|
|
+ <div className='D4rowll'>
|
|
|
+ <span> * </span>使用途径:
|
|
|
+ </div>
|
|
|
<div className='D4rowrr'>
|
|
|
- <Select
|
|
|
- disabled={['3', '4'].includes(key)}
|
|
|
- placeholder={['3', '4'].includes(key) ? '(空)' : '请搜索出库单编码'}
|
|
|
- showSearch
|
|
|
- options={putsList}
|
|
|
- fieldNames={{ label: 'num', value: 'num' }}
|
|
|
- allowClear={true}
|
|
|
- value={topInfo.relatedOrderNum || null}
|
|
|
- onChange={e => setTopInfo({ ...topInfo, relatedOrderNum: e ? e : '' })}
|
|
|
- />
|
|
|
+ {topInfo.num && (
|
|
|
+ <Cascader
|
|
|
+ defaultValue={topInfo.effect.split(',')}
|
|
|
+ disabled={['3', '4'].includes(key)}
|
|
|
+ options={cascaderObjFu()['附件用途']}
|
|
|
+ onChange={e => setTopInfo({ ...topInfo, effect: e ? e.join(',') : '' })}
|
|
|
+ placeholder='请选择'
|
|
|
+ fieldNames={{ label: 'name', value: 'id', children: 'children' }}
|
|
|
+ />
|
|
|
+ )}
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
@@ -449,12 +414,28 @@ function C21edit() {
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
- <div className='D4row D4rowFull'>
|
|
|
+ <div className='D4row D4rowFull' style={{ margin: '0 0 20px' }}>
|
|
|
+ <div className='D4rowll'>
|
|
|
+ <span> * </span>资源类型:
|
|
|
+ </div>
|
|
|
+ <div className='D4rowrr'>
|
|
|
+ {topInfo.num && (
|
|
|
+ <Checkbox.Group
|
|
|
+ defaultValue={topInfo.sonTypeName.split(',')}
|
|
|
+ disabled={['3', '4'].includes(key)}
|
|
|
+ options={MEDIA_TYPES}
|
|
|
+ onChange={e => setTopInfo({ ...topInfo, sonTypeName: e.join(',') })}
|
|
|
+ />
|
|
|
+ )}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div className='D4row D4rowFull' style={{ margin: 0 }}>
|
|
|
<div className='D4rowll'>备注:</div>
|
|
|
<div className='D4rowrr'>
|
|
|
<ZRichTexts
|
|
|
check={false}
|
|
|
- dirCode='impStor'
|
|
|
+ dirCode='wealth'
|
|
|
myUrl='cms/orderIn/upload'
|
|
|
isLook={['3', '4'].includes(key)}
|
|
|
ref={ZRichTextRef}
|
|
@@ -475,8 +456,7 @@ function C21edit() {
|
|
|
<Button
|
|
|
type='primary'
|
|
|
onClick={() => {
|
|
|
- if (!topInfo.storageId) return MessageFu.warning('请先选择入库库房')
|
|
|
- setNowSta({ key: '5', id: 'cms/orderIn/goods/getList' })
|
|
|
+ setNowSta({ key: '5', id: 'cms/orderZy/goods/getList' })
|
|
|
}}
|
|
|
>
|
|
|
新增
|
|
@@ -488,7 +468,7 @@ function C21edit() {
|
|
|
|
|
|
{/* 表格 */}
|
|
|
<MyTable
|
|
|
- list={topInfo.goods || []}
|
|
|
+ list={snaps}
|
|
|
columnsTemp={D4goodsTableC}
|
|
|
startBtn={startBtn}
|
|
|
lastBtn={tableLastBtn}
|
|
@@ -530,7 +510,7 @@ function C21edit() {
|
|
|
</Button>
|
|
|
) : null}
|
|
|
|
|
|
- <MyPopconfirm txtK='取消' onConfirm={() => history.push('/impStor')} />
|
|
|
+ <MyPopconfirm txtK='取消' onConfirm={() => history.push('/wealth')} />
|
|
|
</>
|
|
|
)}
|
|
|
</div>
|
|
@@ -540,9 +520,17 @@ function C21edit() {
|
|
|
<ZGaddNow
|
|
|
nowSta={nowSta}
|
|
|
closeFu={() => setNowSta({ key: '', id: '' })}
|
|
|
- dataResFu={data => setTopInfo({ ...topInfo, goods: data })}
|
|
|
- oldCheckArr={topInfo.goods || []}
|
|
|
- canObj={{ storageId: topInfo.storageId }}
|
|
|
+ dataResFu={data => {
|
|
|
+ const dataTemp = [...data]
|
|
|
+ dataTemp.forEach(v => {
|
|
|
+ // id2表示的是自己这条数据的id id才是goodsId
|
|
|
+ const obj = snapsID2ref.current.find(c => c.goodsId === v.id)
|
|
|
+
|
|
|
+ if (obj) v.id2 = obj.id
|
|
|
+ })
|
|
|
+ setSnaps(dataTemp)
|
|
|
+ }}
|
|
|
+ oldCheckArr={snaps}
|
|
|
/>
|
|
|
) : null}
|
|
|
</div>
|