Explorar o código

藏品修改 一堆问题

shaogen1995 hai 1 mes
pai
achega
2cba5871bf

+ 78 - 33
后台管理/src/pages/A0addGoods/index.tsx

@@ -18,15 +18,20 @@ import { API_addGoods, API_getGoodsInfo } from '@/store/action/B1ledger'
 import { MessageFu } from '@/utils/message'
 import { MessageFu } from '@/utils/message'
 import history from '@/utils/history'
 import history from '@/utils/history'
 import { B2_APIresubmit } from '@/store/action/B2register'
 import { B2_APIresubmit } from '@/store/action/B2register'
+import { B3_APIcreate, B3_APIresubmit } from '@/store/action/B3edit'
+import { B1listType } from '../B1ledger/data'
 
 
 type Props = {
 type Props = {
   sId: number
   sId: number
   closeFu: () => void
   closeFu: () => void
-  isEdit?: boolean
-  orderId?: number
+  orderId?: number //外层订单id
+  isEdit?: boolean //藏品修改模块
+  isEditresubmit?: Boolean //藏品修改模块重新提交
 }
 }
 
 
-function A0addGoods({ sId, closeFu, isEdit, orderId }: Props) {
+function A0addGoods({ sId, closeFu, isEdit, orderId, isEditresubmit }: Props) {
+  const oldObjRef = useRef({} as B1listType)
+
   // 设置表单ref
   // 设置表单ref
   const FormBoxRef = useRef<FormInstance>(null)
   const FormBoxRef = useRef<FormInstance>(null)
 
 
@@ -36,29 +41,37 @@ function A0addGoods({ sId, closeFu, isEdit, orderId }: Props) {
   // 上传附件的ref
   // 上传附件的ref
   const filesRef = useRef<any>(null)
   const filesRef = useRef<any>(null)
 
 
-  // FormBoxRef.current?.setFieldsValue(res.data.role)
-
-  const getInfoFu = useCallback(async (id: number) => {
-    const res = await API_getGoodsInfo(id)
-
-    if (res.code === 0) {
-      const info = res.data
-
-      // 设置封面图
-      ZupThumbRef.current?.setFileComFileFu({
-        fileName: '',
-        filePath: info.thumbPc,
-        thumb: info.thumb
-      })
-      // 设置附件
-      filesRef.current?.showList(info.file)
-      // inHouseTime registerTime 2个日期需要格式处理一下
-      if (info.inHouseTime) info.inHouseTime = dayjs(info.inHouseTime)
-      if (info.registerTime) info.registerTime = dayjs(info.registerTime)
-
-      FormBoxRef.current?.setFieldsValue(info)
-    }
-  }, [])
+  const getInfoFu = useCallback(
+    async (id: number) => {
+      const res = await API_getGoodsInfo(id)
+
+      if (res.code === 0) {
+        const info = { ...res.data }
+
+        ;['level', 'torn', 'qualityUnit', 'isNote', 'sizeUnit'].forEach(v => {
+          if (!info[v]) info[v] = null
+        })
+
+        // 把旧的数据存起来
+        if (isEdit || isEditresubmit) oldObjRef.current = { ...res.data, file: res.data.file || [] }
+
+        // 设置封面图
+        ZupThumbRef.current?.setFileComFileFu({
+          fileName: '',
+          filePath: info.thumbPc,
+          thumb: info.thumb
+        })
+        // 设置附件
+        filesRef.current?.showList(info.file)
+        // inHouseTime registerTime 2个日期需要格式处理一下
+        if (info.inHouseTime) info.inHouseTime = dayjs(info.inHouseTime)
+        if (info.registerTime) info.registerTime = dayjs(info.registerTime)
+
+        FormBoxRef.current?.setFieldsValue(info)
+      }
+    },
+    [isEdit, isEditresubmit]
+  )
 
 
   useEffect(() => {
   useEffect(() => {
     if (sId > 0) getInfoFu(sId)
     if (sId > 0) getInfoFu(sId)
@@ -100,15 +113,47 @@ function A0addGoods({ sId, closeFu, isEdit, orderId }: Props) {
         if (obj[k] === null || obj[k] === undefined) obj[k] = ''
         if (obj[k] === null || obj[k] === undefined) obj[k] = ''
       }
       }
 
 
-      if (sId > 0) {
-        // 藏品登记页面点击重新提交
-        const res = await B2_APIresubmit(orderId!, obj)
+      // 藏品修改模块,先对比数据有没有改变,把旧数据存起来
+      if (isEdit || isEditresubmit) {
+        let flag = true
+
+        // fileIds 要特别处理
+
+        const fileOld = (oldObjRef.current.file || []).map((v: any) => v.id).join(',')
+
+        if (fileIds !== fileOld) flag = false
+
+        // console.log(fileNew, fileOld)
+
+        for (const k in obj) {
+          if (!['fileIds', 'file'].includes(k)) {
+            if (obj[k] && oldObjRef.current[k as 'num'] !== obj[k]) {
+              flag = false
+            }
+          }
+        }
+
+        if (flag) return MessageFu.warning('未修改藏品信息')
+
+        obj.oldGoods = JSON.stringify(oldObjRef.current)
+      }
+
+      if (isEdit) {
+        // 藏品修改模块新增
+        const res = await B3_APIcreate(obj)
+        if (res.code === 0) {
+          MessageFu.success('藏品修改提交成功')
+          history.push(`/edit_look/1/${res.data.id}`)
+        }
+      } else if (sId > 0) {
+        // 藏品修改/藏品登记页面点击重新提交
+        const res = isEditresubmit
+          ? await B3_APIresubmit(orderId!, obj)
+          : await B2_APIresubmit(orderId!, obj)
         if (res.code === 0) {
         if (res.code === 0) {
           MessageFu.success('重新提交成功')
           MessageFu.success('重新提交成功')
-          history.push(`/register_look/1/${res.data.id}`)
+          history.push(`/${isEditresubmit ? 'edit' : 'register'}_look/1/${res.data.id}`)
         }
         }
-      } else if (isEdit) {
-        // 藏品修改模块
       } else {
       } else {
         // 藏品登记新增
         // 藏品登记新增
         const res = await API_addGoods(obj)
         const res = await API_addGoods(obj)
@@ -118,7 +163,7 @@ function A0addGoods({ sId, closeFu, isEdit, orderId }: Props) {
         }
         }
       }
       }
     },
     },
-    [isEdit, orderId, sId]
+    [isEdit, isEditresubmit, orderId, sId]
   )
   )
 
 
   return (
   return (

+ 3 - 3
后台管理/src/pages/A0goodsInfo/Tab1info/data.ts

@@ -41,18 +41,18 @@ export const pageShowArr2 = [
   { name: '完残程度', key: 'torn' },
   { name: '完残程度', key: 'torn' },
   {
   {
     name: '数量',
     name: '数量',
-    key: 'pcs pcsUnitDictId',
+    key: 'pcs',
     fu: (item: B1listType) => pcsPingFu(dictSelect('数量单位'), item.pcs, item.pcsUnitDictId)
     fu: (item: B1listType) => pcsPingFu(dictSelect('数量单位'), item.pcs, item.pcsUnitDictId)
   },
   },
   {
   {
     name: '重量',
     name: '重量',
-    key: 'quality qualityUnit',
+    key: 'quality',
     fu: (item: B1listType) => pcsPingFu(dictSelect('数量单位'), item.quality, item.qualityUnit)
     fu: (item: B1listType) => pcsPingFu(dictSelect('数量单位'), item.quality, item.qualityUnit)
   },
   },
   { name: '有无说明牌', key: 'isNote' },
   { name: '有无说明牌', key: 'isNote' },
   {
   {
     name: '尺寸',
     name: '尺寸',
-    key: 'sizeL sizeW sizeH sizeUnit',
+    key: 'sizeL',
     full: true,
     full: true,
     fu: (item: B1listType) => sizeChange(item.sizeL, item.sizeW, item.sizeH, item.sizeUnit)
     fu: (item: B1listType) => sizeChange(item.sizeL, item.sizeW, item.sizeH, item.sizeUnit)
   },
   },

+ 38 - 5
后台管理/src/pages/A0goodsInfo/index.tsx

@@ -8,10 +8,12 @@ import { Button, Dropdown, MenuProps } from 'antd'
 import Tab1info from './Tab1info'
 import Tab1info from './Tab1info'
 import Tab2log from './Tab2log'
 import Tab2log from './Tab2log'
 import Tab3stock from './Tab3stock'
 import Tab3stock from './Tab3stock'
+import { MessageFu } from '@/utils/message'
+import A0addGoods from '../A0addGoods'
+import history from '@/utils/history'
+import { B4_APIcreate } from '@/store/action/B4delete'
 const topBtnArr = ['藏品信息', '编辑记录', '库存状态']
 const topBtnArr = ['藏品信息', '编辑记录', '库存状态']
 
 
-// 待完善 按钮的各种状态
-
 function A0goodsInfo() {
 function A0goodsInfo() {
   const { id } = useParams<any>()
   const { id } = useParams<any>()
 
 
@@ -32,16 +34,42 @@ function A0goodsInfo() {
   // tab切换
   // tab切换
   const [btnAc, setBtnAc] = useState('藏品信息')
   const [btnAc, setBtnAc] = useState('藏品信息')
 
 
+  // 点击藏品编辑(修改)
+  const [isEdit, setIsEdit] = useState(false)
+
   const items1 = useMemo(() => {
   const items1 = useMemo(() => {
     let arr: MenuProps['items'] = [
     let arr: MenuProps['items'] = [
       {
       {
         key: '1',
         key: '1',
-        label: <span className='AIdroRow'>修改</span>
+        label: (
+          <span
+            className='AIdroRow'
+            onClick={() => {
+              if (goodsInfo.status === 2) MessageFu.warning('该藏品修改审核中,无法重复修改')
+              else setIsEdit(true)
+            }}
+          >
+            修改
+          </span>
+        )
       },
       },
       {
       {
         key: '2',
         key: '2',
         label: (
         label: (
-          <span className='AIdroRow' style={{ color: '#ff4d4d' }}>
+          <span
+            className='AIdroRow'
+            style={{ color: '#ff4d4d' }}
+            onClick={async () => {
+              if (goodsInfo.status === 3) MessageFu.warning('该藏品删除审核中,无法重复删除')
+              else {
+                // 创建订单
+                const res = await B4_APIcreate(goodsInfo)
+                if (res.code === 0) {
+                  history.push(`/delete_look/1/${res.data.id}`)
+                }
+              }
+            }}
+          >
             删除
             删除
           </span>
           </span>
         )
         )
@@ -49,7 +77,7 @@ function A0goodsInfo() {
     ]
     ]
 
 
     return arr
     return arr
-  }, [])
+  }, [goodsInfo])
 
 
   const items2 = useMemo(() => {
   const items2 = useMemo(() => {
     let arr: MenuProps['items'] = [
     let arr: MenuProps['items'] = [
@@ -103,6 +131,11 @@ function A0goodsInfo() {
         {btnAc === '编辑记录' ? <Tab2log /> : null}
         {btnAc === '编辑记录' ? <Tab2log /> : null}
         {btnAc === '库存状态' ? <Tab3stock /> : null}
         {btnAc === '库存状态' ? <Tab3stock /> : null}
       </div>
       </div>
+
+      {/* 点击藏品修改 */}
+      {isEdit && goodsInfo.id ? (
+        <A0addGoods sId={goodsInfo.id} closeFu={() => setIsEdit(false)} isEdit={true} />
+      ) : null}
     </div>
     </div>
   )
   )
 }
 }

+ 4 - 0
后台管理/src/pages/B1ledger/data.ts

@@ -73,6 +73,10 @@ export type B1listType = {
 
 
   goodIds: string
   goodIds: string
   audits: GoodsAduitsType[]
   audits: GoodsAduitsType[]
+
+  currentAuditUserIds?: string
+
+  oldGoods: string
 }
 }
 
 
 export type GoodsAduitsType = {
 export type GoodsAduitsType = {

+ 1 - 0
后台管理/src/pages/B2register/B2look/index.module.scss

@@ -27,6 +27,7 @@
         position: absolute;
         position: absolute;
         top: 20px;
         top: 20px;
         right: 20px;
         right: 20px;
+        z-index: 10;
       }
       }
       .B2lTopllBtn {
       .B2lTopllBtn {
         pointer-events: none;
         pointer-events: none;

+ 2 - 3
后台管理/src/pages/B2register/index.tsx

@@ -83,7 +83,6 @@ function B2register() {
                 查看
                 查看
               </Button>
               </Button>
 
 
-              {/* 待完善 下面2个按钮权限 */}
               {aduitBtnRoleFu(item) ? (
               {aduitBtnRoleFu(item) ? (
                 <Button
                 <Button
                   size='small'
                   size='small'
@@ -163,7 +162,7 @@ function B2register() {
           <Select
           <Select
             allowClear
             allowClear
             style={{ width: 200 }}
             style={{ width: 200 }}
-            placeholder='类型'
+            placeholder='申请状态'
             options={statusSelect}
             options={statusSelect}
             value={formData.status}
             value={formData.status}
             onChange={e => setFormData({ ...formData, status: e })}
             onChange={e => setFormData({ ...formData, status: e })}
@@ -172,7 +171,7 @@ function B2register() {
         </div>
         </div>
         <div className='B2toprr'>
         <div className='B2toprr'>
           <Button onClick={resetSelectFu}>重置</Button>&emsp;
           <Button onClick={resetSelectFu}>重置</Button>&emsp;
-          <Button type='primary' onClick={() => B2devFu(formData)}>
+          <Button type='primary' onClick={() => B2devFu(formData, '藏品登记')}>
             数据导出
             数据导出
           </Button>
           </Button>
         </div>
         </div>

+ 84 - 0
后台管理/src/pages/B3edit/B3look/index.module.scss

@@ -0,0 +1,84 @@
+.B3look {
+  background-color: #fff;
+  border-radius: 10px;
+  font-size: 16px;
+  overflow: auto;
+  padding: 20px;
+  :global {
+    .B3lTit {
+      font-weight: 700;
+      font-size: 18px;
+      color: var(--themeColor);
+      margin-right: 20px;
+    }
+    .B3lTop {
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      border-bottom: 1px solid #ccc;
+      padding-bottom: 15px;
+
+      .B3lTopll {
+        display: flex;
+        align-items: center;
+      }
+      .B3lToprr {
+        position: absolute;
+        top: 20px;
+        right: 20px;
+        z-index: 10;
+      }
+      .B3lTopllBtn {
+        pointer-events: none;
+      }
+    }
+    .B3lTxt {
+      display: flex;
+      flex-wrap: wrap;
+      display: flex;
+      justify-content: space-between;
+      border-bottom: 1px solid #ccc;
+      padding: 15px 0 0;
+      margin-bottom: 15px;
+      .B3lTrow {
+        width: 33%;
+        display: flex;
+        margin-bottom: 15px;
+        .B3lTrow1 {
+          width: 100px;
+          font-weight: 700;
+          text-align: right;
+          & > span {
+            color: #ff4d4f;
+          }
+        }
+        .B3lTrow2 {
+          width: calc(100% - 100px);
+        }
+      }
+      .B3lTrowAll {
+        width: 80%;
+        .B3lTrow1 {
+          position: relative;
+          top: 4px;
+        }
+        .B3lTrow2 {
+          .ant-btn {
+            margin-right: 15px;
+          }
+        }
+      }
+    }
+
+    .B3tableTit {
+      color: var(--themeColor);
+    }
+
+    .ant-table-wrapper {
+      margin-top: 15px;
+      .ant-table-cell {
+        padding: 8px !important;
+      }
+    }
+  }
+}

+ 301 - 0
后台管理/src/pages/B3edit/B3look/index.tsx

@@ -0,0 +1,301 @@
+import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
+import styles from './index.module.scss'
+import { useParams } from 'react-router-dom'
+import { B1listType } from '@/pages/B1ledger/data'
+import { B3_APIaduit, B3_APIgetInfo } from '@/store/action/B3edit'
+import { API_getFileListByIds } from '@/store/action/B1ledger'
+import { MessageFu } from '@/utils/message'
+import history, { backPageFu } from '@/utils/history'
+import { Button } from 'antd'
+import { statusSelect } from '@/utils/select'
+import TextArea from 'antd/es/input/TextArea'
+import MyTable from '@/components/MyTable'
+import { auditTableC } from '@/utils/tableData'
+import { pageShowArr1, pageShowArr2 } from '@/pages/A0goodsInfo/Tab1info/data'
+import ImageLazy from '@/components/ImageLazy'
+import { baseURL } from '@/utils/http'
+function B3look() {
+  const { key, id } = useParams<any>()
+
+  // 订单相关信息
+  const [topInfo, setTopInfo] = useState({} as B1listType)
+
+  // 藏品相关信息
+  const [oldInfo, setOldInfo] = useState({} as B1listType)
+  const [newInfo, setNweInfo] = useState({} as B1listType)
+
+  const getInfoFu = useCallback(async (id: number) => {
+    const res = await B3_APIgetInfo(id)
+    if (res.code === 0) {
+      setTopInfo(res.data)
+
+      // 获取藏品修改前的数据
+
+      // 拿到快照新数据
+      const goodsArr = res.data.snaps
+
+      if (goodsArr && goodsArr[0] && goodsArr[0].snap) {
+        const objStr = goodsArr[0].snap
+        try {
+          const obj: B1listType = JSON.parse(objStr)
+
+          if (obj.oldGoods) {
+            const oldTemp = JSON.parse(obj.oldGoods)
+
+            setOldInfo(oldTemp)
+          }
+
+          if (obj.fileIds) {
+            const fileArr = obj.fileIds.split(',').map(v => Number(v))
+
+            const res2 = await API_getFileListByIds(fileArr)
+
+            if (res2.code === 0) {
+              obj.file = res2.data
+
+              setNweInfo(obj)
+            }
+          } else setNweInfo(obj)
+        } catch (error) {
+          MessageFu.warning('JSON数据错误')
+        }
+      }
+    }
+  }, [])
+
+  useEffect(() => {
+    if (id) getInfoFu(id)
+  }, [getInfoFu, id, key])
+
+  const [tableList, setTableList] = useState<any[]>([])
+
+  // 新旧数据对比
+  useEffect(() => {
+    if (oldInfo.id && newInfo.id) {
+      let arr: any[] = []
+      ;[...pageShowArr1, ...pageShowArr2].forEach(c => {
+        for (const k in oldInfo) {
+          if (k === c.key) {
+            const oldValObj = oldInfo[k as 'num']
+            const newValObj = newInfo[k as 'num']
+
+            const oldVal = c.fu ? c.fu(oldInfo) : oldValObj
+            const newVal = c.fu ? c.fu(newInfo) : newValObj
+
+            if (oldVal !== newVal) {
+              arr.push({ id: c.name, oldVal, newVal })
+            }
+          }
+        }
+      })
+
+      // 封面图处理
+      if (oldInfo.thumb !== newInfo.thumb) {
+        arr.push({
+          id: '封面图',
+          oldVal: (
+            <div className='tableImgAuto'>
+              <ImageLazy
+                width={60}
+                height={60}
+                srcBig={oldInfo.thumbPc || oldInfo.thumb}
+                src={oldInfo.thumb}
+              />
+            </div>
+          ),
+          newVal: (
+            <div className='tableImgAuto'>
+              <ImageLazy
+                width={60}
+                height={60}
+                srcBig={newInfo.thumbPc || newInfo.thumb}
+                src={newInfo.thumb}
+              />
+            </div>
+          )
+        })
+      }
+
+      const oldFileArr = (oldInfo.file || []).map(v => v.id).join(',')
+      const newFileArr = (newInfo.file || []).map(v => v.id).join(',')
+
+      // 附件处理
+      if (oldFileArr !== newFileArr) {
+        arr.push({
+          id: '附件信息',
+          oldVal: (oldInfo.file || []).length
+            ? oldInfo.file.map((v: any, i: number) => (
+                <a key={v.id} href={baseURL + v.filePath} download target='_blank' rel='noreferrer'>
+                  {v.fileName}
+                  {i < oldInfo.file!.length - 1 ? ',' : ''}
+                </a>
+              ))
+            : '-',
+          newVal: (newInfo.file || []).length
+            ? newInfo.file.map((v: any, i: number) => (
+                <a key={v.id} href={baseURL + v.filePath} download target='_blank' rel='noreferrer'>
+                  {v.fileName}
+                  {i < newInfo.file!.length - 1 ? ',' : ''}
+                </a>
+              ))
+            : '-'
+        })
+      }
+
+      setTableList(arr)
+
+      // console.log(oldInfo, newInfo)
+    }
+  }, [newInfo, oldInfo])
+
+  // 审批的sta
+  const [auditSta, setAuDitSta] = useState('')
+  const [rtfOpinion, setRtfOpinion] = useState('')
+
+  const boxRef = useRef<HTMLDivElement>(null)
+
+  // 点击提交
+  const btnOk = useCallback(async () => {
+    if (!auditSta) {
+      MessageFu.warning('请选择审批结果')
+      boxRef.current?.scrollTo({ top: 0, behavior: 'smooth' })
+      return
+    }
+
+    const res = await B3_APIaduit({
+      orderId: id,
+      rtfOpinion,
+      status: auditSta === '同意' ? 1 : 2
+    })
+
+    if (res.code === 0) {
+      MessageFu.success('审批成功')
+      history.replace(`/edit_look/1/${id}`)
+    }
+  }, [auditSta, id, rtfOpinion])
+
+  const tableLastBtn = useMemo(() => {
+    return [
+      {
+        title: '编辑项',
+        render: (item: any) =>
+          ['封面图', '附件信息'].includes(item.id) ? (
+            <span className='B3tableTit'>{item.id}</span>
+          ) : (
+            item.id
+          )
+      },
+      {
+        title: '编辑前',
+        render: (item: any) => item.oldVal || '(空)'
+      },
+      {
+        title: '编辑后',
+        render: (item: any) => item.newVal || '(空)'
+      }
+    ]
+  }, [])
+
+  return (
+    <div className={styles.B3look} ref={boxRef}>
+      <div className='pageTitle'>藏品修改 - {key === '1' ? '查看' : '审批'}</div>
+
+      {oldInfo.id && newInfo.id && topInfo.id ? (
+        <>
+          <div className='B3lTop'>
+            <div className='B3lTopll'>
+              <div className='B3lTit'>申请信息</div>
+              <div className='B3lTopllBtn'>
+                <Button type='dashed'>
+                  {statusSelect.find(v => v.value === topInfo.status)?.label}
+                </Button>
+              </div>
+            </div>
+            <div className='B3lToprr'>
+              {key === '2' ? (
+                <>
+                  <Button type='primary' onClick={btnOk}>
+                    提交
+                  </Button>
+                  &emsp;
+                </>
+              ) : null}
+              <Button onClick={() => backPageFu('/edit')}>返回</Button>
+            </div>
+          </div>
+
+          <div className='B3lTxt'>
+            <div className='B3lTrow'>
+              <div className='B3lTrow1'>订单编号:</div>
+              <div className='B3lTrow2'>{topInfo.num}</div>
+            </div>
+            <div className='B3lTrow'>
+              <div className='B3lTrow1'>订单名称:</div>
+              <div className='B3lTrow2'>藏品修改</div>
+            </div>
+            <div className='B3lTrow'>
+              <div className='B3lTrow1'>发起人:</div>
+              <div className='B3lTrow2'>{topInfo.creatorName + ' - ' + topInfo.createTime}</div>
+            </div>
+
+            {/* 审批相关 */}
+            {key === '2' ? (
+              <>
+                <div className='B3lTrow B3lTrowAll'>
+                  <div className='B3lTrow1'>
+                    <span>* </span>审批结果:
+                  </div>
+                  <div className='B3lTrow2'>
+                    {['同意', '不同意'].map(v => (
+                      <Button
+                        key={v}
+                        onClick={() => setAuDitSta(v)}
+                        type={auditSta === v ? 'primary' : 'default'}
+                      >
+                        {v}
+                      </Button>
+                    ))}
+                  </div>
+                </div>
+                <div className='B3lTrow B3lTrowAll' style={{ marginBottom: 25 }}>
+                  <div className='B3lTrow1'>审批意见:</div>
+                  <div className='B3lTrow2'>
+                    <TextArea
+                      value={rtfOpinion}
+                      onChange={e => setRtfOpinion(e.target.value)}
+                      placeholder='请输入内容'
+                      maxLength={200}
+                      showCount
+                    />
+                  </div>
+                </div>
+              </>
+            ) : null}
+          </div>
+
+          <div className='B3lTit'>修改详情</div>
+
+          <MyTable
+            list={tableList}
+            columnsTemp={[]}
+            lastBtn={tableLastBtn}
+            pagingInfo={false}
+            widthSet={{ rtfOpinion: 600 }}
+          />
+          <br />
+          <div className='B3lTit'>申请流程</div>
+          <MyTable
+            list={topInfo.audits || []}
+            columnsTemp={auditTableC}
+            pagingInfo={false}
+            widthSet={{ rtfOpinion: 600 }}
+          />
+        </>
+      ) : null}
+    </div>
+  )
+}
+
+const MemoB3look = React.memo(B3look)
+
+export default MemoB3look

+ 14 - 0
后台管理/src/pages/B3edit/index.module.scss

@@ -1,4 +1,18 @@
 .B3edit {
 .B3edit {
+  background-color: #fff;
+  border-radius: 10px;
+  padding: 20px;
   :global {
   :global {
+    .B3top {
+      display: flex;
+      justify-content: space-between;
+      margin-bottom: 15px;
+      .B3topll {
+        display: flex;
+      }
+    }
+    .ant-table-cell {
+      padding: 8px !important;
+    }
   }
   }
 }
 }

+ 193 - 3
后台管理/src/pages/B3edit/index.tsx

@@ -1,11 +1,201 @@
-import React from 'react'
+import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
 import styles from './index.module.scss'
 import styles from './index.module.scss'
-import history from '@/utils/history'
+import history, { aduitBtnRoleFu, resubmitBtnRoleFu } from '@/utils/history'
+import { Button, DatePicker, Input, Select } from 'antd'
+import { useDispatch, useSelector } from 'react-redux'
+import { B2fromDataBase } from '../B2register/data'
+import { RootState } from '@/store'
+import { B3_APIgetlist } from '@/store/action/B3edit'
+import { B1listType } from '../B1ledger/data'
+import { statusSelect } from '@/utils/select'
+import MyTable from '@/components/MyTable'
+import { B2tableC } from '@/utils/tableData'
+import { B2devFu } from '@/utils/deriveFu'
+import A0addGoods from '../A0addGoods'
+const { RangePicker } = DatePicker
+
 function B3edit() {
 function B3edit() {
+  const dispatch = useDispatch()
+  const [formData, setFormData] = useState({ ...B2fromDataBase, type: 'XG' })
+
+  const getListFu = useCallback(() => {
+    dispatch(B3_APIgetlist(formData))
+  }, [dispatch, formData])
+
+  useEffect(() => {
+    getListFu()
+  }, [getListFu])
+
+  // 输入框改变
+  const timeRef = useRef(-1)
+  const txtChangeFu = useCallback(
+    (e: React.ChangeEvent<HTMLInputElement>, key: 'num' | 'snapNum' | 'snapName') => {
+      clearTimeout(timeRef.current)
+      timeRef.current = window.setTimeout(() => {
+        setFormData({
+          ...formData,
+          [key]: e.target.value,
+          pageNum: 1
+        })
+      }, 500)
+    },
+    [formData]
+  )
+
+  // 时间选择器改变
+  const timeChange = 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, pageNum: 1 })
+    },
+    [formData]
+  )
+
+  // 点击重置
+  const [inputKey, setInputKey] = useState(1)
+  const resetSelectFu = useCallback(() => {
+    // 把2个输入框和时间选择器清空
+    setInputKey(Date.now())
+    setFormData({ ...B2fromDataBase, type: 'DJ' })
+  }, [])
+
+  // 从仓库拿数据
+  const tableInfo = useSelector((state: RootState) => state.B3edit.tableInfo)
+
+  const tableLastBtn = useMemo(() => {
+    return [
+      {
+        title: '操作',
+        render: (item: B1listType) => {
+          return (
+            <>
+              <Button
+                size='small'
+                type='text'
+                onClick={() => history.push(`/edit_look/1/${item.id}`)}
+              >
+                查看
+              </Button>
+
+              {aduitBtnRoleFu(item) ? (
+                <Button
+                  size='small'
+                  type='text'
+                  onClick={() => history.push(`/edit_look/2/${item.id}`)}
+                >
+                  审批
+                </Button>
+              ) : null}
+
+              {resubmitBtnRoleFu(item) ? (
+                <Button
+                  size='small'
+                  type='text'
+                  onClick={() => setEditId({ orderId: item.id, goodsId: Number(item.goodIds) })}
+                >
+                  重新提交
+                </Button>
+              ) : null}
+            </>
+          )
+        }
+      }
+    ]
+  }, [])
+
+  // 页码变化
+  const paginationChange = useCallback(
+    (pageNum: number, pageSize: number) => {
+      setFormData({ ...formData, pageNum, pageSize })
+    },
+    [formData]
+  )
+
+  // 点击重新提交
+  const [editId, setEditId] = useState({ orderId: 0, goodsId: 0 })
+
   return (
   return (
     <div className={styles.B3edit}>
     <div className={styles.B3edit}>
       <div className='pageTitle'>藏品修改</div>
       <div className='pageTitle'>藏品修改</div>
-      <div onClick={() => history.push('/register_look/1/4')}>1231</div>
+      <div className='B3top'>
+        <div className='B3topll' key={inputKey}>
+          <Input
+            placeholder='申请编号'
+            maxLength={30}
+            showCount
+            allowClear
+            onChange={e => txtChangeFu(e, 'num')}
+            style={{ width: 200 }}
+          />
+          &emsp;
+          <Input
+            placeholder='藏品编号'
+            maxLength={30}
+            showCount
+            allowClear
+            onChange={e => txtChangeFu(e, 'snapNum')}
+            style={{ width: 200 }}
+          />
+          &emsp;
+          <Input
+            placeholder='藏品名称'
+            maxLength={30}
+            showCount
+            allowClear
+            onChange={e => txtChangeFu(e, 'snapName')}
+            style={{ width: 200 }}
+          />
+          &emsp;
+          <RangePicker
+            placeholder={['发起日期起', '发起日期终']}
+            style={{ width: 240 }}
+            onChange={timeChange}
+          />
+          &emsp;
+          <Select
+            allowClear
+            style={{ width: 200 }}
+            placeholder='申请状态'
+            options={statusSelect}
+            value={formData.status}
+            onChange={e => setFormData({ ...formData, status: e })}
+          />
+          &emsp;
+        </div>
+        <div className='B3toprr'>
+          <Button onClick={resetSelectFu}>重置</Button>&emsp;
+          <Button type='primary' onClick={() => B2devFu(formData, '藏品修改')}>
+            数据导出
+          </Button>
+        </div>
+      </div>
+
+      {/* 表格 */}
+      <MyTable
+        yHeight={655}
+        list={tableInfo.list}
+        columnsTemp={B2tableC}
+        lastBtn={tableLastBtn}
+        pageNum={formData.pageNum}
+        pageSize={formData.pageSize}
+        total={tableInfo.total}
+        onChange={(pageNum, pageSize) => paginationChange(pageNum, pageSize)}
+      />
+
+      {/* 点击重新提交*/}
+      {editId.goodsId ? (
+        <A0addGoods
+          sId={editId.goodsId}
+          orderId={editId.orderId}
+          closeFu={() => setEditId({ orderId: 0, goodsId: 0 })}
+          isEditresubmit={true}
+        />
+      ) : null}
     </div>
     </div>
   )
   )
 }
 }

+ 6 - 1
后台管理/src/pages/Layout/data.ts

@@ -134,11 +134,16 @@ export default tabLeftArr
 
 
 // 里面的页面,不是左边的tab栏
 // 里面的页面,不是左边的tab栏
 export const routerSon: RouterTypeRow = [
 export const routerSon: RouterTypeRow = [
-  // 藏品登记-查看
   {
   {
     id: 1,
     id: 1,
     name: '藏品登记-查看',
     name: '藏品登记-查看',
     path: '/register_look/:key/:id',
     path: '/register_look/:key/:id',
     Com: React.lazy(() => import('../B2register/B2look'))
     Com: React.lazy(() => import('../B2register/B2look'))
+  },
+  {
+    id: 1,
+    name: '藏品修改-查看',
+    path: '/edit_look/:key/:id',
+    Com: React.lazy(() => import('../B3edit/B3look'))
   }
   }
 ]
 ]

+ 5 - 1
后台管理/src/pages/Layout/index.tsx

@@ -193,7 +193,11 @@ function Layout() {
         {/* 左边主体 */}
         {/* 左边主体 */}
         <div className='layoutLeftMain'>
         <div className='layoutLeftMain'>
           {list.map(v => (
           {list.map(v => (
-            <div className={classNames('layoutLRowBox')} key={v.id} hidden={!v.son.length}>
+            <div
+              className={classNames('layoutLRowBox')}
+              key={v.id}
+              hidden={!v.son.length || (v.son.length === 1 && v.son[0].name === '藏品详情')}
+            >
               <div className='layoutLRowBoxTxt'>{v.name}</div>
               <div className='layoutLRowBoxTxt'>{v.name}</div>
               {v.son.map(v2 => (
               {v.son.map(v2 => (
                 <div
                 <div

+ 49 - 0
后台管理/src/store/action/B3edit.ts

@@ -0,0 +1,49 @@
+import http from '@/utils/http'
+import { AppDispatch } from '..'
+/**
+ * 藏品修改-获取列表
+ */
+export const B3_APIgetlist = (data: any, exportFlag?: boolean): any => {
+  if (exportFlag) return http.post('cms/order/edit/page', data)
+  else {
+    return async (dispatch: AppDispatch) => {
+      const res = await http.post('cms/order/edit/page', data)
+      if (res.code === 0) {
+        const obj = {
+          list: res.data.records,
+          total: res.data.total
+        }
+
+        dispatch({ type: 'B3/getList', payload: obj })
+      }
+    }
+  }
+}
+
+/**
+ * 藏品修改-创建订单
+ */
+export const B3_APIcreate = (data: any) => {
+  return http.post('cms/order/edit/create', data)
+}
+
+/**
+ * 藏品修改-重新提交
+ */
+export const B3_APIresubmit = (orderId: number, data: any) => {
+  return http.post(`cms/order/edit/edit/${orderId}`, data)
+}
+
+/**
+ * 藏品修改-获取详情
+ */
+export const B3_APIgetInfo = (id: number) => {
+  return http.get(`cms/order/edit/detail/${id}`)
+}
+
+/**
+ * 藏品修改-审批
+ */
+export const B3_APIaduit = (data: any) => {
+  return http.post('cms/order/edit/audit', data)
+}

+ 49 - 0
后台管理/src/store/action/B4delete.ts

@@ -0,0 +1,49 @@
+import http from '@/utils/http'
+import { AppDispatch } from '..'
+/**
+ * 藏品删除-获取列表
+ */
+export const B4_APIgetlist = (data: any, exportFlag?: boolean): any => {
+  if (exportFlag) return http.post('cms/order/del/page', data)
+  else {
+    return async (dispatch: AppDispatch) => {
+      const res = await http.post('cms/order/del/page', data)
+      if (res.code === 0) {
+        const obj = {
+          list: res.data.records,
+          total: res.data.total
+        }
+
+        dispatch({ type: 'B4/getList', payload: obj })
+      }
+    }
+  }
+}
+
+/**
+ * 藏品删除-创建订单
+ */
+export const B4_APIcreate = (data: any) => {
+  return http.post('cms/order/del/create', data)
+}
+
+/**
+ * 藏品删除-重新提交
+ */
+export const B4_APIresubmit = (orderId: number, data: any) => {
+  return http.post(`cms/order/del/edit/${orderId}`, data)
+}
+
+/**
+ * 藏品删除-获取详情
+ */
+export const B4_APIgetInfo = (id: number) => {
+  return http.get(`cms/order/del/detail/${id}`)
+}
+
+/**
+ * 藏品删除-审批
+ */
+export const B4_APIaduit = (data: any) => {
+  return http.post('cms/order/del/audit', data)
+}

+ 28 - 0
后台管理/src/store/reducer/B3edit.ts

@@ -0,0 +1,28 @@
+import { B1listType } from '@/pages/B1ledger/data'
+
+// 初始化状态
+const initState = {
+  // 列表数据
+  tableInfo: {
+    list: [] as B1listType[],
+    total: 0
+  }
+}
+
+// 定义 action 类型
+type Props = {
+  type: 'B3/getList'
+  payload: { list: B1listType[]; total: number }
+}
+
+// reducer
+export default function userReducer(state = initState, action: Props) {
+  switch (action.type) {
+    // 获取列表数据
+    case 'B3/getList':
+      return { ...state, tableInfo: action.payload }
+
+    default:
+      return state
+  }
+}

+ 28 - 0
后台管理/src/store/reducer/B4delete.ts

@@ -0,0 +1,28 @@
+import { B1listType } from '@/pages/B1ledger/data'
+
+// 初始化状态
+const initState = {
+  // 列表数据
+  tableInfo: {
+    list: [] as B1listType[],
+    total: 0
+  }
+}
+
+// 定义 action 类型
+type Props = {
+  type: 'B4/getList'
+  payload: { list: B1listType[]; total: number }
+}
+
+// reducer
+export default function userReducer(state = initState, action: Props) {
+  switch (action.type) {
+    // 获取列表数据
+    case 'B4/getList':
+      return { ...state, tableInfo: action.payload }
+
+    default:
+      return state
+  }
+}

+ 4 - 0
后台管理/src/store/reducer/index.ts

@@ -5,6 +5,8 @@ import { combineReducers } from 'redux'
 import A0Layout from './layout'
 import A0Layout from './layout'
 import B1ledger from './B1ledger'
 import B1ledger from './B1ledger'
 import B2register from './B2register'
 import B2register from './B2register'
+import B3edit from './B3edit'
+import B4delete from './B4delete'
 
 
 import D1dict from './D1dict'
 import D1dict from './D1dict'
 import D2approval from './D2approval'
 import D2approval from './D2approval'
@@ -17,6 +19,8 @@ const rootReducer = combineReducers({
   A0Layout,
   A0Layout,
   B1ledger,
   B1ledger,
   B2register,
   B2register,
+  B3edit,
+  B4delete,
   D1dict,
   D1dict,
   D2approval,
   D2approval,
   D3role,
   D3role,

+ 13 - 3
后台管理/src/utils/deriveFu.ts

@@ -5,6 +5,8 @@ import { MessageFu } from './message'
 import dayjs from 'dayjs'
 import dayjs from 'dayjs'
 import { dictSelect, statusSelect } from './select'
 import { dictSelect, statusSelect } from './select'
 import { B2_APIgetlist } from '@/store/action/B2register'
 import { B2_APIgetlist } from '@/store/action/B2register'
+import { B3_APIgetlist } from '@/store/action/B3edit'
+import { B4_APIgetlist } from '@/store/action/B4delete'
 
 
 // 入口
 // 入口
 const devDownFu = (
 const devDownFu = (
@@ -141,8 +143,16 @@ export const B1devFu = async (formData: any) => {
 }
 }
 
 
 // ------------------藏品登记
 // ------------------藏品登记
-export const B2devFu = async (formData: any) => {
-  const res = await B2_APIgetlist({ ...formData, pageNum: 1, pageSize: 99999 }, true)
+export const B2devFu = async (formData: any, txtKey: '藏品登记' | '藏品修改' | '藏品删除') => {
+  const obj = { ...formData, pageNum: 1, pageSize: 99999 }
+
+  const res =
+    txtKey === '藏品登记'
+      ? await B2_APIgetlist(obj, true)
+      : txtKey === '藏品修改'
+      ? await B3_APIgetlist(obj, true)
+      : await B4_APIgetlist(obj, true)
+
   if (res.code === 0) {
   if (res.code === 0) {
     let data: any[] = res.data.records || []
     let data: any[] = res.data.records || []
 
 
@@ -160,6 +170,6 @@ export const B2devFu = async (formData: any) => {
       })
       })
     })
     })
 
 
-    devDownFu(data, '藏品登记', arr1, arr2)
+    devDownFu(data, txtKey, arr1, arr2)
   }
   }
 }
 }

+ 7 - 2
后台管理/src/utils/history.ts

@@ -35,8 +35,13 @@ export const aduitBtnRoleFu = (item: B1listType) => {
   let flag = false
   let flag = false
 
 
   if (item.status === 1 && userInfo) {
   if (item.status === 1 && userInfo) {
-    // 待完善
-    flag = true
+    if (item.currentAuditUserIds) {
+      const idsArr = item.currentAuditUserIds.split(',').map(v => Number(v))
+
+      if (idsArr.includes(userInfo.id)) {
+        flag = true
+      }
+    }
   }
   }
 
 
   return flag
   return flag