shaogen1995 пре 3 месеци
родитељ
комит
b1ad7960dc
27 измењених фајлова са 610 додато и 91 уклоњено
  1. 1 1
      src/pages/A3_ledger/C1ledger/type.d.ts
  2. 1 1
      src/pages/B_enterTibet/B1collect/B1edit/index.tsx
  3. 1 1
      src/pages/B_enterTibet/B1collect/index.tsx
  4. 1 1
      src/pages/B_enterTibet/B2identify/B2edit/index.tsx
  5. 1 1
      src/pages/B_enterTibet/B2identify/index.tsx
  6. 1 1
      src/pages/B_enterTibet/B34typeIn/B34edit/index.tsx
  7. 1 1
      src/pages/B_enterTibet/B34typeIn/index.tsx
  8. 1 1
      src/pages/C_goodsManage/C22goodEdit/index.tsx
  9. 1 1
      src/pages/D_storeManage/D1storage/D1Loc/index.tsx
  10. 5 0
      src/pages/D_storeManage/D1storage/index.module.scss
  11. 7 1
      src/pages/D_storeManage/D1storage/index.tsx
  12. 70 15
      src/pages/D_storeManage/D4impStor/D4edit/D4check/index.tsx
  13. 42 17
      src/pages/D_storeManage/D4impStor/D4edit/index.tsx
  14. 10 0
      src/pages/D_storeManage/D4impStor/data.ts
  15. 4 5
      src/pages/D_storeManage/D4impStor/index.tsx
  16. 41 0
      src/pages/D_storeManage/D6putsStor/data.ts
  17. 26 0
      src/pages/D_storeManage/D6putsStor/index.module.scss
  18. 335 2
      src/pages/D_storeManage/D6putsStor/index.tsx
  19. 1 1
      src/pages/D_storeManage/D8cancel/D8edit/index.tsx
  20. 1 1
      src/pages/D_storeManage/D8cancel/index.tsx
  21. 1 1
      src/pages/E_goodsStorage/E4repair/E4edit/index.tsx
  22. 20 0
      src/pages/Layout/index.tsx
  23. 3 24
      src/pages/Y_goodsDetails/Y2look/index.tsx
  24. 1 1
      src/store/action/A32Routing.ts
  25. 14 0
      src/store/action/D4impStor.ts
  26. 1 1
      src/utils/http.ts
  27. 19 13
      src/utils/tableData.ts

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

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

+ 1 - 1
src/pages/B_enterTibet/B1collect/B1edit/index.tsx

@@ -274,7 +274,7 @@ function B1edit() {
     <div className={styles.B1edit}>
       <div className='pageTitle'>藏品征集-{Reflect.get(pageTitTxtObj, key)}</div>
 
-      <div className='B1main'>
+      <div className='B1main' ref={sollrDom}>
         {['3'].includes(key) ? (
           <X3auditInfo
             dirCode='B1collect'

+ 1 - 1
src/pages/B_enterTibet/B1collect/index.tsx

@@ -184,7 +184,7 @@ function B1collect() {
             { key: 'num', txt: '业务单号' },
             { key: 'date', txt: '征集日期' },
             { key: 'deptName', txt: '发起部门' },
-            { key: 'creatorName', txt: '发人' },
+            { key: 'creatorName', txt: '发人' },
             { key: 'createTime', txt: '发起日期' },
             { key: 'status', txt: '申请状态' }
           ],

+ 1 - 1
src/pages/B_enterTibet/B2identify/B2edit/index.tsx

@@ -326,7 +326,7 @@ function B2edit() {
   return (
     <div className={styles.B2edit}>
       <div className='pageTitle'>藏品鉴定-{Reflect.get(pageTitTxtObj, key)}</div>
-      <div className='B2main'>
+      <div className='B2main' ref={sollrDom}>
         {['3'].includes(key) ? (
           <X3auditInfo
             dirCode='B2identify'

+ 1 - 1
src/pages/B_enterTibet/B2identify/index.tsx

@@ -168,7 +168,7 @@ function B2identify() {
           arr: [
             { key: 'num', txt: '业务单号' },
             { key: 'deptName', txt: '发起部门' },
-            { key: 'creatorName', txt: '发人' },
+            { key: 'creatorName', txt: '发人' },
             { key: 'createTime', txt: '发起日期' },
             { key: 'status', txt: '申请状态' }
           ],

+ 1 - 1
src/pages/B_enterTibet/B34typeIn/B34edit/index.tsx

@@ -379,7 +379,7 @@ function B34edit({ type }: Props) {
         藏品{type}-{Reflect.get(pageTitTxtObj, key)}
       </div>
 
-      <div className='B34main'>
+      <div className='B34main' ref={sollrDom}>
         {['3'].includes(key) ? (
           <X3auditInfo
             dirCode='B34typeIn'

+ 1 - 1
src/pages/B_enterTibet/B34typeIn/index.tsx

@@ -185,7 +185,7 @@ function B34typeIn({ type }: Props) {
             { key: 'date', txt: `${type}日期` },
             { key: 'num', txt: `${type}凭证号` },
             { key: 'deptName', txt: '发起部门' },
-            { key: 'creatorName', txt: '发人' },
+            { key: 'creatorName', txt: '发人' },
             { key: 'createTime', txt: '发起日期' },
             { key: 'status', txt: '申请状态' }
           ],

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

@@ -226,7 +226,7 @@ function C22goodEdit() {
             { key: 'num', txt: '业务单号' },
             { key: 'typeName', txt: '编辑类型' },
             { key: 'deptName', txt: '发起部门' },
-            { key: 'creatorName', txt: '发人' },
+            { key: 'creatorName', txt: '发人' },
             { key: 'createTime', txt: '发起日期' },
             { key: 'status', txt: '申请状态' }
           ],

+ 1 - 1
src/pages/D_storeManage/D1storage/D1Loc/index.tsx

@@ -64,7 +64,7 @@ function D1Loc({ lookFu, TreeDom, tableId }: Props) {
   return (
     <div className={styles.D1Loc}>
       <div className='D1Ltop'>
-        {/* 待完善 */}
+        {/* 待完善 -旧版*/}
         <Checkbox checked={isNull} onChange={e => setIsNull(e.target.checked)}>
           仅查看空置库位
         </Checkbox>

+ 5 - 0
src/pages/D_storeManage/D1storage/index.module.scss

@@ -34,6 +34,11 @@
           .D1Lmainll2 {
             height: calc(100% - 42px);
             overflow-y: auto;
+
+            .ant-tree-treenode {
+              height: 36px;
+              line-height: 36px;
+            }
           }
         }
         .site-tree-search-value {

+ 7 - 1
src/pages/D_storeManage/D1storage/index.tsx

@@ -26,7 +26,13 @@ function D1storage() {
   const getTreeFu = useCallback(async () => {
     const res = await D1_APIgetTree()
     if (res.code === 0) {
-      setDictList(res.data)
+      // 由树变成 单级 第二级不要
+      setDictList(
+        res.data.map((v: any) => ({
+          ...v,
+          children: null
+        }))
+      )
       setLoding(true)
       if (res.data && res.data.length) setAcShu(res.data[0].id)
     }

+ 70 - 15
src/pages/D_storeManage/D4impStor/D4edit/D4check/index.tsx

@@ -3,18 +3,34 @@ import styles from './index.module.scss'
 import { Button, InputNumber, Modal } from 'antd'
 import MyTable from '@/components/MyTable'
 import MyPopconfirm from '@/components/MyPopconfirm'
+import { C1GoodType } from '@/pages/A3_ledger/C1ledger/type'
+import { D4_APIauditSnap, D4_APIcheckSiteNum } from '@/store/action/D4impStor'
+import { MessageFu } from '@/utils/message'
+import history from '@/utils/history'
+
+// 2个数字数组比较是否有重复的值
+const findFirstCommon = (a: number[], b: number[]) => a.find(item => new Set(b).has(item)) || null
+
+export type D4checkArrType = {
+  goodsId: number // 文物id
+  id: number //自己的id
+  orderId: number // 订单id
+  siteNum: number // 库位号
+  snap: string //快照数据
+}
 
 type Props = {
   closeFu: () => void
-  listTemp: any[]
+  listTemp: D4checkArrType[]
+  storageId: number
+  waiSiteNumArr: number[]
 }
 
-function D4check({ closeFu, listTemp }: Props) {
-  // 待完善类型
-  const [list, setList] = useState<any[]>([])
+function D4check({ closeFu, listTemp, storageId, waiSiteNumArr }: Props) {
+  const [tableList, setTableList] = useState<C1GoodType[]>([])
 
   useEffect(() => {
-    setList(listTemp || [])
+    setTableList(listTemp.map(v => JSON.parse(v.snap)))
   }, [listTemp])
 
   const tableLastBtn = useMemo(() => {
@@ -31,12 +47,12 @@ function D4check({ closeFu, listTemp }: Props) {
             min={1}
             max={99999999}
             precision={0}
-            value={item.shuzi}
+            value={item.siteNum}
             onChange={e =>
-              setList(
-                list.map(v => ({
+              setTableList(
+                tableList.map(v => ({
                   ...v,
-                  shuzi: v.id === item.id ? e : v.shuzi
+                  siteNum: v.id === item.id ? e : v.siteNum
                 }))
               )
             }
@@ -49,12 +65,51 @@ function D4check({ closeFu, listTemp }: Props) {
         render: (item: any) => item.name || '(空)'
       }
     ]
-  }, [list])
+  }, [tableList])
 
   // 点击确定
-  const btnOk = useCallback(() => {
-    closeFu()
-  }, [closeFu])
+  const btnOk = useCallback(async () => {
+    const siteNums = tableList.map(v => v.siteNum!)
+
+    const errNum = findFirstCommon(siteNums, waiSiteNumArr)
+
+    if (errNum) return MessageFu.warning(`分库号${errNum}重复`)
+
+    const res1 = await D4_APIcheckSiteNum({
+      siteNums,
+      storageId
+    })
+    if (res1.code === 0) {
+      if (res1.data.length) MessageFu.warning(`分库号${res1.data}重复`)
+      else {
+        const snaps: D4checkArrType[] = []
+        listTemp.forEach((v, i) => {
+          const obj22 = tableList[i]
+
+          snaps.push({
+            goodsId: v.goodsId,
+            id: v.id,
+            orderId: v.orderId,
+            siteNum: obj22.siteNum!,
+            snap: JSON.stringify(obj22)
+          })
+        })
+
+        const obj = {
+          id: listTemp[0].orderId,
+          snaps
+        }
+
+        const res2 = await D4_APIauditSnap(obj)
+        if (res2.code === 0) {
+          closeFu()
+          MessageFu.success('审批成功')
+          // 跳详情页
+          history.push(`/impStor_edit/4/${listTemp[0].orderId}`)
+        }
+      }
+    }
+  }, [closeFu, listTemp, storageId, tableList, waiSiteNumArr])
 
   return (
     <Modal
@@ -70,7 +125,7 @@ function D4check({ closeFu, listTemp }: Props) {
         {/* 表格 */}
         <MyTable
           classKey='D4check'
-          list={list}
+          list={tableList}
           columnsTemp={[
             ['txt', '藏品编号', 'num'],
             ['txt', '编号类型', 'numName']
@@ -81,7 +136,7 @@ function D4check({ closeFu, listTemp }: Props) {
       </div>
 
       <div className='D4Cbtn'>
-        <Button type='primary' disabled={list.some(v => !v.shuzi)} onClick={btnOk}>
+        <Button type='primary' disabled={tableList.some(v => !v.siteNum)} onClick={btnOk}>
           提交
         </Button>
         &emsp;

+ 42 - 17
src/pages/D_storeManage/D4impStor/D4edit/index.tsx

@@ -33,8 +33,9 @@ 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 D4check from './D4check'
+import D4check, { D4checkArrType } from './D4check'
 import { API_goodsInfo } from '@/store/action/C1ledger'
+import { findFirstDuplicate } from '../data'
 
 export const pageTitTxtObj = {
   1: '新增',
@@ -159,7 +160,11 @@ function D4edit() {
 
       if (val !== '草稿') {
         if (snaps.length === 0) return MessageFu.warning('请添加藏品')
-        if (snaps.some(v => !v.siteNums)) return MessageFu.warning('请输入藏品分库号')
+        if (snaps.some(v => !v.siteNum)) return MessageFu.warning('请输入藏品分库号')
+        // 分库号输入重复校验
+        const siteNumArr = snaps.map(v => v.siteNum!)
+        const num = findFirstDuplicate(siteNumArr)
+        if (num) return MessageFu.warning(`分库号${num}重复`)
       }
 
       if (val === '审批') {
@@ -170,7 +175,7 @@ function D4edit() {
         }
         const rtf2 = ZAuditRef.current?.resData()
 
-        const res = await D4_APIsaveAudit({
+        const res: any = await D4_APIsaveAudit({
           orderId: topInfo.id,
           rtfOpinion: rtf2,
           status: auditSta === '同意' ? 1 : 2
@@ -180,17 +185,21 @@ function D4edit() {
           MessageFu.success('审批成功')
           // 跳详情页
           history.push(`/impStor_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.siteNums).join(','),
+          siteNums: snaps.map(v => v.siteNum).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.siteNum,
             snap: JSON.stringify(v)
           }))
         }
@@ -205,11 +214,16 @@ function D4edit() {
             MessageFu.success('草稿保存成功')
           }
         } else {
-          const res = val === '创建' ? await D4_APIsaveCreate(obj) : await D4_APIsaveApply(obj)
+          const res: any = val === '创建' ? await D4_APIsaveCreate(obj) : await D4_APIsaveApply(obj)
           if (res.code === 0) {
             MessageFu.success(`${val}成功`)
             // 跳到详情页
             history.push(`/impStor_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}已存在`)
           }
         }
       }
@@ -222,7 +236,7 @@ function D4edit() {
 
   // 表格的输入框改变
   const tableInputChange = useCallback(
-    (id: number, val: number | null, key: 'siteNums') => {
+    (id: number, val: number | null, key: 'siteNum') => {
       setSnaps(
         snaps.map(v => ({
           ...v,
@@ -264,8 +278,8 @@ function D4edit() {
             min={1}
             max={99999999}
             precision={0}
-            value={item.siteNums}
-            onChange={e => tableInputChange(item.id, e, 'siteNums')}
+            value={item.siteNum}
+            onChange={e => tableInputChange(item.id, e, 'siteNum')}
             placeholder='请输入'
           />
         )
@@ -330,18 +344,23 @@ function D4edit() {
     async (val: '创建' | '提交' | '撤回') => {
       if (val !== '撤回') {
         if (snaps.length === 0) return MessageFu.warning('请添加藏品')
-        if (snaps.some(v => !v.siteNums)) return MessageFu.warning('请输入藏品分库号')
+        if (snaps.some(v => !v.siteNum)) return MessageFu.warning('请输入藏品分库号')
+        // 分库号输入重复校验
+        const siteNumArr = snaps.map(v => v.siteNum!)
+        const num = findFirstDuplicate(siteNumArr)
+        if (num) return MessageFu.warning(`分库号${num}重复`)
       }
 
       const obj = {
         ...topInfo,
         goodsIds: snaps.map(v => v.id).join(','),
-        siteNums: snaps.map(v => v.siteNums).join(','),
+        siteNums: snaps.map(v => v.siteNum).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.siteNum,
           snap: JSON.stringify(v)
         }))
       }
@@ -457,7 +476,7 @@ function D4edit() {
       setSnaps(
         snaps.map((v, i) => ({
           ...v,
-          siteNums: res.data[i]
+          siteNum: res.data[i]
         }))
       )
       MessageFu.success('分配成功')
@@ -465,14 +484,13 @@ function D4edit() {
   }, [snaps, topInfo.storageId])
 
   // 二次校验分库号
-  // 待完善类型
-  const [numCheck, setNumCheck] = useState<any[]>([])
+  const [checkArr, setCheckArr] = useState<D4checkArrType[]>([])
 
   return (
     <div className={styles.D4edit}>
       <div className='pageTitle'>藏品入库-{pageTitTxt}</div>
 
-      <div className='D4main'>
+      <div className='D4main' ref={sollrDom}>
         {['3'].includes(key) ? (
           <X3auditInfo
             dirCode='D4impStor'
@@ -574,7 +592,7 @@ function D4edit() {
 
                   return txt.toLowerCase().includes(input.toLowerCase())
                 }}
-                options={relatedOrderNumArr.map(v => ({ label: v.num, value: v.id }))}
+                options={relatedOrderNumArr.map(v => ({ label: v.num, value: v.id + '' }))}
                 // fieldNames={{ label: 'num', value: 'num' }}
                 allowClear={true}
                 value={topInfo.relatedOrderNum || null}
@@ -592,7 +610,7 @@ function D4edit() {
                 disabled={['3', '4'].includes(key)}
                 options={cascaderObjFu()['藏品入库']}
                 changeOnSelect
-                placeholder='请选择'
+                placeholder={['3', '4'].includes(key) ? '(空)' : '请选择'}
                 fieldNames={{ label: 'name', value: 'id', children: 'children' }}
                 allowClear={true}
               />
@@ -709,7 +727,14 @@ function D4edit() {
       ) : null}
 
       {/* 二次校验分库号 */}
-      {numCheck.length ? <D4check closeFu={() => setNumCheck([])} listTemp={numCheck} /> : null}
+      {checkArr.length ? (
+        <D4check
+          storageId={Number(topInfo.storageId)}
+          closeFu={() => setCheckArr([])}
+          listTemp={checkArr}
+          waiSiteNumArr={snaps.map(v => v.siteNum!)}
+        />
+      ) : null}
     </div>
   )
 }

+ 10 - 0
src/pages/D_storeManage/D4impStor/data.ts

@@ -30,3 +30,13 @@ export const D4baseFormData: D4formType = {
   status: '',
   userType: ''
 }
+
+// 分库号重复校验
+export const findFirstDuplicate = (arr: number[]) => {
+  const set = new Set()
+  for (const num of arr) {
+    if (set.has(num)) return num // 第一个重复值
+    set.add(num)
+  }
+  return null
+}

+ 4 - 5
src/pages/D_storeManage/D4impStor/index.tsx

@@ -37,7 +37,6 @@ function D4impStor() {
   }, [formData])
 
   // 时间选择器改变
-
   const timeChange = useCallback(
     (date: any, dateString: any) => {
       let businessTimeStart = ''
@@ -184,7 +183,7 @@ function D4impStor() {
             { key: 'num', txt: '入库单编号' },
             { key: 'sonNum', txt: '分库缩写' },
             { key: 'deptName', txt: '发起部门' },
-            { key: 'creatorName', txt: '发人' },
+            { key: 'creatorName', txt: '发人' },
             { key: 'createTime', txt: '发起日期' },
             { key: 'status', txt: '申请状态' }
           ],
@@ -203,7 +202,7 @@ function D4impStor() {
       <div className='D4top'>
         <div className='D4topll'>
           <div>
-            <span>入日期范围:</span>
+            <span>入日期范围:</span>
             <RangePicker
               value={
                 formData.businessTimeStart
@@ -229,8 +228,8 @@ function D4impStor() {
             <Input
               placeholder='请输入分库缩写'
               maxLength={30}
-              value={formData.num}
-              onChange={e => txtChangeFu(e.target.value, 'num')}
+              value={formData.sonNum}
+              onChange={e => txtChangeFu(e.target.value, 'sonNum')}
             />
           </div>
 

+ 41 - 0
src/pages/D_storeManage/D6putsStor/data.ts

@@ -0,0 +1,41 @@
+type D6baseFormDataType = {
+  pageSize: number
+  pageNum: number
+
+  businessTimeStart: string
+  businessTimeEnd: string
+  sonTypeName: '1' | '2' | '3' | ''
+  num: string
+  sonUnit: string
+  sonNum: string
+  userName: string
+  startTime: string
+  endTime: string
+  status: string
+  userType: string
+}
+
+export type D6InputKeyType = keyof D6baseFormDataType
+
+export const D6baseFormData = {
+  pageSize: 10,
+  pageNum: 1,
+
+  businessTimeStart: '',
+  businessTimeEnd: '',
+  sonTypeName: '',
+  num: '',
+  sonUnit: '',
+  sonNum: '',
+  userName: '',
+  startTime: '',
+  endTime: '',
+  status: '',
+  userType: ''
+}
+
+export const D6typeArr = [
+  { value: '1', label: '分库藏品提退' },
+  { value: '2', label: '藏品馆内提退' },
+  { value: '3', label: '借用藏品点交' }
+]

+ 26 - 0
src/pages/D_storeManage/D6putsStor/index.module.scss

@@ -1,4 +1,30 @@
 .D6putsStor {
+  background-color: #fff;
+  border-radius: 10px;
+  padding: 24px 24px 0;
   :global {
+    .D6top {
+      display: flex;
+      justify-content: space-between;
+      margin-bottom: 15px;
+      .D6topll {
+        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;
+    }
   }
 }

+ 335 - 2
src/pages/D_storeManage/D6putsStor/index.tsx

@@ -1,10 +1,343 @@
-import React from 'react'
+import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
 import styles from './index.module.scss'
+import { useDispatch, useSelector } from 'react-redux'
+import { D6baseFormData, D6InputKeyType, D6typeArr } from './data'
+import { D6_APIdel, D6_APIgetList } from '@/store/action/D6putsStor'
+import { MessageFu } from '@/utils/message'
+import history, { btnFlagFu } from '@/utils/history'
+import { FourTableType } from '@/pages/B_enterTibet/B1collect/type'
+import { Button, DatePicker, Input, Select } from 'antd'
+import MyPopconfirm from '@/components/MyPopconfirm'
+import store, { RootState } from '@/store'
+import { D6tableC, statusObj } from '@/utils/tableData'
+import dayjs from 'dayjs'
+import { selectObj } from '@/utils/select'
+import MyTable from '@/components/MyTable'
+const { RangePicker } = DatePicker
+
 function D6putsStor() {
+  const dispatch = useDispatch()
+  const [formData, setFormData] = useState(D6baseFormData)
+  const formDataRef = useRef(D6baseFormData)
+  const formDataOldRef = useRef(D6baseFormData)
+
+  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(D6_APIgetList(formDataRef.current))
+  }, [dispatch])
+
+  useEffect(() => {
+    getListFu()
+  }, [getListFu, timeKey])
+
+  // 输入框的改变
+  const txtChangeFu = useCallback(
+    (txt: string, key: D6InputKeyType) => {
+      setFormData({
+        ...formData,
+        [key]: txt
+      })
+    },
+    [formData]
+  )
+
+  // 点击重置
+  const resetSelectFu = useCallback(() => {
+    setFormData(D6baseFormData)
+    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 D6_APIdel(id)
+      if (res.code === 0) {
+        MessageFu.success('删除成功')
+        getListFu()
+      }
+    },
+    [getListFu]
+  )
+
+  // 点击各种操作按钮
+  const tableBtnFu = useCallback((id: number, key: string) => {
+    history.push(`/putsStor_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 tableInfo = useSelector((state: RootState) => state.D6putsStor.tableInfo)
+
+  // 点击导出
+  const deriveFu = useCallback(async () => {
+    const res = await D6_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: 'date', txt: '提用日期' },
+            { key: 'sonTypeName', txt: '提退类型' },
+            { key: 'num', txt: '提退单编号' },
+            { key: 'sonUnit', txt: '提用单位(部门)' },
+            { key: 'sonNum', txt: '分库缩写' },
+            { key: 'creatorName', txt: '发起人' },
+            { key: 'createTime', txt: '发起日期' },
+            { key: 'status', txt: '申请状态' }
+          ],
+          data: res.data.records.map((v: FourTableType) => ({
+            ...v,
+            sonTypeName: D6typeArr.find(c => c.value === v.sonTypeName)?.label,
+            status: statusObj[v.status as 1]
+          }))
+        }
+      })
+    }
+  }, [])
+
   return (
     <div className={styles.D6putsStor}>
       <div className='pageTitle'>藏品出库</div>
-      <p>待开发</p>
+      <div className='D6top'>
+        <div className='D6topll'>
+          <div>
+            <span>提用日期范围:</span>
+            <RangePicker
+              style={{ width: 220 }}
+              value={
+                formData.businessTimeStart
+                  ? [dayjs(formData.businessTimeStart), dayjs(formData.businessTimeEnd)]
+                  : null
+              }
+              onChange={timeChange}
+            />
+          </div>
+
+          <div>
+            <span>提退类型:</span>
+            <Select
+              allowClear={true}
+              placeholder='全部'
+              style={{ width: 150 }}
+              value={formData.sonTypeName ? formData.sonTypeName : null}
+              onChange={e => setFormData({ ...formData, sonTypeName: e })}
+              options={D6typeArr}
+            />
+          </div>
+
+          <div>
+            <span>提退单编号:</span>
+            <Input
+              placeholder='请输入提退单编号'
+              maxLength={30}
+              value={formData.num}
+              onChange={e => txtChangeFu(e.target.value, 'num')}
+            />
+          </div>
+
+          <div>
+            <span>提用单位(部门):</span>
+            <Input
+              placeholder='全部'
+              maxLength={30}
+              value={formData.sonUnit}
+              onChange={e => txtChangeFu(e.target.value, 'sonUnit')}
+            />
+          </div>
+        </div>
+        <div className='D6toprr'>
+          <Button type='primary' onClick={deriveFu}>
+            批量导出
+          </Button>
+          &emsp;
+          <Button type='primary' onClick={() => history.push('//putsStor_edit/1/null')}>
+            新增
+          </Button>
+        </div>
+      </div>
+
+      <div className='D6top'>
+        <div className='D6topll'>
+          <div>
+            <span>发起日期范围:</span>
+            <RangePicker
+              style={{ width: 220 }}
+              value={
+                formData.startTime ? [dayjs(formData.startTime), dayjs(formData.endTime)] : null
+              }
+              onChange={timeChange2}
+            />
+          </div>
+
+          <div>
+            <span>分库缩写:</span>
+            <Input
+              style={{ width: 125 }}
+              placeholder='请输入分库缩写'
+              maxLength={30}
+              value={formData.sonNum}
+              onChange={e => txtChangeFu(e.target.value, 'sonNum')}
+            />
+          </div>
+
+          <div>
+            <span>发起人:</span>
+            <Input
+              style={{ width: 120 }}
+              placeholder='请输入发起人'
+              maxLength={30}
+              value={formData.userName}
+              onChange={e => txtChangeFu(e.target.value, 'userName')}
+            />
+          </div>
+
+          <div>
+            <span>申请状态:</span>
+            <Select
+              allowClear={true}
+              placeholder='全部'
+              style={{ width: 120 }}
+              value={formData.status ? formData.status : null}
+              onChange={e => setFormData({ ...formData, status: e })}
+              options={selectObj['申请状态'].filter(v => v.label !== '待盘点')}
+            />
+          </div>
+
+          <div>
+            <span>选择角色:</span>
+            <Select
+              allowClear={true}
+              style={{ width: 120 }}
+              placeholder='全部'
+              options={selectObj['角色']}
+              // fieldNames={{ value: 'id', label: 'roleName' }}
+              value={formData.userType ? formData.userType : null}
+              onChange={e => setFormData({ ...formData, userType: e })}
+            />
+          </div>
+        </div>
+        <div className='D6toprr'>
+          <Button type='primary' onClick={clickSearch}>
+            查询
+          </Button>
+          &emsp;<Button onClick={resetSelectFu}>重置</Button>
+        </div>
+      </div>
+
+      {/* 表格 */}
+      <MyTable
+        yHeight={610}
+        list={tableInfo.list}
+        columnsTemp={D6tableC}
+        lastBtn={tableLastBtn}
+        pageNum={formData.pageNum}
+        pageSize={formData.pageSize}
+        total={tableInfo.total}
+        onChange={(pageNum, pageSize) => paginationChange(pageNum, pageSize)}
+      />
     </div>
   )
 }

+ 1 - 1
src/pages/D_storeManage/D8cancel/D8edit/index.tsx

@@ -399,7 +399,7 @@ function D8edit() {
     <div className={styles.D8edit}>
       <div className='pageTitle'>藏品注销-{pageTitTxt}</div>
 
-      <div className='D8main'>
+      <div className='D8main' ref={sollrDom}>
         {['3'].includes(key) ? (
           <X3auditInfo
             dirCode='D8cancel'

+ 1 - 1
src/pages/D_storeManage/D8cancel/index.tsx

@@ -170,7 +170,7 @@ function D8cancel() {
           arr: [
             { key: 'num', txt: '业务单号' },
             { key: 'deptName', txt: '发起部门' },
-            { key: 'creatorName', txt: '发人' },
+            { key: 'creatorName', txt: '发人' },
             { key: 'createTime', txt: '发起日期' },
             { key: 'status', txt: '申请状态' }
           ],

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

@@ -434,7 +434,7 @@ function E4edit() {
     <div className={styles.E4edit}>
       <div className='pageTitle'>文物修复-{pageTitTxt}</div>
 
-      <div className='E4main'>
+      <div className='E4main' ref={sollrDom}>
         {['3'].includes(key) ? (
           <X3auditInfo
             dirCode='E4repair'

+ 20 - 0
src/pages/Layout/index.tsx

@@ -66,11 +66,30 @@ function Layout() {
   const location = useLocation()
   const [path, setPath] = useState('')
 
+  const sroolRef = useRef<HTMLDivElement>(null)
+  const sroolTimeRef = useRef(-1)
+
   useEffect(() => {
     const arr = location.pathname.split('/')
     let pathTemp = '/'
     if (arr[1]) pathTemp = '/' + arr[1]
 
+    // 滚动到中间
+    clearTimeout(sroolTimeRef.current)
+    if (pathTemp !== '/goodsLook') {
+      sroolTimeRef.current = window.setTimeout(() => {
+        if (sroolRef.current) {
+          const dom = document.querySelector('.layoutLeftMain') as HTMLDivElement
+          if (dom) {
+            dom.scrollTo({
+              top: sroolRef.current.offsetTop - 400,
+              behavior: 'smooth'
+            })
+          }
+        }
+      }, 200)
+    }
+
     setPath(pathTemp)
   }, [location])
 
@@ -242,6 +261,7 @@ function Layout() {
                   key={v2.id}
                   hidden={v2.id >= 9901}
                   className={classNames('layoutLRowBoxRow', pathAcFu(v2.path) ? 'active' : '')}
+                  ref={pathAcFu(v2.path) ? sroolRef : null}
                   onClick={() => pathCutFu(v2)}
                 >
                   {v2.name}

+ 3 - 24
src/pages/Y_goodsDetails/Y2look/index.tsx

@@ -149,14 +149,7 @@ function Y2look() {
       {
         key: '1',
         label: (
-          <span
-            className='Y2xia'
-            onClick={() => {
-              if (1 + 1 === 2) {
-                history.push(`/accident_edit/1/null?id=${sId}`)
-              } else MessageFu.warning('待完善')
-            }}
-          >
+          <span className='Y2xia' onClick={() => history.push(`/accident_edit/1/null?id=${sId}`)}>
             事故登记
           </span>
         )
@@ -165,14 +158,7 @@ function Y2look() {
       {
         key: '3',
         label: (
-          <span
-            className='Y2xia'
-            onClick={() => {
-              if (1 + 1 === 2) {
-                history.push(`/actuality_edit/1/null?id=${sId}`)
-              } else MessageFu.warning('待完善')
-            }}
-          >
+          <span className='Y2xia' onClick={() => history.push(`/actuality_edit/1/null?id=${sId}`)}>
             现状登记
           </span>
         )
@@ -180,14 +166,7 @@ function Y2look() {
       {
         key: '4',
         label: (
-          <span
-            className='Y2xia'
-            onClick={() => {
-              if (1 + 1 === 2) {
-                history.push(`/repair_edit/1/null?id=${sId}`)
-              } else MessageFu.warning('待完善')
-            }}
-          >
+          <span className='Y2xia' onClick={() => history.push(`/repair_edit/1/null?id=${sId}`)}>
             文物修复
           </span>
         )

+ 1 - 1
src/store/action/A32Routing.ts

@@ -1,7 +1,7 @@
 import http from '@/utils/http'
 import { AppDispatch } from '..'
 /**
- * 藏品分账 - 获取分页列表 待完善
+ * 藏品分账 - 获取分页列表
  */
 export const A32_APIgetList = (data: any, exportFlag?: boolean): any => {
   if (exportFlag) return http.post('cms/goods/page', data)

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

@@ -82,3 +82,17 @@ export const D4_APIrevocation = (id: number) => {
 export const D4_APIgetStorageNum = (num: number, storageId: number) => {
   return http.get(`cms/orderIn/getStorageNum?limit=${num}&storageId=${storageId}`)
 }
+
+/**
+ * 入库-检查分库号是否使用
+ */
+export const D4_APIcheckSiteNum = (data: any) => {
+  return http.post('cms/orderIn/checkSiteNum', data)
+}
+
+/**
+ * 入库-保存审核快照
+ */
+export const D4_APIauditSnap = (data: any) => {
+  return http.post('cms/orderIn/auditSnap', data)
+}

+ 1 - 1
src/utils/http.ts

@@ -68,7 +68,7 @@ http.interceptors.response.use(
       }, 200)
     } else if (response.data.code === 0) {
       // MessageFu.success(response.data.msg);
-    } else if (response.data.code !== 3014) MessageFu.warning(response.data.msg)
+    } else if (![3014, 3101].includes(response.data.code)) MessageFu.warning(response.data.msg)
 
     return response.data
   },

+ 19 - 13
src/utils/tableData.ts

@@ -14,6 +14,7 @@
 //     ["text", "创建日期",'description', 50,A],
 //   ];
 
+import { D6typeArr } from '@/pages/D_storeManage/D6putsStor/data'
 import { selectObj } from './select'
 
 // 附件归档
@@ -155,7 +156,7 @@ export const B3tableC = [
   ['txt', '业务单号', 'num'],
   ['txt', '申请名称', 'name'],
   ['txt', '发起部门', 'deptName'],
-  ['txt', '发人', 'creatorName'],
+  ['txt', '发人', 'creatorName'],
   ['txt', '发起日期', 'createTime'],
   ['txtChange', '申请状态', 'status', statusObj]
 ]
@@ -199,7 +200,7 @@ export const C6tableC = [
   ['txt', '业务单号', 'num'],
   ['txt', '编辑类型', 'typeName'],
   ['txt', '发起部门', 'deptName'],
-  ['txt', '发人', 'creatorName'],
+  ['txt', '发人', 'creatorName'],
   ['txt', '发起日期', 'createTime'],
   ['txtChange', '申请状态', 'status', statusObj]
 ]
@@ -233,19 +234,24 @@ export const D4tableC = [
   ['txt', '入库单编号', 'num'],
   ['txt', '分库缩写', 'sonNum'],
   ['txt', '发起部门', 'deptName'],
-  ['txt', '发人', 'creatorName'],
+  ['txt', '发人', 'creatorName'],
   ['txt', '发起日期', 'createTime'],
   ['txtChange', '申请状态', 'status', statusObj]
 ]
 
+// 提退类型obj
+export const sonTypeNameObj: any = {}
+D6typeArr.forEach(v => {
+  businessTypeObj[v.value] = v.label
+})
+
 export const D6tableC = [
-  ['txt', '业务单号', 'num'],
-  ['txt', '申请名称', 'name'],
-  ['txt', '出库库房', 'storageName'],
-  ['txtChange', '是否需要归还', 'isReturn', { 1: '是', 0: '否' }],
-  ['txt', '预计归还日期', 'returnDate'],
-  ['txt', '发起部门', 'deptName'],
-  ['txt', '发送人', 'creatorName'],
+  ['txt', '提用日期', 'date'],
+  ['txtChange', '提退类型', 'sonTypeName', businessTypeObj],
+  ['txt', '提退单编号', 'num'],
+  ['txt', '提用单位(部门)', 'sonUnit'],
+  ['txt', '分库缩写', 'sonNum'],
+  ['txt', '发起人', 'creatorName'],
   ['txt', '发起日期', 'createTime'],
   ['txtChange', '申请状态', 'status', statusObj]
 ]
@@ -271,7 +277,7 @@ export const D4tableCgoods = [
 export const D8tableC = [
   ['txt', '业务单号', 'num'],
   ['txt', '发起部门', 'deptName'],
-  ['txt', '发人', 'creatorName'],
+  ['txt', '发人', 'creatorName'],
   ['txt', '发起日期', 'createTime'],
   ['txtChange', '申请状态', 'status', statusObj]
 ]
@@ -304,10 +310,10 @@ export const E2tableC = [
   ['txt', '申请名称', 'name'],
   ['txt', '关联库房', 'storageName'], //待完善-旧版
   ['txt', '发起部门', 'deptName'],
-  ['txt', '发人', 'creatorName'],
+  ['txt', '发人', 'creatorName'],
   ['txt', '发起日期', 'createTime'],
   ['txtChange', '申请状态', 'status', statusObj],
-  ['txt', '相关盘点', '待完善']
+  ['txt', '相关盘点', '待完善-旧版']
 ]
 
 export const E3tableC = [