瀏覽代碼

现状登记完成

shaogen1995 3 月之前
父節點
當前提交
bea7aac2a1

+ 1 - 1
src/pages/A3_ledger/C1ledger/type.d.ts

@@ -132,7 +132,7 @@ export type C1GoodType = {
   dictHouse2: string
 
   // 藏品入库
-  txt4: number | null
+  siteNums: number | null
 
   // 详情按钮的盘点
   statusCollect: number

+ 3 - 0
src/pages/B_enterTibet/B1collect/type.d.ts

@@ -98,4 +98,7 @@ export type FourTableType = {
   // 发掘报告编号
   sonNum2: string
   sonSource: string
+
+  // 现状
+  sonUser: string
 }

+ 1 - 1
src/pages/C_goodsManage/C1register/C1look/index.tsx

@@ -223,7 +223,7 @@ function C1look() {
         {key === '3' ? (
           C22infoBtnFu(topInfo)['审批'] ? (
             <Button type='primary' onClick={auditFu}>
-              提交
+              审批
             </Button>
           ) : null
         ) : (

+ 1 - 1
src/pages/C_goodsManage/C22goodEdit/C22look/index.tsx

@@ -277,7 +277,7 @@ function C22look() {
         {key === '3' ? (
           C22infoBtnFu(topInfo)['审批'] ? (
             <Button type='primary' onClick={auditFu}>
-              提交
+              审批
             </Button>
           ) : null
         ) : (

+ 22 - 28
src/pages/D_storeManage/D4impStor/D4edit/index.tsx

@@ -7,6 +7,7 @@ import {
   D4_APIcreate,
   D4_APIdel,
   D4_APIgetInfo,
+  D4_APIgetStorageNum,
   D4_APIrevocation,
   D4_APIsaveApply,
   D4_APIsaveAudit,
@@ -32,7 +33,6 @@ import ZupFileTable from '@/components/ZupFileTable'
 import Y1cathet from '@/pages/Y_goodsDetails/Y1cathet'
 import ZGaddNow from '@/components/ZGaddNow'
 import TextArea from 'antd/es/input/TextArea'
-import D4auto from './D4auto'
 import D4check from './D4check'
 import { API_goodsInfo } from '@/store/action/C1ledger'
 
@@ -159,7 +159,7 @@ function D4edit() {
 
       if (val !== '草稿') {
         if (snaps.length === 0) return MessageFu.warning('请添加藏品')
-        if (snaps.some(v => !v.txt4)) return MessageFu.warning('请输入藏品分库号')
+        if (snaps.some(v => !v.siteNums)) return MessageFu.warning('请输入藏品分库号')
       }
 
       if (val === '审批') {
@@ -185,6 +185,7 @@ function D4edit() {
         const obj = {
           ...topInfo,
           goodsIds: snaps.map(v => v.id).join(','),
+          siteNums: snaps.map(v => v.siteNums).join(','),
           delSnapIds: delSnapIdsRef.current.length ? delSnapIdsRef.current : '',
           snaps: snaps.map(v => ({
             goodsId: v.id,
@@ -221,7 +222,7 @@ function D4edit() {
 
   // 表格的输入框改变
   const tableInputChange = useCallback(
-    (id: number, val: number | null, key: 'txt4') => {
+    (id: number, val: number | null, key: 'siteNums') => {
       setSnaps(
         snaps.map(v => ({
           ...v,
@@ -263,8 +264,8 @@ function D4edit() {
             min={1}
             max={99999999}
             precision={0}
-            value={item.txt4}
-            onChange={e => tableInputChange(item.id, e, 'txt4')}
+            value={item.siteNums}
+            onChange={e => tableInputChange(item.id, e, 'siteNums')}
             placeholder='请输入'
           />
         )
@@ -329,12 +330,13 @@ function D4edit() {
     async (val: '创建' | '提交' | '撤回') => {
       if (val !== '撤回') {
         if (snaps.length === 0) return MessageFu.warning('请添加藏品')
-        if (snaps.some(v => !v.txt4)) return MessageFu.warning('请输入藏品分库号')
+        if (snaps.some(v => !v.siteNums)) return MessageFu.warning('请输入藏品分库号')
       }
 
       const obj = {
         ...topInfo,
         goodsIds: snaps.map(v => v.id).join(','),
+        siteNums: snaps.map(v => v.siteNums).join(','),
         delSnapIds: delSnapIdsRef.current.length ? delSnapIdsRef.current : '',
         snaps: snaps.map(v => ({
           goodsId: v.id,
@@ -449,7 +451,18 @@ function D4edit() {
   const [auditsShow, setAuditsShow] = useState(false)
 
   // 点击自动分配空置分库号
-  const [auto, setAuto] = useState(false)
+  const autoFu = useCallback(async () => {
+    const res = await D4_APIgetStorageNum(snaps.length, topInfo.storageId!)
+    if (res.code === 0) {
+      setSnaps(
+        snaps.map((v, i) => ({
+          ...v,
+          siteNums: res.data[i]
+        }))
+      )
+      MessageFu.success('分配成功')
+    }
+  }, [snaps, topInfo.storageId])
 
   // 二次校验分库号
   // 待完善类型
@@ -594,11 +607,7 @@ function D4edit() {
             <div className='D4Tit2rr'>
               {['3', '4'].includes(key) ? null : (
                 <>
-                  <Button
-                    type='primary'
-                    onClick={() => setAuto(true)}
-                    disabled={snaps.length === 0}
-                  >
+                  <Button type='primary' onClick={autoFu} disabled={snaps.length === 0}>
                     自动分配空置分库号
                   </Button>
                   &emsp;
@@ -662,7 +671,7 @@ function D4edit() {
                 </Button>
               ) : null}
 
-              <MyPopconfirm txtK='取消' onConfirm={() => history.push('/repair')} />
+              <MyPopconfirm txtK='取消' onConfirm={() => history.push('/impStor')} />
             </>
           )}
         </div>
@@ -699,21 +708,6 @@ function D4edit() {
         />
       ) : null}
 
-      {/* 点击自动分配 */}
-      {auto ? (
-        <D4auto
-          closeFu={() => setAuto(false)}
-          succFu={num => {
-            // 待完善
-            console.log('ppp', num)
-            setNumCheck([
-              { id: 1, num: 'xxx', shuzi: 3, name: '666' },
-              { id: 2, num: 'x2xx', shuzi: 7, name: '999' }
-            ])
-          }}
-        />
-      ) : null}
-
       {/* 二次校验分库号 */}
       {numCheck.length ? <D4check closeFu={() => setNumCheck([])} listTemp={numCheck} /> : null}
     </div>

+ 0 - 2
src/pages/E_goodsStorage/E1accident/E1edit/index.tsx

@@ -33,7 +33,6 @@ function E1edit() {
   // key:1 新增 2编辑 3审批 4查看
 
   // 事故藏品选择编号类型
-
   const [goodsArr, setGoodsArr] = useState<{ value: string; label: string; num: string }[]>([])
 
   const numNameChangeFu = useCallback(async (val: string) => {
@@ -117,7 +116,6 @@ function E1edit() {
 
   // 上传附件的ref
   const filesRef = useRef<any>(null)
-  // const filesRes = filesRef.current.filesIdRes();
 
   // 事故前的ref
   const ZRichTextRefQian = useRef<any>(null)

+ 22 - 3
src/pages/E_goodsStorage/E1accident/index.tsx

@@ -18,7 +18,7 @@ import classNames from 'classnames'
 import Y1cathet from '@/pages/Y_goodsDetails/Y1cathet'
 const { RangePicker } = DatePicker
 
-const E1baseFormData: E1FormType = {
+export const E1baseFormData: E1FormType = {
   pageSize: 10,
   pageNum: 1,
   num: '',
@@ -28,7 +28,14 @@ const E1baseFormData: E1FormType = {
   goodsNum: '',
   goodsName: '',
   userName: '',
-  userType: ''
+  userType: '',
+  status: '',
+
+  // 事故登记模块
+  businessTimeStart: '',
+  businessTimeEnd: '',
+  startTime: '',
+  endTime: ''
 }
 
 function E1accident() {
@@ -137,7 +144,7 @@ function E1accident() {
               onClick={() => setCathet(Number(item.goodsIds))}
               className={classNames('D1GtNum', item.id === cathet ? 'D1GtNumAc' : '')}
             >
-              {item.goodsNum}
+              {item.goodsNum || '(空)'}
             </span>
           )
         }
@@ -289,6 +296,18 @@ function E1accident() {
               onChange={e => setFormData({ ...formData, userType: e })}
             />
           </div>
+
+          <div>
+            <span>申请状态:</span>
+            <Select
+              allowClear={true}
+              placeholder='全部'
+              style={{ width: 150 }}
+              value={formData.status ? formData.status : null}
+              onChange={e => setFormData({ ...formData, status: e })}
+              options={selectObj['申请状态'].filter(v => v.label !== '待盘点')}
+            />
+          </div>
         </div>
         <div className='E1toprr'>
           <Button type='primary' onClick={clickSearch}>

+ 7 - 0
src/pages/E_goodsStorage/E1accident/type.d.ts

@@ -9,6 +9,13 @@ export type E1FormType = {
   goodsName: string
   userName: string
   userType: string
+  status: string
+
+  // 事故登记
+  businessTimeStart: string
+  businessTimeEnd: string
+  startTime: string
+  endTime: string
 }
 
 export type E1InputKeyType = keyof E1FormType

+ 108 - 0
src/pages/E_goodsStorage/E3actuality/E3edit/index.module.scss

@@ -1,4 +1,112 @@
 .E3edit {
+  background-color: #fff;
+  border-radius: 10px;
+  padding: 15px 24px 0px;
   :global {
+    .E3Tit {
+      font-size: 18px;
+      font-weight: 700;
+      padding-bottom: 10px;
+      padding-left: 18px;
+      border-bottom: 1px solid #ccc;
+      margin-bottom: 17px;
+      color: var(--themeColor);
+      .ant-btn {
+        margin-left: 15px;
+        pointer-events: none;
+      }
+    }
+    .E3main {
+      width: 100%;
+      height: calc(100% - 70px);
+      overflow-y: auto;
+      padding-bottom: 40px;
+
+      .E3rowAll {
+        display: flex;
+        justify-content: space-between;
+        align-items: self-start;
+        font-size: 16px;
+        flex-wrap: wrap;
+        .E3row {
+          width: 48%;
+          display: flex;
+          align-items: center;
+          margin-bottom: 20px;
+          min-height: 32px;
+          .E3rowll {
+            width: 110px;
+            text-align: right;
+            font-weight: 700;
+            & > span {
+              color: #ff4e3f;
+            }
+          }
+          .E3rowrr {
+            width: calc(100% - 110px);
+            .ant-input-affix-wrapper {
+              width: 300px;
+            }
+            .ant-select {
+              width: 300px;
+            }
+          }
+        }
+        .E3row2 {
+          align-items: self-start;
+          .E3rowll {
+            position: relative;
+            top: 3px;
+          }
+        }
+
+        .E3rowFull {
+          width: 100%;
+          align-items: self-start;
+          margin-bottom: 0;
+          .E3rowll {
+            position: relative;
+            top: 3px;
+          }
+        }
+        .E3rowFull2 {
+          width: 100%;
+          align-items: self-start;
+          .E3rowll {
+            position: relative;
+            top: 3px;
+          }
+          .E3rowrr {
+            .ant-input-affix-wrapper {
+              width: 1147px;
+            }
+          }
+        }
+      }
+      // 藏品清单
+      .E3googsBox {
+        padding-right: 20px;
+        .D1GtNum {
+          cursor: pointer;
+          text-decoration: underline;
+          // &:hover {
+          //   color: var(--themeColor);
+          // }
+        }
+
+        .D1GtNumAc {
+          color: var(--themeColor);
+        }
+      }
+    }
+
+    .E3btn {
+      position: absolute;
+      bottom: 20px;
+      left: 134px;
+      .ant-btn {
+        margin-right: 20px;
+      }
+    }
   }
 }

+ 534 - 2
src/pages/E_goodsStorage/E3actuality/E3edit/index.tsx

@@ -1,9 +1,541 @@
-import React from 'react'
+import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
 import styles from './index.module.scss'
+import { useParams } from 'react-router-dom'
+import { E1_APIgetGoodsList } from '@/store/action/E1accident'
+import { FourTableType } from '@/pages/B_enterTibet/B1collect/type'
+import {
+  E3_APIcreate,
+  E3_APIdel,
+  E3_APIgetInfo,
+  E3_APIrevocation,
+  E3_APIsaveApply,
+  E3_APIsaveAudit,
+  E3_APIsaveCreate,
+  E3_APIsaveDraft
+} from '@/store/action/E3actuality'
+import { API_goodsInfo } from '@/store/action/C1ledger'
+import { pageTitTxtObj } from '@/pages/D_storeManage/D4impStor/D4edit'
+import dayjs from 'dayjs'
+import { MessageFu } from '@/utils/message'
+import history, { btnFlagFu2 } from '@/utils/history'
+import { Button, DatePicker, Input, Select } from 'antd'
+import MyPopconfirm from '@/components/MyPopconfirm'
+import { EXbtnFu } from '@/utils/EXBtn'
+import X3auditInfo from '@/pages/X_stock/X3auditInfo'
+import { statusObj } from '@/utils/tableData'
+import { selectObj } from '@/utils/select'
+import TextArea from 'antd/es/input/TextArea'
+import Z3upFiles from '@/components/Z3upFiles'
+import ZupFileTable from '@/components/ZupFileTable'
+import ZflowTable from '@/components/ZflowTable'
+import ZRichTexts from '@/components/ZRichTexts'
 function E3edit() {
+  const { key, id } = useParams<any>()
+  // key:1 新增 2编辑 3审批 4查看
+
+  // 事故藏品选择编号类型
+  const [goodsArr, setGoodsArr] = useState<{ value: string; label: string; num: string }[]>([])
+
+  const numNameChangeFu = useCallback(async (val: string) => {
+    const res = await E1_APIgetGoodsList(val)
+
+    if (res.code === 0) {
+      const arr = res.data || []
+      setGoodsArr(
+        arr.map((v: any) => ({
+          num: v.num,
+          label: v.name,
+          value: v.id + ''
+        }))
+      )
+    }
+  }, [])
+
+  // 滚到顶部
+  const sollrDom = useRef<HTMLDivElement>(null)
+
+  // 顶部数据
+  const [topInfo, setTopInfo] = useState({} as FourTableType)
+
+  // 创建订单
+  const creatFu = useCallback(async () => {
+    const res = await E3_APIcreate()
+    if (res.code === 0) {
+      const obj = res.data
+
+      // 从藏品详情点击按钮进来
+      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) {
+          obj.numName = res2.data.numName
+          numNameChangeFu(res2.data.numName)
+
+          obj.goodsIds = urlId
+          setTopInfo(obj)
+        }
+      } else setTopInfo(obj)
+    }
+  }, [numNameChangeFu])
+
+  // 获取详情
+  const getInfoFu = useCallback(async () => {
+    const res = await E3_APIgetInfo(id)
+    if (res.code === 0) {
+      const data = res.data
+
+      setTopInfo(data)
+
+      // 设置富文本
+      ZRichTextRef.current?.ritxtShowFu(JSON.parse(data.rtf || '{}'))
+
+      if (data.numName) numNameChangeFu(data.numName)
+    }
+  }, [id, numNameChangeFu])
+
+  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) => {
+      setTopInfo({ ...topInfo, date: dayjs(e).format('YYYY-MM-DD') })
+    },
+    [topInfo]
+  )
+
+  // 上传附件的ref
+  const filesRef = useRef<any>(null)
+
+  // 备注的ref
+  const ZRichTextRef = useRef<any>(null)
+
+  // 审批意见的ref
+  const ZAuditRef = useRef<any>(null)
+
+  // 审批的sta
+  const [auditSta, setAuDitSta] = useState('')
+
+  // 字段的校验
+  const checkFu = useCallback(() => {
+    if (!topInfo.date) {
+      MessageFu.warning('请选择登记日期')
+      return true
+    }
+
+    if (!topInfo.numName || !topInfo.goodsIds) {
+      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 === '审批') {
+        // console.log('审批信息富文本', rtf2)
+        if (!auditSta) {
+          if (sollrDom.current) sollrDom.current.scrollTop = 0
+          return MessageFu.warning('请选择审批结果')
+        }
+        const rtf2 = ZAuditRef.current?.resData()
+
+        const res = await E3_APIsaveAudit({
+          orderId: topInfo.id,
+          rtfOpinion: rtf2,
+          status: auditSta === '同意' ? 1 : 2
+        })
+
+        if (res.code === 0) {
+          MessageFu.success('审批成功')
+          // 跳详情页
+          history.push(`/actuality_edit/4/${topInfo.id}`)
+        }
+      } else {
+        // 富文本
+        const rtf1 = ZRichTextRef.current?.fatherBtnOkFu() || { flag: true }
+
+        // 上传附件
+        const filesRes = filesRef.current.filesIdRes()
+
+        const obj = {
+          ...topInfo,
+          rtf: JSON.stringify(rtf1.val || ''),
+          fileIds: filesRes.join(',')
+        }
+        // console.log(123, obj)
+
+        // if (1 + 1 === 2) return
+
+        if (val === '草稿') {
+          // 存草稿 当前页保存 不跳转
+          const res = await E3_APIsaveDraft(obj)
+          if (res.code === 0) {
+            MessageFu.success('草稿保存成功')
+          }
+        } else {
+          const res = val === '创建' ? await E3_APIsaveCreate(obj) : await E3_APIsaveApply(obj)
+          if (res.code === 0) {
+            MessageFu.success(`${val}成功`)
+            // 跳到详情页
+            history.push(`/actuality_edit/4/${topInfo.id}`)
+          }
+        }
+      }
+    },
+    [auditSta, checkFu, topInfo]
+  )
+
+  // 查看的按钮创建-提交-撤回
+  const lookBtnFu = useCallback(
+    async (val: '创建' | '提交' | '撤回') => {
+      // 富文本
+      const rtf1 = ZRichTextRef.current?.fatherBtnOkFu() || { flag: true }
+
+      // 上传附件
+      const filesRes = filesRef.current.filesIdRes()
+      const obj = {
+        ...topInfo,
+        rtf: JSON.stringify(rtf1.val || ''),
+        fileIds: filesRes.join(',')
+      }
+
+      const res =
+        val === '创建'
+          ? await E3_APIsaveCreate(obj)
+          : val === '提交'
+          ? await E3_APIsaveApply(obj)
+          : await E3_APIrevocation(id)
+
+      if (res.code === 0) {
+        if (sollrDom.current) sollrDom.current.scrollTop = 0
+        MessageFu.success(val + '成功')
+        getInfoFu()
+      }
+    },
+    [getInfoFu, id, topInfo]
+  )
+
+  // 查看模式点击删除
+  const delFu = useCallback(async () => {
+    const res = await E3_APIdel(id)
+    if (res.code === 0) {
+      MessageFu.success('删除成功')
+      history.push('/actuality')
+    }
+  }, [id])
+
+  // 查看模式点击审批 编辑
+  const lookJumpFu = useCallback(
+    (val: '审批' | '编辑') => {
+      history.push(`/actuality_edit/${val === '审批' ? 3 : 2}/${id}`)
+      MessageFu.success(`已跳转至${val}页面`)
+    },
+    [id]
+  )
+
+  // 查看模式下的按钮
+  const lookBtn = useMemo(() => {
+    return (
+      <>
+        {btnFlagFu2(topInfo)['创建'] ? (
+          <Button type='primary' onClick={() => lookBtnFu('创建')}>
+            创建
+          </Button>
+        ) : null}
+        {btnFlagFu2(topInfo)['提交'] ? (
+          <Button type='primary' onClick={() => lookBtnFu('提交')}>
+            提交
+          </Button>
+        ) : null}
+
+        {btnFlagFu2(topInfo)['撤回'] ? (
+          <MyPopconfirm
+            txtK='撤回'
+            onConfirm={() => lookBtnFu('撤回')}
+            Dom={
+              <Button type='primary' danger>
+                撤回
+              </Button>
+            }
+          />
+        ) : null}
+
+        {btnFlagFu2(topInfo)['审批'] ? (
+          <Button type='primary' onClick={() => lookJumpFu('审批')}>
+            审批
+          </Button>
+        ) : null}
+        {btnFlagFu2(topInfo)['编辑'] ? (
+          <Button type='primary' onClick={() => lookJumpFu('编辑')}>
+            编辑
+          </Button>
+        ) : null}
+
+        {btnFlagFu2(topInfo)['重新提交'] ? (
+          <Button type='primary' onClick={() => lookBtnFu('提交')}>
+            重新提交
+          </Button>
+        ) : null}
+
+        {EXbtnFu(topInfo)}
+
+        {btnFlagFu2(topInfo)['删除'] ? (
+          <MyPopconfirm
+            txtK='删除'
+            onConfirm={() => delFu()}
+            Dom={
+              <Button type='primary' danger>
+                删除
+              </Button>
+            }
+          />
+        ) : null}
+
+        <Button onClick={() => history.push('/actuality')}>返回</Button>
+      </>
+    )
+  }, [delFu, lookBtnFu, lookJumpFu, topInfo])
+
+  // 申请记录
+  const [auditsShow, setAuditsShow] = useState(false)
+
   return (
     <div className={styles.E3edit}>
-      <h1>E3edit</h1>
+      <div className='pageTitle'>现状登记-{pageTitTxt}</div>
+
+      <div className='E3main' ref={sollrDom}>
+        {['3'].includes(key) ? (
+          <X3auditInfo
+            dirCode='E3actuality'
+            myUrl='cms/goodsFile/upload'
+            auditSta={auditSta}
+            auditStaFu={val => setAuDitSta(val)}
+            ref={ZAuditRef}
+          />
+        ) : null}
+
+        {/* 表单字段、附件等 */}
+        <div className='E3Tit'>
+          申请信息
+          {key === '1' ? null : (
+            <Button type='dashed'>{Reflect.get(statusObj, topInfo.status)}</Button>
+          )}
+        </div>
+
+        <div className='E3rowAll'>
+          <div className='E3row'>
+            <div className='E3rowll'>申请类型:</div>
+            <div className='E3rowrr'>{topInfo.name}</div>
+          </div>
+
+          <div className='E3row'>
+            <div className='E3rowll'>
+              <span> * </span>登记日期:
+            </div>
+            <div className='E3rowrr'>
+              <DatePicker
+                disabled={['3', '4'].includes(key)}
+                allowClear={false}
+                value={topInfo.date ? dayjs(topInfo.date) : null}
+                onChange={timeChange}
+              />
+            </div>
+          </div>
+
+          <div className='E3row E3rowFull2'>
+            <div className='E3rowll'>
+              <span> * </span>登记藏品:
+            </div>
+            <div className='E3rowrr'>
+              <Select
+                disabled={['3', '4'].includes(key)}
+                allowClear={false}
+                placeholder='请选择编号类型'
+                style={{ width: 150 }}
+                value={topInfo.numName ? topInfo.numName : null}
+                onChange={e => {
+                  setTopInfo({ ...topInfo, numName: e, goodsIds: '' })
+                  numNameChangeFu(e)
+                }}
+                options={selectObj['藏品编号类型']}
+              />
+              <Select
+                disabled={['3', '4'].includes(key) || !topInfo.numName}
+                placeholder={!topInfo.numName ? '请先选择编号类型' : '请输入藏品编号或藏品名称'}
+                showSearch
+                filterOption={(input, option) => {
+                  const txt = option!.label + option!.num
+
+                  return txt.toLowerCase().includes(input.toLowerCase())
+                }}
+                options={goodsArr}
+                // fieldNames={{ label: 'num', value: 'num' }}
+                allowClear={false}
+                value={topInfo.goodsIds || null}
+                onChange={e => setTopInfo({ ...topInfo, goodsIds: e ? e : '' })}
+              />
+            </div>
+          </div>
+
+          <div className='E3row E3rowFull2'>
+            <div className='E3rowll'>
+              <span> * </span>现状描述:
+            </div>
+            <div className='E3rowrr'>
+              <TextArea
+                value={topInfo.reason}
+                onChange={e => setTopInfo({ ...topInfo, reason: e.target.value.trim() })}
+                readOnly={['3', '4'].includes(key)}
+                placeholder='请输入内容'
+                maxLength={500}
+                showCount
+              />
+            </div>
+          </div>
+
+          <div className='E3row'>
+            <div className='E3rowll'>
+              <span> * </span>经手人:
+            </div>
+            <div className='E3rowrr'>
+              <Input
+                value={topInfo.sonUser}
+                onChange={e => setTopInfo({ ...topInfo, sonUser: e.target.value.trim() })}
+                readOnly={['3', '4'].includes(key)}
+                placeholder='请输入内容'
+                maxLength={30}
+                showCount
+              />
+            </div>
+          </div>
+
+          <div className='E3row'>
+            <div className='E3rowll'>相关盘点单:</div>
+            <div className='E3rowrr'>
+              <Select
+                disabled={['3', '4'].includes(key)}
+                placeholder={['3', '4'].includes(key) ? '空' : '请搜索盘点单编号'}
+                showSearch
+                // filterOption={(input, option) => {
+                //   const txt = option!.label + option!.num
+
+                //   return txt.toLowerCase().includes(input.toLowerCase())
+                // }}
+                // 待完善相关盘点单
+                options={[]}
+                // fieldNames={{ label: 'num', value: 'num' }}
+                allowClear={false}
+                value={topInfo.relatedOrderNum || null}
+                onChange={e => setTopInfo({ ...topInfo, relatedOrderNum: e ? e : '' })}
+              />
+            </div>
+          </div>
+
+          <div className='E3row E3row2'>
+            <div className='E3rowll'>附件:</div>
+            <div className='E3rowrr'>
+              <Z3upFiles
+                max={10}
+                isLook={['3', '4'].includes(key)}
+                ref={filesRef}
+                fileCheck={false}
+                dirCode='E3actuality'
+                myUrl='cms/orderPreserveCurrent/upload'
+                lookData={topInfo.files || []}
+                size={500}
+                fromData={{ moduleId: topInfo.id }}
+              />
+            </div>
+          </div>
+
+          <div className='E3row E3rowFull'>
+            <div className='E3rowll'>备注:</div>
+            <div className='E3rowrr'>
+              <ZRichTexts
+                check={false}
+                dirCode='E3actuality'
+                myUrl='cms/goodsFile/upload'
+                isLook={['3', '4'].includes(key)}
+                ref={ZRichTextRef}
+                isOne={true}
+                upAudioBtnNone={true}
+              />
+            </div>
+          </div>
+        </div>
+
+        {/* 申请流程 */}
+        {auditsShow ? (
+          <ZflowTable tableArr={topInfo.audits || []} closeFu={() => setAuditsShow(false)} />
+        ) : null}
+
+        {/* 附件归档 */}
+        {topInfo.status === 4 ? (
+          <ZupFileTable
+            listTemp={topInfo.filing || []}
+            dirCode='E3actuality'
+            myUrl='cms/orderPreserveCurrent/upload'
+            fromData={{ moduleId: topInfo.id }}
+          />
+        ) : null}
+      </div>
+
+      {/* 底部按钮 */}
+      <div className='E3btn'>
+        {['3', '4'].includes(key) && topInfo.audits && topInfo.audits.length ? (
+          <Button type='primary' onClick={() => setAuditsShow(true)}>
+            申请记录
+          </Button>
+        ) : null}
+
+        {key === '4' ? (
+          lookBtn
+        ) : (
+          <>
+            {key === '3' ? (
+              <Button type='primary' onClick={() => btnClickFu('审批')}>
+                审批
+              </Button>
+            ) : (
+              <Button type='primary' onClick={() => btnClickFu(key === '1' ? '创建' : '保存')}>
+                {key === '1' ? '创建' : '保存'}
+              </Button>
+            )}
+
+            {key === '1' ? (
+              <Button type='primary' onClick={() => btnClickFu('草稿')}>
+                存草稿
+              </Button>
+            ) : null}
+
+            <MyPopconfirm txtK='取消' onConfirm={() => history.push('/accident')} />
+          </>
+        )}
+      </div>
     </div>
   )
 }

+ 27 - 0
src/pages/E_goodsStorage/E3actuality/index.module.scss

@@ -1,4 +1,31 @@
 .E3actuality {
+  background-color: #fff;
+  border-radius: 10px;
+  padding: 15px 24px 0;
   :global {
+    .E3top {
+      display: flex;
+      justify-content: space-between;
+      margin-bottom: 15px;
+      .E3topll {
+        display: flex;
+        & > div {
+          position: relative;
+          margin-right: 15px;
+          display: flex;
+          align-items: center;
+          .ant-input {
+            width: 150px;
+          }
+        }
+      }
+      .ant-select-selection-placeholder {
+        color: black;
+      }
+    }
+
+    .ant-table-cell {
+      padding: 8px !important;
+    }
   }
 }

+ 334 - 2
src/pages/E_goodsStorage/E3actuality/index.tsx

@@ -1,9 +1,341 @@
-import React from 'react'
+import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
 import styles from './index.module.scss'
+import { Button, DatePicker, Input, Select } from 'antd'
+import { useDispatch, useSelector } from 'react-redux'
+import { E3_APIdel, E3_APIgetList } from '@/store/action/E3actuality'
+import { MessageFu } from '@/utils/message'
+import history, { btnFlagFu } from '@/utils/history'
+import { FourTableType } from '@/pages/B_enterTibet/B1collect/type'
+import MyPopconfirm from '@/components/MyPopconfirm'
+import store, { RootState } from '@/store'
+import { E3tableC, statusObj } from '@/utils/tableData'
+import classNames from 'classnames'
+import dayjs from 'dayjs'
+import { selectObj } from '@/utils/select'
+import { E1inputKeyArr } from '../E1accident/data'
+import { E1baseFormData } from '../E1accident'
+import { E1InputKeyType } from '../E1accident/type'
+import MyTable from '@/components/MyTable'
+import Y1cathet from '@/pages/Y_goodsDetails/Y1cathet'
+const { RangePicker } = DatePicker
+
 function E3actuality() {
+  const dispatch = useDispatch()
+  const [formData, setFormData] = useState(E1baseFormData)
+  const formDataRef = useRef(E1baseFormData)
+  const formDataOldRef = useRef(E1baseFormData)
+
+  useEffect(() => {
+    formDataRef.current = formData
+  }, [formData])
+
+  // 点击搜索的 时间戳
+  const [timeKey, setTimeKey] = useState(0)
+
+  // 点击搜索
+  const clickSearch = useCallback(() => {
+    setFormData({ ...formData, pageNum: 1 })
+    setTimeout(() => {
+      setTimeKey(Date.now())
+    }, 50)
+  }, [formData])
+
+  // 时间选择器改变
+
+  const timeChange = useCallback(
+    (date: any, dateString: any) => {
+      let businessTimeStart = ''
+      let businessTimeEnd = ''
+      if (dateString[0] && dateString[1]) {
+        businessTimeStart = dateString[0] + ' 00:00:00'
+        businessTimeEnd = dateString[1] + ' 23:59:59'
+      }
+      setFormData({ ...formData, businessTimeStart, businessTimeEnd })
+    },
+    [formData]
+  )
+
+  const timeChange2 = useCallback(
+    (date: any, dateString: any) => {
+      let startTime = ''
+      let endTime = ''
+      if (dateString[0] && dateString[1]) {
+        startTime = dateString[0] + ' 00:00:00'
+        endTime = dateString[1] + ' 23:59:59'
+      }
+      setFormData({ ...formData, startTime, endTime })
+    },
+    [formData]
+  )
+
+  // 封装发送请求的函数
+  const getListFu = useCallback(() => {
+    formDataOldRef.current = { ...formDataRef.current }
+    dispatch(E3_APIgetList(formDataRef.current))
+  }, [dispatch])
+
+  useEffect(() => {
+    getListFu()
+  }, [getListFu, timeKey])
+
+  // 输入框的改变
+  const txtChangeFu = useCallback(
+    (txt: string, key: E1InputKeyType) => {
+      setFormData({
+        ...formData,
+        [key]: txt
+      })
+    },
+    [formData]
+  )
+  // 点击重置
+  const resetSelectFu = useCallback(() => {
+    setFormData(E1baseFormData)
+    setTimeout(() => {
+      setTimeKey(Date.now())
+    }, 50)
+  }, [])
+
+  // 页码变化
+  const paginationChange = useCallback(
+    (pageNum: number, pageSize: number) => {
+      setFormData({ ...formData, pageNum, pageSize })
+      setTimeout(() => {
+        setTimeKey(Date.now())
+      }, 50)
+    },
+    [formData]
+  )
+
+  // 点击删除
+  const delTableFu = useCallback(
+    async (id: number) => {
+      const res = await E3_APIdel(id)
+      if (res.code === 0) {
+        MessageFu.success('删除成功')
+        getListFu()
+      }
+    },
+    [getListFu]
+  )
+
+  // 点击各种操作按钮
+  const tableBtnFu = useCallback((id: number, key: string) => {
+    history.push(`/actuality_edit/${key}/${id}`)
+  }, [])
+
+  const tableLastBtn = useMemo(() => {
+    return [
+      {
+        title: '操作',
+        render: (item: FourTableType) => {
+          let obj = btnFlagFu(item)
+          return !Object.values(obj).some(Boolean) ? (
+            '-'
+          ) : (
+            <>
+              {obj['编辑'] ? (
+                <Button size='small' type='text' onClick={() => tableBtnFu(item.id, '2')}>
+                  编辑
+                </Button>
+              ) : null}
+
+              {obj['审批'] ? (
+                <Button size='small' type='text' onClick={() => tableBtnFu(item.id, '3')}>
+                  审批
+                </Button>
+              ) : null}
+              {obj['查看'] ? (
+                <Button size='small' type='text' onClick={() => tableBtnFu(item.id, '4')}>
+                  查看
+                </Button>
+              ) : null}
+
+              {obj['删除'] ? (
+                <MyPopconfirm txtK='删除' onConfirm={() => delTableFu(item.id)} />
+              ) : null}
+            </>
+          )
+        }
+      }
+    ]
+  }, [delTableFu, tableBtnFu])
+
+  // 打开侧边栏
+  const [cathet, setCathet] = useState(0)
+
+  const startBtn = useMemo(() => {
+    return [
+      {
+        title: '藏品编号',
+        render: (item: FourTableType) => {
+          return (
+            <span
+              onClick={() => setCathet(Number(item.goodsIds))}
+              className={classNames('D1GtNum', item.id === cathet ? 'D1GtNumAc' : '')}
+            >
+              {item.goodsNum || '(空)'}
+            </span>
+          )
+        }
+      }
+    ]
+  }, [cathet])
+
+  // 从仓库拿数据
+  const tableInfo = useSelector((state: RootState) => state.E3actuality.tableInfo)
+
+  // 点击导出
+  const deriveFu = useCallback(async () => {
+    const res = await E3_APIgetList(
+      {
+        ...formDataOldRef.current,
+        pageNum: 1,
+        pageSize: 99999
+      },
+      true
+    )
+
+    if (res.code === 0) {
+      if (res.data.records.length <= 0) return MessageFu.warning('当前搜索条件没有数据!')
+
+      store.dispatch({
+        type: 'layout/exInfo',
+        payload: {
+          name: '现状登记',
+          show: true,
+          arr: [
+            { key: 'goodsNum', txt: '藏品编号' },
+            { key: 'numName', txt: '编号类型' },
+            { key: 'num', txt: '订单编号' },
+            { key: 'date', txt: '登记日期' },
+            { key: 'goodsName', txt: '藏品名称' },
+            { key: 'sonUser', txt: '经手人' },
+            { key: 'creatorName', txt: '发起人' },
+            { key: 'createTime', txt: '发送日期' },
+            { key: 'status', txt: '申请状态' }
+          ],
+          data: res.data.records.map((v: FourTableType) => ({
+            ...v,
+            status: statusObj[v.status as 1]
+          }))
+        }
+      })
+    }
+  }, [])
+
   return (
     <div className={styles.E3actuality}>
-      <h1>E3actuality</h1>
+      <div className='pageTitle'>现状登记</div>
+      <div className='E3top'>
+        <div className='E3topll'>
+          {E1inputKeyArr.map(item => (
+            <div key={item.name}>
+              <span>{item.name}:</span>
+              <Input
+                placeholder={`请输入${item.name}`}
+                maxLength={30}
+                value={formData[item.key]}
+                onChange={e => txtChangeFu(e.target.value, item.key)}
+              />
+            </div>
+          ))}
+
+          <div>
+            <span>编号类型:</span>
+            <Select
+              allowClear={true}
+              placeholder='全部'
+              style={{ width: 150 }}
+              value={formData.numName ? formData.numName : null}
+              onChange={e => setFormData({ ...formData, numName: e })}
+              options={selectObj['藏品编号类型']}
+            />
+          </div>
+        </div>
+        <div className='E3toprr'>
+          <Button type='primary' onClick={deriveFu}>
+            批量导出
+          </Button>
+          &emsp;
+          <Button type='primary' onClick={() => history.push('/actuality_edit/1/null')}>
+            新增
+          </Button>
+        </div>
+      </div>
+
+      <div className='E3top'>
+        <div className='E3topll'>
+          <div>
+            <span>登记日期范围:</span>
+            <RangePicker
+              style={{ width: 234 }}
+              value={
+                formData.businessTimeStart
+                  ? [dayjs(formData.businessTimeStart), dayjs(formData.businessTimeEnd)]
+                  : null
+              }
+              onChange={timeChange}
+            />
+          </div>
+
+          <div>
+            <span>发起日期范围:</span>
+            <RangePicker
+              style={{ width: 234 }}
+              value={
+                formData.startTime ? [dayjs(formData.startTime), dayjs(formData.endTime)] : null
+              }
+              onChange={timeChange2}
+            />
+          </div>
+
+          <div>
+            <span>选择角色:</span>
+            <Select
+              allowClear={true}
+              style={{ width: 150 }}
+              placeholder='全部'
+              options={selectObj['角色']}
+              // fieldNames={{ value: 'id', label: 'roleName' }}
+              value={formData.userType ? formData.userType : null}
+              onChange={e => setFormData({ ...formData, userType: e })}
+            />
+          </div>
+
+          <div>
+            <span>申请状态:</span>
+            <Select
+              allowClear={true}
+              placeholder='全部'
+              style={{ width: 150 }}
+              value={formData.status ? formData.status : null}
+              onChange={e => setFormData({ ...formData, status: e })}
+              options={selectObj['申请状态'].filter(v => v.label !== '待盘点')}
+            />
+          </div>
+        </div>
+        <div className='E3toprr'>
+          <Button type='primary' onClick={clickSearch}>
+            查询
+          </Button>
+          &emsp;<Button onClick={resetSelectFu}>重置</Button>
+        </div>
+      </div>
+      {/* 表格 */}
+      <MyTable
+        yHeight={610}
+        list={tableInfo.list}
+        columnsTemp={E3tableC}
+        startBtn={startBtn}
+        lastBtn={tableLastBtn}
+        pageNum={formData.pageNum}
+        pageSize={formData.pageSize}
+        total={tableInfo.total}
+        onChange={(pageNum, pageSize) => paginationChange(pageNum, pageSize)}
+      />
+      {/* 打开侧边栏 */}
+      <Y1cathet sId={cathet} closeFu={() => setCathet(0)} />
     </div>
   )
 }

+ 13 - 1
src/pages/E_goodsStorage/E4repair/index.tsx

@@ -23,7 +23,8 @@ const E4baseFormData: E4FormType = {
   dateStart: '',
   dateEnd: '',
   userName: '',
-  userType: ''
+  userType: '',
+  status: ''
 }
 
 function E4repair() {
@@ -242,6 +243,17 @@ function E4repair() {
               onChange={e => setFormData({ ...formData, userType: e })}
             />
           </div>
+          <div>
+            <span>申请状态:</span>
+            <Select
+              allowClear={true}
+              placeholder='全部'
+              style={{ width: 150 }}
+              value={formData.status ? formData.status : null}
+              onChange={e => setFormData({ ...formData, status: e })}
+              options={selectObj['申请状态'].filter(v => v.label !== '待盘点')}
+            />
+          </div>
         </div>
         <div className='E4top2'>
           <Button type='primary' onClick={deriveFu}>

+ 1 - 0
src/pages/E_goodsStorage/E4repair/type.d.ts

@@ -6,4 +6,5 @@ export type E4FormType = {
   dateEnd: string
   userName: string
   userType: string
+  status: string
 }

+ 6 - 2
src/pages/Y_goodsDetails/Y2look/index.tsx

@@ -72,7 +72,11 @@ function Y2look() {
             style={{ color: '#ff4d4d' }}
             className='Y2xia'
             onClick={() => {
-              history.push(`/cancel_edit/1/null?id=${sId}`)
+              if (info.statusStorage === 6) {
+                MessageFu.warning('该藏品注销审核中,无法重复注销')
+              } else if (info.statusStorage === 7) {
+                MessageFu.warning('该藏品已注销')
+              } else history.push(`/cancel_edit/1/null?id=${sId}`)
             }}
           >
             注销
@@ -82,7 +86,7 @@ function Y2look() {
     ]
 
     return arr
-  }, [info.isEdit, sId])
+  }, [info.isEdit, info.statusStorage, sId])
 
   const items2 = useMemo(() => {
     let arr: MenuProps['items'] = [

+ 7 - 0
src/store/action/D4impStor.ts

@@ -75,3 +75,10 @@ export const D4_APIsaveAudit = (data: any) => {
 export const D4_APIrevocation = (id: number) => {
   return http.get(`cms/orderIn/revocation/${id}`)
 }
+
+/**
+ * 入库-自动分配分库号
+ */
+export const D4_APIgetStorageNum = (num: number, storageId: number) => {
+  return http.get(`cms/orderIn/getStorageNum?limit=${num}&storageId=${storageId}`)
+}

+ 13 - 2
src/utils/tableData.ts

@@ -302,7 +302,7 @@ export const E1tableC = [
 export const E2tableC = [
   ['txt', '业务单号', 'num'],
   ['txt', '申请名称', 'name'],
-  ['txt', '关联库房', 'storageName'], //待完善
+  ['txt', '关联库房', 'storageName'], //待完善-旧版
   ['txt', '发起部门', 'deptName'],
   ['txt', '发送人', 'creatorName'],
   ['txt', '发起日期', 'createTime'],
@@ -310,7 +310,18 @@ export const E2tableC = [
   ['txt', '相关盘点', '待完善']
 ]
 
-//
+export const E3tableC = [
+  ['txt', '编号类型', 'numName'],
+  ['txt', '申请编号', 'num'],
+  ['txt', '登记日期', 'date'],
+  ['txt', '藏品名称', 'goodsName'],
+  ['txt', '经手人', 'sonUser'],
+  ['txt', '发起人', 'creatorName'],
+  ['txt', '发送日期', 'createTime'],
+  ['txtChange', '申请状态', 'status', statusObj]
+]
+
+//文物修复
 export const E4tableC = [
   ['txt', '申请编号', 'num'],
   ['txt', '交修日期', 'dateStart'],