shaogen1995 hace 5 meses
padre
commit
51314f696b
Se han modificado 26 ficheros con 1572 adiciones y 87 borrados
  1. 3 2
      src/components/MyPopconfirm.tsx
  2. 24 0
      src/components/YtableLookText/index.module.scss
  3. 53 0
      src/components/YtableLookText/index.tsx
  4. 41 0
      src/components/YtableVideo/index.module.scss
  5. 35 0
      src/components/YtableVideo/index.tsx
  6. 1 1
      src/components/ZRichTexts/index.tsx
  7. 18 0
      src/pages/B_enterTibet/B3_4page/B3add/B3aTop/index.module.scss
  8. 75 7
      src/pages/B_enterTibet/B3_4page/B3add/B3aTop/index.tsx
  9. 70 8
      src/pages/B_enterTibet/B3_4page/B3edit/main.tsx
  10. 3 17
      src/pages/B_enterTibet/B3_4page/index.tsx
  11. 14 0
      src/pages/B_enterTibet/B3flowTable/index.module.scss
  12. 51 0
      src/pages/B_enterTibet/B3flowTable/index.tsx
  13. 6 0
      src/pages/B_enterTibet/B3goodsTable/B3GaddNew/data.ts
  14. 211 0
      src/pages/B_enterTibet/B3goodsTable/B3GaddNew/index.module.scss
  15. 645 0
      src/pages/B_enterTibet/B3goodsTable/B3GaddNew/index.tsx
  16. 59 0
      src/pages/B_enterTibet/B3goodsTable/B3GaddNow/index.module.scss
  17. 160 0
      src/pages/B_enterTibet/B3goodsTable/B3GaddNow/index.tsx
  18. 1 0
      src/pages/B_enterTibet/B3goodsTable/index.module.scss
  19. 49 9
      src/pages/B_enterTibet/B3goodsTable/index.tsx
  20. 8 2
      src/pages/Y_goodsDetails/Y1cathet/Y11com.tsx
  21. 3 21
      src/pages/Y_goodsDetails/Y1cathet/Y33com.tsx
  22. 9 0
      src/pages/Y_goodsDetails/Y1cathet/index.module.scss
  23. 3 11
      src/pages/Y_goodsDetails/Y2look/Y33setType.tsx
  24. 0 1
      src/pages/Y_goodsDetails/Y2look/data.ts
  25. 9 0
      src/pages/Y_goodsDetails/Y2look/index.module.scss
  26. 21 8
      src/utils/tableData.ts

+ 3 - 2
src/components/MyPopconfirm.tsx

@@ -2,7 +2,7 @@ import React, { useMemo } from 'react'
 import { Button, Popconfirm } from 'antd'
 
 type Props = {
-  txtK: '删除' | '取消' | '重置密码' | '退出登录' | '清空'
+  txtK: '删除' | '取消' | '重置密码' | '退出登录' | '清空' | '撤回'
   onConfirm: () => void
   Dom?: React.ReactNode
   loc?: 'bottom'
@@ -15,7 +15,8 @@ function MyPopconfirm({ txtK, onConfirm, Dom, loc }: Props) {
       取消: ['放弃编辑后,信息将不会保存!', '放弃'],
       重置密码: ['密码重制后为Aa147852,是否重置?', '重置'],
       退出登录: ['确定退出吗?', '确定'],
-      清空: ['确定清空吗?', '确定']
+      清空: ['确定清空吗?', '确定'],
+      撤回: ['确定撤回吗?', '确定']
     }
     return Reflect.get(obj, txtK) || ['', '']
   }, [txtK])

+ 24 - 0
src/components/YtableLookText/index.module.scss

@@ -0,0 +1,24 @@
+.YtableLookText {
+  :global {
+    .ant-modal-close {
+      display: none;
+    }
+
+    .ant-modal {
+      width: 800px !important;
+    }
+
+    .YtMain {
+      border-top: 1px solid #999999;
+      padding-top: 15px;
+      width: 100%;
+      max-height: 580px;
+      min-height: 200px;
+      overflow-y: auto;
+    }
+    .YtBtn {
+      margin-top: 20px;
+      text-align: center;
+    }
+  }
+}

+ 53 - 0
src/components/YtableLookText/index.tsx

@@ -0,0 +1,53 @@
+import React from 'react'
+import styles from './index.module.scss'
+import { Button, Modal } from 'antd'
+
+type Props = {
+  closeFu: () => void
+}
+
+function YtableLookText({ closeFu }: Props) {
+  return (
+    <Modal
+      wrapClassName={styles.YtableLookText}
+      destroyOnClose
+      open={true}
+      title='详情'
+      footer={
+        [] // 设置footer为空,去掉 取消 确定默认按钮
+      }
+    >
+      <div className='YtMain'>
+        <h1>asdasd</h1>
+        <h1>asdasd</h1>
+        <h1>asdasd</h1>
+        <h1>asdasd</h1>
+        <h1>asdasd</h1>
+        <h1>asdasd</h1>
+        <h1>asdasd</h1>
+        <h1>asdasd</h1>
+        <h1>asdasd</h1>
+        <h1>asdasd</h1>
+        <h1>asdasd</h1>
+        <h1>asdasd</h1>
+        <h1>asdasd</h1>
+        <h1>asdasd</h1>
+        <h1>asdasd</h1>
+        <h1>asdasd</h1>
+        <h1>asdasd</h1>
+        <h1>asdasd</h1>
+        <h1>asdasd</h1>
+        <h1>asdasd</h1>
+        <h1>asdasd</h1>
+      </div>
+
+      <div className='YtBtn'>
+        <Button onClick={closeFu}>关闭</Button>
+      </div>
+    </Modal>
+  )
+}
+
+const MemoYtableLookText = React.memo(YtableLookText)
+
+export default MemoYtableLookText

+ 41 - 0
src/components/YtableVideo/index.module.scss

@@ -0,0 +1,41 @@
+.YtableVideo {
+  display: flex;
+  justify-content: center;
+  :global {
+    .TvideoBox {
+      cursor: pointer;
+      width: 60px;
+      height: 60px;
+      position: relative;
+      .TvideoBoxLook {
+        position: absolute;
+        z-index: 10;
+        opacity: 0;
+        transition: opacity 0.3s;
+        top: 0;
+        left: 0;
+        width: 100%;
+        height: 100%;
+        display: flex;
+        justify-content: center;
+        align-items: center;
+        font-size: 14px;
+        color: #fff;
+        background-color: rgba(0, 0, 0, 0.6);
+        .anticon-eye {
+          font-size: 18px;
+        }
+      }
+      video {
+        width: 100%;
+        height: 100%;
+        object-fit: cover;
+      }
+      &:hover {
+        .TvideoBoxLook {
+          opacity: 1;
+        }
+      }
+    }
+  }
+}

+ 35 - 0
src/components/YtableVideo/index.tsx

@@ -0,0 +1,35 @@
+import React from 'react'
+import styles from './index.module.scss'
+import store from '@/store'
+import { EyeOutlined } from '@ant-design/icons'
+
+type Props = {
+  item: any
+}
+
+function YtableVideo({ item }: Props) {
+  return (
+    <div className={styles.YtableVideo}>
+      <div className='TvideoBox'>
+        <div
+          className='TvideoBoxLook'
+          onClick={() =>
+            store.dispatch({
+              type: 'layout/lookDom',
+              payload: { src: item.src, type: 'video', flag: true }
+            })
+          }
+        >
+          <EyeOutlined />
+          &nbsp;
+          <div>预览</div>
+        </div>
+        <video src={item.src}></video>
+      </div>
+    </div>
+  )
+}
+
+const MemoYtableVideo = React.memo(YtableVideo)
+
+export default MemoYtableVideo

+ 1 - 1
src/components/ZRichTexts/index.tsx

@@ -382,7 +382,7 @@ function ZRichTexts(
             {/* 主体 */}
             <BraftEditor
               readOnly={isLook}
-              placeholder='请输入内容'
+              placeholder={isLook ? '(空)' : '请输入内容'}
               value={item.txt}
               onChange={e => {
                 const arr = [...sectionArr]

+ 18 - 0
src/pages/B_enterTibet/B3_4page/B3add/B3aTop/index.module.scss

@@ -3,6 +3,23 @@
   height: calc(100% - 70px);
   overflow-y: auto;
   :global {
+    // 审批和查看才有的
+    .B3aAudit {
+      .B3aRow0 {
+        margin-top: 24px;
+        .ant-btn {
+          margin-right: 30px;
+        }
+        .B3aTit {
+          // border-bottom: none;
+          margin: 0;
+        }
+        .B3aFull {
+          margin-top: 15px !important;
+        }
+      }
+    }
+
     .B3aTit {
       font-size: 18px;
       font-weight: 700;
@@ -10,6 +27,7 @@
       padding-left: 18px;
       border-bottom: 1px solid #ccc;
       margin-bottom: 17px;
+      color: var(--themeColor);
       .ant-btn {
         margin-left: 15px;
         pointer-events: none;

+ 75 - 7
src/pages/B_enterTibet/B3_4page/B3add/B3aTop/index.tsx

@@ -1,4 +1,4 @@
-import { useCallback, useRef } from 'react'
+import { useCallback, useRef, useState } from 'react'
 import styles from './index.module.scss'
 import { Button, DatePicker, Input } from 'antd'
 import dayjs from 'dayjs'
@@ -27,9 +27,11 @@ function B3aTop({ info, pageSta, Dom }: Props, ref: any) {
   // 富文本的ref
   const ZRichTextRef = useRef<any>(null)
 
+  // 审批意见的ref
+  const ZRiAuditRef = useRef<any>(null)
+
   // 设置富文本
   //  ZRichTextRef.current?.ritxtShowFu(JSON.parse(data.rtf))
-  // 富文本校验不通过
   // const rtf = ZRichTextRef.current?.fatherBtnOkFu() || { flag: true }
   // rtf: JSON.stringify(rtf.val || ''),
 
@@ -43,9 +45,55 @@ function B3aTop({ info, pageSta, Dom }: Props, ref: any) {
     resData
   }))
 
+  // 审批的sta
+  const [auditSta, setAuDitSta] = useState('')
+
   return (
     <div className={styles.B3aTop} id='B3aTop'>
-      <div className='B3aTit'>申请信息{pageSta !== '新增' ? <Button>草稿</Button> : null}</div>
+      {['审批'].includes(pageSta) ? (
+        <div className='B3aAudit'>
+          <div className='B3aTit'>
+            审批信息<Button type='dashed'>待审批</Button>
+          </div>
+
+          <div className='B3aRow B3aRow0'>
+            <div className='B3aR1'>
+              <div className='B3aRll'>
+                <span> * </span> 审批结果:
+              </div>
+              <div className='B3aRrr'>
+                {['同意', '不同意'].map(v => (
+                  <Button
+                    key={v}
+                    type={v === auditSta ? 'primary' : 'default'}
+                    onClick={() => setAuDitSta(v)}
+                  >
+                    {v}
+                  </Button>
+                ))}
+              </div>
+            </div>
+            <div className='B3aR1 B3aFull'>
+              <div className='B3aRll'>审批意见:</div>
+              <div className='B3aRrr'>
+                <ZRichTexts
+                  check={false}
+                  dirCode={'xxxxxxxx'}
+                  isLook={false}
+                  ref={ZRiAuditRef}
+                  myUrl='xxxxxxxxxx'
+                  isOne={true}
+                  upAudioBtnNone={true}
+                />
+              </div>
+            </div>
+          </div>
+        </div>
+      ) : null}
+
+      <div className='B3aTit'>
+        申请信息{pageSta !== '新增' ? <Button type='dashed'>草稿</Button> : null}
+      </div>
 
       <div className='B3aRow'>
         <div className='B3aR1'>
@@ -53,7 +101,12 @@ function B3aTop({ info, pageSta, Dom }: Props, ref: any) {
             <span> * </span>申请名称:
           </div>
           <div className='B3aRrr'>
-            <Input placeholder='请输入内容' maxLength={30} showCount />
+            <Input
+              readOnly={['查看', '审批'].includes(pageSta)}
+              placeholder='请输入内容'
+              maxLength={30}
+              showCount
+            />
           </div>
         </div>
         <div className='B3aR1'>
@@ -61,14 +114,24 @@ function B3aTop({ info, pageSta, Dom }: Props, ref: any) {
             <span> * </span>业务日期:
           </div>
           <div className='B3aRrr'>
-            <DatePicker allowClear={false} value={dayjs()} onChange={timeChange} />
+            <DatePicker
+              disabled={['查看', '审批'].includes(pageSta)}
+              allowClear={false}
+              value={dayjs()}
+              onChange={timeChange}
+            />
           </div>
         </div>
 
         {B3aForm1.map(v => (
           <div className='B3aR1' key={v.name}>
             <div className='B3aRll'>{v.name}:</div>
-            <div className='B3aRrr'>这是一段文本</div>
+            <div className='B3aRrr'>
+              这是一段文本
+              {['查看', '审批'].includes(pageSta) && v.name === '发起人'
+                ? ' - 查看和审批后面显示创建时间'
+                : ''}
+            </div>
           </div>
         ))}
 
@@ -91,7 +154,12 @@ function B3aTop({ info, pageSta, Dom }: Props, ref: any) {
         <div className='B3aR1'>
           <div className='B3aRll'>原因事由:</div>
           <div className='B3aRrr'>
-            <Input placeholder='请输入内容' maxLength={30} showCount />
+            <Input
+              readOnly={['查看', '审批'].includes(pageSta)}
+              placeholder='请输入内容'
+              maxLength={30}
+              showCount
+            />
           </div>
         </div>
 

+ 70 - 8
src/pages/B_enterTibet/B3_4page/B3edit/main.tsx

@@ -1,4 +1,4 @@
-import React, { useCallback, useRef } from 'react'
+import React, { useCallback, useMemo, useRef } from 'react'
 import styles from './index.module.scss'
 import { useParams } from 'react-router-dom'
 import B3aTop from '../B3add/B3aTop'
@@ -8,6 +8,7 @@ import MyPopconfirm from '@/components/MyPopconfirm'
 import history from '@/utils/history'
 import { B3TiaoObjUrl, B3TitObjKey } from '../B3add'
 import B3goodsTable from '../../B3goodsTable'
+import B3flowTable from '../../B3flowTable'
 
 type Props = {
   pageSta: TypeB3PageSta
@@ -19,11 +20,20 @@ function B3editMain({ pageSta }: Props) {
   // 点击按钮调用子组件的方法获取数据
   const topRef = useRef<any>(null)
 
+  // 藏品清单子组件
+  const goodsTableRef = useRef<any>(null)
+
   // 点击保存
   const btnOk = useCallback(async () => {
+    console.log(pageSta, '编辑、审批逻辑判断')
+
     // 从顶部组件中拿到数据
-    // const resData = topRef.current?.resData()
-  }, [])
+    const resData1 = topRef.current?.resData()
+    console.log('--顶部数据', resData1)
+
+    const resData2 = goodsTableRef.current?.resData()
+    console.log('--藏品清单数据', resData2)
+  }, [pageSta])
 
   // 点击取消
   const btnX = useCallback(() => {
@@ -31,9 +41,55 @@ function B3editMain({ pageSta }: Props) {
     history.push(url)
   }, [key])
 
+  // const lookBtnFu = useCallback((val: string) => {
+  //   const obj = {
+  //     创建: '在当前页,改状态 草稿-待提交',
+  //     提交: '在当前页,改状态 待提交-待审批/已完成',
+  //     撤回: '在当前页,改状态 待审批/待提交',
+  //     审批: '在当前页,看下个审批环节还是不是要我审批,是就按钮还才存在。刷新页面状态。如果不是,按钮就没了,也要刷新状态',
+  //     编辑: '跳编辑页',
+  //     重新提交: '当前页,审批不通过-待审批。极端情况-我是发起人 又是审批人 只有一个审批环节=》已完成'
+  //   }
+  // }, [])
+
+  // 查看模式下的按钮 待完善
+  const lookBtn = useMemo(() => {
+    return (
+      <>
+        <Button type='primary'>创建</Button>
+        <Button type='primary'>提交</Button>
+        <MyPopconfirm
+          txtK='撤回'
+          onConfirm={() => {}}
+          Dom={
+            <Button type='primary' danger>
+              撤回
+            </Button>
+          }
+        />
+
+        <Button type='primary'>审批</Button>
+        <Button type='primary'>编辑</Button>
+        <Button type='primary'>重新提交</Button>
+        <Button type='primary'>导出</Button>
+        <MyPopconfirm
+          txtK='删除'
+          onConfirm={() => {}}
+          Dom={
+            <Button type='primary' danger>
+              删除
+            </Button>
+          }
+        />
+        <Button onClick={btnX}>返回</Button>
+      </>
+    )
+  }, [btnX])
+
   return (
     <div className={styles.B3editMain}>
       <div className='pageTitle'>
+        {/* 待完善id */}
         藏品{Reflect.get(B3TitObjKey, key)}-{pageSta}
         {id}
       </div>
@@ -45,18 +101,24 @@ function B3editMain({ pageSta }: Props) {
         Dom={
           <>
             {/* 藏品清单 */}
-            <B3goodsTable />
+            <B3goodsTable ref={goodsTableRef} pageSta={pageSta} />
+
+            {/* 申请流程 */}
+            {['查看', '审批'].includes(pageSta) ? <B3flowTable /> : null}
           </>
         }
       />
 
       {/* 底部按钮 */}
       <div className='B3eBtn'>
-        <Button type='primary' onClick={btnOk}>
-          保存
-        </Button>
+        {/* 编辑的时候是保存 审批的时候是提交 */}
+        {['编辑', '审批'].includes(pageSta) ? (
+          <Button type='primary' onClick={btnOk}>
+            {pageSta === '编辑' ? '保存' : '提交'}
+          </Button>
+        ) : null}
 
-        <MyPopconfirm txtK='取消' onConfirm={() => btnX()} />
+        {pageSta === '查看' ? lookBtn : <MyPopconfirm txtK='取消' onConfirm={() => btnX()} />}
       </div>
     </div>
   )

+ 3 - 17
src/pages/B_enterTibet/B3_4page/index.tsx

@@ -2,9 +2,6 @@ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
 import styles from './index.module.scss'
 import { Button, DatePicker, Input, Select } from 'antd'
 import { TypeB3Form, TypeB3PageSta } from './type'
-import { useDispatch, useSelector } from 'react-redux'
-import { Z5_APIgetList } from '@/store/action/Z5role'
-import { RootState } from '@/store'
 import dayjs from 'dayjs'
 import MyTable from '@/components/MyTable'
 import MyPopconfirm from '@/components/MyPopconfirm'
@@ -58,19 +55,7 @@ type Props = {
 // 没有接入后端 待完善
 
 function B34page({ pageSta }: Props) {
-  // 角色
-  const dispatch = useDispatch()
-  useEffect(() => {
-    dispatch(
-      Z5_APIgetList({
-        pageNum: 1,
-        pageSize: 99999,
-        searchKey: ''
-      })
-    )
-  }, [dispatch])
-
-  const { list: roleList } = useSelector((state: RootState) => state.Z5role.tableInfo)
+  // 角色下拉框 待完善
 
   const [formData, setFormData] = useState(baseFormData)
   const formDataRef = useRef(baseFormData)
@@ -172,6 +157,7 @@ function B34page({ pageSta }: Props) {
   )
 
   const tableLastBtn = useMemo(() => {
+    //   看状态和账号角色显示按钮 待完善
     return [
       {
         title: '操作',
@@ -248,7 +234,7 @@ function B34page({ pageSta }: Props) {
             <Select
               style={{ width: 200 }}
               placeholder='请选择'
-              options={[{ id: '', roleName: '全部' }, ...roleList.filter(v => v.id !== 1)]}
+              options={[]}
               fieldNames={{ value: 'id', label: 'roleName' }}
               value={formData.ffff}
               onChange={e => setFormData({ ...formData, ffff: e })}

+ 14 - 0
src/pages/B_enterTibet/B3flowTable/index.module.scss

@@ -0,0 +1,14 @@
+.B3flowTable {
+  padding-right: 20px;
+  margin-top: 24px;
+  padding-bottom: 40px;
+  :global {
+    .B3Ftop {
+      color: var(--themeColor);
+      font-size: 18px;
+      font-weight: 700;
+      padding-left: 18px;
+      margin-bottom: 24px;
+    }
+  }
+}

+ 51 - 0
src/pages/B_enterTibet/B3flowTable/index.tsx

@@ -0,0 +1,51 @@
+import React, { useMemo, useState } from 'react'
+import styles from './index.module.scss'
+import { useParams } from 'react-router-dom'
+import MyTable from '@/components/MyTable'
+import { Button } from 'antd'
+import { B3FtableC } from '@/utils/tableData'
+import YtableLookText from '@/components/YtableLookText'
+
+function B3flowTable() {
+  const { key, id } = useParams<any>()
+
+  const tableLastBtn = useMemo(() => {
+    return [
+      {
+        title: '审批意见',
+        render: (item: any) => {
+          return (
+            <Button size='small' type='text' onClick={() => setLook('xxxx')}>
+              查看
+            </Button>
+          )
+        }
+      }
+    ]
+  }, [])
+
+  //查看富文本信息
+  const [look, setLook] = useState('')
+
+  return (
+    <div className={styles.B3flowTable}>
+      {/* 待完善 参数 */}
+      <div className='B3Ftop'>申请流程{key + id}</div>
+
+      {/* 表格 */}
+      <MyTable
+        list={[{ id: 99 }]}
+        columnsTemp={B3FtableC}
+        lastBtn={tableLastBtn}
+        pagingInfo={false}
+      />
+
+      {/* 查看富文本 */}
+      {look ? <YtableLookText closeFu={() => setLook('')} /> : null}
+    </div>
+  )
+}
+
+const MemoB3flowTable = React.memo(B3flowTable)
+
+export default MemoB3flowTable

+ 6 - 0
src/pages/B_enterTibet/B3goodsTable/B3GaddNew/data.ts

@@ -0,0 +1,6 @@
+export const nweSelect1 = [
+  { value: '一级', label: '一级' },
+  { value: '二级', label: '二级' },
+  { value: '三级', label: '三级' },
+  { value: '未定级', label: '未定级' }
+]

+ 211 - 0
src/pages/B_enterTibet/B3goodsTable/B3GaddNew/index.module.scss

@@ -0,0 +1,211 @@
+.B3GaddNew {
+  :global {
+    .ant-modal-close {
+      display: none;
+    }
+    .ant-modal {
+      width: 1600px !important;
+      min-width: 1600px;
+      top: 40px !important;
+    }
+
+    .ant-modal-body {
+      border-top: 1px solid #ccc;
+
+      .B3Nred {
+        color: #ff4d4f;
+      }
+
+      .B3Nmain {
+        height: 753px;
+        overflow-y: auto;
+        width: 1400px;
+        padding: 24px 0;
+        .B3Ntit {
+          font-size: 16px;
+          font-weight: 700;
+          padding-left: 15px;
+          position: relative;
+          margin-bottom: 15px;
+          &::before {
+            position: absolute;
+            left: 0px;
+            top: 50%;
+            transform: translateY(-50%);
+            content: '';
+            width: 6px;
+            height: 16px;
+            background-color: var(--themeColor);
+          }
+        }
+        .ant-form-item-label {
+          width: 100px;
+        }
+
+        .B3Nbox {
+          width: 100%;
+          display: flex;
+          justify-content: space-between;
+          flex-wrap: wrap;
+          align-items: self-start;
+          margin-bottom: 24px;
+          .B3Nrow {
+            width: 48%;
+            display: flex;
+            position: relative;
+            .ant-input {
+              width: 400px;
+            }
+            .ant-picker {
+              width: 462px;
+            }
+            textarea {
+              width: 462px !important;
+            }
+            .ant-select-selector {
+              width: 464px;
+            }
+
+            .B3Nrowll {
+              width: 100px;
+              text-align: right;
+            }
+            .B3Nrowrr {
+              width: calc(100% - 100px);
+              word-wrap: break-word;
+            }
+
+            // 一些定位的盒子
+            .B3NrowDing {
+              position: absolute;
+              top: 60px;
+              left: 0;
+              .ant-select-selector {
+                width: 464px;
+              }
+            }
+            // 具体质量
+            .B3NrowDing2 {
+              display: flex;
+              .ant-input-number {
+                width: 205px;
+              }
+              .ant-select-selector {
+                width: 260px;
+              }
+            }
+          }
+          .B3Nrow0 {
+            .ant-input {
+              width: 260px;
+            }
+            .ant-input-number {
+              width: 325px;
+            }
+            .ant-select-selector {
+              width: 140px;
+            }
+          }
+
+          // 质地
+          .B3Nrow1 {
+            .ant-select-selector {
+              width: 156px;
+            }
+          }
+
+          // 左边数字填写 右边级联
+          .B3NrowNumOrCas {
+            .ant-input-number {
+              width: 140px;
+            }
+            .ant-select-selector {
+              width: 325px;
+            }
+          }
+
+          // 封面
+          .formRow {
+            width: 48%;
+            display: flex;
+            .formLeft {
+              width: 100px;
+              text-align: right;
+              & > span {
+                color: #ff4d4f;
+              }
+            }
+          }
+
+          // 备注 富文本
+          .formRow2 {
+            width: 100%;
+            .formLeft {
+              position: relative;
+              top: 5px;
+            }
+            .formRightSize {
+              // 尺寸
+              display: flex;
+
+              .ant-form-item-label {
+                width: 82px;
+              }
+
+              .ant-input-number {
+                width: 205px;
+              }
+              .ant-select-selector {
+                width: 322px;
+              }
+            }
+          }
+
+          // 著者 版本 存卷
+          .B3Nrow2 {
+            flex-direction: column;
+            .ant-form-item {
+              width: 565px;
+            }
+          }
+
+          // 一些比较长的label字段
+          .B3NlongTxt {
+            .ant-form-item-label {
+              position: relative;
+              left: -7px;
+            }
+          }
+          .B3NlongTxt2 {
+            .ant-form-item-label label {
+              font-size: 13px;
+            }
+          }
+        }
+
+        .B3Nbox1 {
+          margin-top: -40px;
+          // 相关附件
+          .tableImgAuto {
+            display: flex;
+            justify-content: center;
+          }
+          .ant-table-cell {
+            text-align: center;
+            padding: 8px !important;
+          }
+        }
+
+        .B3Nbtn {
+          position: absolute;
+          top: 50%;
+          transform: translateY(-50%);
+          right: 52px;
+          .ant-btn {
+            display: block;
+          }
+        }
+      }
+    }
+  }
+}

+ 645 - 0
src/pages/B_enterTibet/B3goodsTable/B3GaddNew/index.tsx

@@ -0,0 +1,645 @@
+import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
+import styles from './index.module.scss'
+import {
+  Button,
+  Cascader,
+  DatePicker,
+  Form,
+  FormInstance,
+  Input,
+  InputNumber,
+  Modal,
+  Select
+} from 'antd'
+import MyPopconfirm from '@/components/MyPopconfirm'
+import { D1GselectNum } from '@/pages/D_storeManage/D1storage/D1goods/data'
+import { nweSelect1 } from './data'
+import TextArea from 'antd/es/input/TextArea'
+import ZupOne from '@/components/ZupOne'
+import ZRichTexts from '@/components/ZRichTexts'
+import MyTable from '@/components/MyTable'
+import { Y33tableC } from '@/utils/tableData'
+import ImageLazy from '@/components/ImageLazy'
+import YtableVideo from '@/components/YtableVideo'
+
+type Props = {
+  closeFu: () => void
+  nowSta: { key: string; id: string }
+}
+
+function B3GaddNew({ nowSta, closeFu }: Props) {
+  useEffect(() => {
+    FormBoxRef.current?.setFieldsValue({
+      aaaa: '藏品总登记号'
+    })
+  }, [])
+
+  // 设置表单ref
+  const FormBoxRef = useRef<FormInstance>(null)
+
+  // 年代是否选择了其他
+  const [ageAc, setAgeAc] = useState(false)
+
+  // 封面图的ref
+  const ZupThumbRef = useRef<any>(null)
+
+  // 设置封面图
+  //  ZupThumbRef.current?.setFileComFileFu({
+  //   fileName: '',
+  //   filePath: info.thumb
+  // })
+
+  // const coverUrl1 = ZupThumbRef.current?.fileComFileResFu()
+
+  // thumb: coverUrl1.filePath,
+
+  // 富文本的ref
+  const ZRichTextRef = useRef<any>(null)
+
+  // 设置富文本
+  //  ZRichTextRef.current?.ritxtShowFu(JSON.parse(data.rtf))
+
+  // const rtf = ZRichTextRef.current?.fatherBtnOkFu() || { flag: true }
+  // rtf: JSON.stringify(rtf.val || ''),
+
+  // 相关附件的操作
+  const startBtn = useMemo(() => {
+    return [
+      {
+        width: 100,
+        title: '缩略图/视频',
+        render: (item: any) => {
+          return item.type === '图像' ? (
+            <div className='tableImgAuto'>
+              <ImageLazy width={60} height={60} srcBig={item.src} src={item.src} offline={true} />
+            </div>
+          ) : item.type === '视频' ? (
+            <YtableVideo item={item} />
+          ) : (
+            ' - '
+          )
+        }
+      },
+      {
+        title: '附件类型',
+        render: (item: any) => <Select style={{ width: 120 }} placeholder='请选择' />
+      },
+      {
+        title: '附件用途',
+        render: (item: any) => (
+          <Cascader
+            options={[
+              { value: '年代1', label: '年代11', children: [{ value: 1, label: 'xxx' }] },
+              { value: '其他', label: '其他' }
+            ]}
+            changeOnSelect
+            placeholder='请选择'
+            // fieldNames={{ label: 'name', value: 'id', children: 'children' }}
+          />
+        )
+      }
+    ]
+  }, [])
+
+  const tableLastBtn = useMemo(() => {
+    return [
+      {
+        width: 120,
+        title: '操作',
+        render: (item: any) => {
+          return (
+            <>
+              <Button size='small' type='text'>
+                <a href={item.src} download target='_blank' rel='noreferrer'>
+                  下载
+                </a>
+              </Button>
+              <MyPopconfirm txtK='删除' onConfirm={() => {}} />
+            </>
+          )
+        }
+      }
+    ]
+  }, [])
+
+  // 没有通过校验
+  const onFinishFailed = useCallback(() => {
+    // return MessageFu.warning("有表单不符号规则!");
+  }, [])
+
+  // 通过校验点击确定
+  const onFinish = useCallback(async (values: any) => {}, [])
+
+  return (
+    <Modal
+      wrapClassName={styles.B3GaddNew}
+      open={true}
+      title='新增藏品'
+      footer={
+        [] // 设置footer为空,去掉 取消 确定默认按钮
+      }
+    >
+      <div className='B3Nmain'>
+        <Form
+          scrollToFirstError={true}
+          ref={FormBoxRef}
+          name='basic'
+          onFinish={onFinish}
+          onFinishFailed={onFinishFailed}
+          autoComplete='off'
+        >
+          <div className='B3Ntit'>档案信息</div>
+
+          <div className='B3Nbox'>
+            <div className='B3Nrow B3Nrow0'>
+              <Form.Item label='藏品编号' name='aaaa' rules={[{ required: true, message: '' }]}>
+                <Select
+                  style={{ width: 140 }}
+                  options={D1GselectNum.filter(v => v.label !== '全部')}
+                />
+              </Form.Item>
+
+              <Form.Item name='prefix' rules={[{ required: true, message: '请输入内容' }]}>
+                <Input maxLength={30} showCount placeholder='请输入内容' />
+              </Form.Item>
+            </div>
+
+            <div className='B3Nrow'>
+              <Form.Item label='分类号' name='bbbb'>
+                <Input maxLength={30} showCount placeholder='请输入内容' />
+              </Form.Item>
+            </div>
+
+            <div className='B3Nrow'>
+              <div className='B3Nrowll'>制档人:</div>
+              <div className='B3Nrowrr'>这是一段文本</div>
+            </div>
+
+            <div className='B3Nrow'>
+              <div className='B3Nrowll'>制档日期:</div>
+              <div className='B3Nrowrr'>2025年3月13日11:25:23</div>
+            </div>
+          </div>
+
+          <div className='B3Ntit'>藏品基本信息</div>
+
+          <div className='B3Nbox'>
+            <div className='B3Nrow'>
+              <Form.Item
+                label='藏品名称'
+                name='bbbb'
+                rules={[{ required: true, message: '请输入藏品名称' }]}
+              >
+                <Input maxLength={30} showCount placeholder='请输入内容' />
+              </Form.Item>
+            </div>
+            <div className='B3Nrow'>
+              <Form.Item label='藏品原名' name='bbbb'>
+                <Input maxLength={30} showCount placeholder='请输入内容' />
+              </Form.Item>
+            </div>
+            <div className='B3Nrow'>
+              <Form.Item
+                label='文物级别'
+                name='bbbb'
+                rules={[{ required: true, message: '请选择文物级别' }]}
+              >
+                <Select options={nweSelect1} placeholder='请选择' />
+              </Form.Item>
+            </div>
+            <div className='B3Nrow'>
+              <Form.Item
+                label='文物类别'
+                name='wwww'
+                rules={[{ required: true, message: '请选择文物类别' }]}
+              >
+                <Cascader
+                  options={[
+                    { value: '年代1', label: '年代11', children: [{ value: 1, label: 'xxx' }] },
+                    { value: '其他', label: '其他' }
+                  ]}
+                  changeOnSelect
+                  placeholder='请选择'
+                  // fieldNames={{ label: 'name', value: 'id', children: 'children' }}
+                  allowClear={false}
+                />
+              </Form.Item>
+            </div>
+            <div className='B3Nrow'>
+              <Form.Item
+                label='年代'
+                name='age'
+                rules={[{ required: true, message: '请选择年代' }]}
+              >
+                <Cascader
+                  options={[
+                    { value: '年代1', label: '年代11', children: [{ value: 1, label: 'xxx' }] },
+                    { value: '其他', label: '其他' }
+                  ]}
+                  onChange={value => setAgeAc(value[0] === '其他')}
+                  placeholder='请选择'
+                  // fieldNames={{ label: 'name', value: 'id', children: 'children' }}
+                  allowClear={false}
+                />
+              </Form.Item>
+            </div>
+
+            <div className='B3Nrow'>
+              <Form.Item
+                label='具体年代'
+                name='ageTxt'
+                rules={[{ required: ageAc, message: '请输入内容' }]}
+              >
+                <Input maxLength={30} showCount placeholder='请输入内容' />
+              </Form.Item>
+            </div>
+
+            <div className='B3Nrow'>
+              <Form.Item label='制作时间' name='xxxx'>
+                <DatePicker placeholder='请选择日期' />
+              </Form.Item>
+              <div className='B3NrowDing'>
+                <Form.Item label='作者' name='bbbb'>
+                  <Input maxLength={30} showCount placeholder='请输入内容' />
+                </Form.Item>
+              </div>
+            </div>
+
+            <div className='B3Nrow'>
+              <Form.Item label='作者介绍' name='bbbb'>
+                <TextArea maxLength={500} showCount placeholder='请输入内容' />
+              </Form.Item>
+            </div>
+
+            <div className='B3Nrow B3NrowNumOrCas'>
+              <Form.Item
+                label='数量'
+                name='qqqq'
+                rules={[{ required: true, message: '请输入正整数' }]}
+              >
+                <InputNumber min={1} precision={0} placeholder='请输入正整数' />
+              </Form.Item>
+
+              <Form.Item name='prefix' rules={[{ required: true, message: '请选择单位' }]}>
+                <Cascader
+                  options={[]}
+                  changeOnSelect
+                  placeholder='请选择单位'
+                  // fieldNames={{ label: 'name', value: 'id', children: 'children' }}
+                  allowClear={false}
+                />
+              </Form.Item>
+            </div>
+            <div className='B3Nrow'>
+              <Form.Item label='实际数量' name='bbbb'>
+                <Input maxLength={30} showCount placeholder='请输入内容' />
+              </Form.Item>
+            </div>
+
+            <div className='B3Nrow B3Nrow1'>
+              <Form.Item
+                label={
+                  <div>
+                    <span className='B3Nred'> * </span>质地
+                  </div>
+                }
+                name='ee0'
+              >
+                <Cascader
+                  options={[
+                    { value: '年代1', label: '年代11', children: [{ value: 1, label: 'xxx' }] },
+                    { value: '其他', label: '其他' }
+                  ]}
+                  changeOnSelect
+                  placeholder='请选择'
+                  // fieldNames={{ label: 'name', value: 'id', children: 'children' }}
+                />
+              </Form.Item>
+              <Form.Item name='ee1'>
+                <Cascader
+                  options={[
+                    { value: '年代1', label: '年代11', children: [{ value: 1, label: 'xxx' }] },
+                    { value: '其他', label: '其他' }
+                  ]}
+                  changeOnSelect
+                  placeholder='请选择'
+                  // fieldNames={{ label: 'name', value: 'id', children: 'children' }}
+                />
+              </Form.Item>
+              <Form.Item name='ee2' rules={[{ required: true, message: '请选择质地3' }]}>
+                <Cascader
+                  options={[
+                    { value: '年代1', label: '年代11', children: [{ value: 1, label: 'xxx' }] },
+                    { value: '其他', label: '其他' }
+                  ]}
+                  changeOnSelect
+                  placeholder='请选择'
+                  // fieldNames={{ label: 'name', value: 'id', children: 'children' }}
+                  allowClear={false}
+                />
+              </Form.Item>
+
+              <div className='B3NrowDing'>
+                <Form.Item
+                  label='完残程度'
+                  name='ee3'
+                  rules={[{ required: true, message: '请选择完残程度' }]}
+                >
+                  <Cascader
+                    options={[
+                      { value: '年代1', label: '年代11', children: [{ value: 1, label: 'xxx' }] },
+                      { value: '其他', label: '其他' }
+                    ]}
+                    changeOnSelect
+                    placeholder='请选择'
+                    // fieldNames={{ label: 'name', value: 'id', children: 'children' }}
+                    allowClear={false}
+                  />
+                </Form.Item>
+              </div>
+            </div>
+
+            {/* 封面 */}
+            <div className='formRow'>
+              <div className='formLeft'>封面图:</div>
+              <div className='formRight'>
+                <ZupOne
+                  ref={ZupThumbRef}
+                  isLook={false}
+                  fileCheck={false}
+                  size={5}
+                  dirCode={'xxxxx'}
+                  myUrl='xxxxxxx'
+                  format={['image/jpeg', 'image/png']}
+                  formatTxt='png、jpg和jpeg'
+                  checkTxt='请上传封面图!'
+                  upTxt='最多1张'
+                  myType='thumb'
+                />
+              </div>
+            </div>
+
+            <div className='B3Nrow'>
+              <Form.Item label='完残情况' name='bbbb'>
+                <TextArea maxLength={500} showCount placeholder='请输入内容' />
+              </Form.Item>
+            </div>
+
+            <div className='B3Nrow'>
+              <Form.Item label='保存状态' name='bbbb'>
+                <TextArea maxLength={500} showCount placeholder='请输入内容' />
+              </Form.Item>
+            </div>
+
+            <div className='B3Nrow'>
+              <Form.Item label='色泽' name='bbbb'>
+                <TextArea maxLength={500} showCount placeholder='请输入内容' />
+              </Form.Item>
+            </div>
+
+            <div className='B3Nrow'>
+              <Form.Item label='用途' name='bbbb'>
+                <TextArea maxLength={500} showCount placeholder='请输入内容' />
+              </Form.Item>
+            </div>
+
+            <div className='B3Nrow'>
+              <Form.Item label='形状描述' name='bbbb'>
+                <TextArea maxLength={500} showCount placeholder='请输入内容' />
+              </Form.Item>
+            </div>
+
+            <div className='B3Nrow B3Nrow2'>
+              <Form.Item label='著者' name='bbbb'>
+                <Input maxLength={30} showCount placeholder='请输入内容' />
+              </Form.Item>
+              <Form.Item label='版本' name='bbbb'>
+                <Input maxLength={30} showCount placeholder='请输入内容' />
+              </Form.Item>
+              <Form.Item label='存卷' name='bbbb'>
+                <Input maxLength={30} showCount placeholder='请输入内容' />
+              </Form.Item>
+            </div>
+
+            {/* 备注 */}
+            <div className='formRow formRow2'>
+              <div className='formLeft'>备注:</div>
+              <div className='formRight'>
+                <ZRichTexts
+                  check={false}
+                  dirCode={'xxxxxxxx'}
+                  isLook={false}
+                  ref={ZRichTextRef}
+                  myUrl='xxxxxxxxxx'
+                  isOne={true}
+                  upAudioBtnNone={true}
+                />
+              </div>
+            </div>
+          </div>
+
+          {/* =====上传附件==== */}
+          <div className='B3Nbox B3Nbox1'>
+            <div className='B3Ntit'>
+              相关附件 &emsp;<Button type='primary'>上传附件</Button>
+            </div>
+
+            {/* 表格 */}
+            <MyTable
+              list={[
+                {
+                  id: 1,
+                  type: '图像',
+                  src: 'https://houseoss.4dkankan.com/project/DEMO/staticResource/touxiang.jpg'
+                },
+                {
+                  id: 2,
+                  type: '视频',
+                  src: 'https://houseoss.4dkankan.com/project/DEMO/staticResource/loop.mp4'
+                },
+                {
+                  id: 3,
+                  type: '3D'
+                }
+              ]}
+              columnsTemp={Y33tableC('新增')}
+              lastBtn={tableLastBtn}
+              startBtn={startBtn}
+              pagingInfo={false}
+            />
+          </div>
+
+          <div className='B3Ntit'>尺寸和质量</div>
+
+          <div className='B3Nbox'>
+            <div className='formRow formRow2'>
+              <div className='formLeft'>尺寸:</div>
+              <div className='formRight formRightSize'>
+                <Form.Item label='通长' name='qqqq'>
+                  <InputNumber min={0} precision={2} placeholder='请输入数字,最多两位小数' />
+                </Form.Item>
+
+                <Form.Item label='通宽' name='qqqq'>
+                  <InputNumber min={0} precision={2} placeholder='请输入数字,最多两位小数' />
+                </Form.Item>
+                <Form.Item label='通高' name='qqqq'>
+                  <InputNumber min={0} precision={2} placeholder='请输入数字,最多两位小数' />
+                </Form.Item>
+
+                <Form.Item name='eee9'>
+                  <Cascader
+                    options={[
+                      { value: '年代1', label: '年代11', children: [{ value: 1, label: 'xxx' }] },
+                      { value: '其他', label: '其他' }
+                    ]}
+                    changeOnSelect
+                    placeholder='请选择单位'
+                    // fieldNames={{ label: 'name', value: 'id', children: 'children' }}
+                  />
+                </Form.Item>
+              </div>
+            </div>
+
+            <div className='B3Nrow'>
+              <Form.Item
+                label='质量范围'
+                name='bbbb'
+                rules={[{ required: true, message: '请选择质量范围' }]}
+              >
+                <Select placeholder='请选择' />
+              </Form.Item>
+
+              <div className='B3NrowDing B3NrowDing2'>
+                <Form.Item label='具体质量' name='qqqq'>
+                  <InputNumber min={0} precision={2} placeholder='请输入数字,最多两位小数' />
+                </Form.Item>
+
+                <Form.Item name='prefix'>
+                  <Cascader
+                    options={[
+                      { value: '年代1', label: '年代11', children: [{ value: 1, label: 'xxx' }] },
+                      { value: '其他', label: '其他' }
+                    ]}
+                    changeOnSelect
+                    placeholder='请选择单位'
+                    // fieldNames={{ label: 'name', value: 'id', children: 'children' }}
+                  />
+                </Form.Item>
+              </div>
+            </div>
+
+            <div className='B3Nrow'>
+              <Form.Item label='具体尺寸' name='bbbb'>
+                <TextArea maxLength={500} showCount placeholder='请输入内容' />
+              </Form.Item>
+            </div>
+          </div>
+
+          <div className='B3Ntit'>入藏及来源</div>
+
+          <div className='B3Nbox'>
+            <div className='B3Nrow'>
+              <Form.Item label='入馆凭证号' name='bbbb'>
+                <Input maxLength={30} showCount placeholder='请输入内容' />
+              </Form.Item>
+            </div>
+            <div className='B3Nrow'>
+              <Form.Item label='入藏凭证号' name='bbbb'>
+                <Input maxLength={30} showCount placeholder='请输入内容' />
+              </Form.Item>
+            </div>
+
+            <div className='B3Nrow'>
+              <Form.Item label='入藏日期' name='bbbb'>
+                <DatePicker placeholder='请选择日期' />
+              </Form.Item>
+            </div>
+
+            <div className='B3Nrow'>
+              <Form.Item
+                label='入藏日期范围'
+                className='B3NlongTxt'
+                name='bbbb'
+                rules={[{ required: true, message: '请选择入藏日期范围' }]}
+              >
+                <Cascader
+                  changeOnSelect
+                  options={[]}
+                  placeholder='请选择'
+                  // fieldNames={{ label: 'name', value: 'id', children: 'children' }}
+                  allowClear={false}
+                />
+              </Form.Item>
+            </div>
+
+            <div className='B3Nrow formRow2'>
+              <Form.Item
+                label='来源'
+                name='bbbb'
+                rules={[{ required: true, message: '请选择来源' }]}
+              >
+                <Cascader
+                  changeOnSelect
+                  options={[]}
+                  placeholder='请选择'
+                  // fieldNames={{ label: 'name', value: 'id', children: 'children' }}
+                  allowClear={false}
+                />
+              </Form.Item>
+            </div>
+
+            <div className='B3Nrow'>
+              <Form.Item label='来源详情' name='bbbb'>
+                <TextArea maxLength={500} showCount placeholder='请输入内容' />
+              </Form.Item>
+            </div>
+
+            <div className='B3Nrow'>
+              <Form.Item label='征集经过' name='bbbb'>
+                <TextArea maxLength={500} showCount placeholder='请输入内容' />
+              </Form.Item>
+            </div>
+            <div className='B3Nrow'>
+              <Form.Item label='铭记题跋' name='bbbb'>
+                <TextArea maxLength={500} showCount placeholder='请输入内容' />
+              </Form.Item>
+            </div>
+            <div className='B3Nrow'>
+              <Form.Item label='鉴藏印记' name='bbbb'>
+                <TextArea maxLength={500} showCount placeholder='请输入内容' />
+              </Form.Item>
+            </div>
+          </div>
+
+          <div className='B3Ntit'>藏品历史及流传</div>
+
+          <div className='B3Nbox'>
+            <div className='B3Nrow'>
+              <Form.Item label='著作及有关书目' className='B3NlongTxt2' name='bbbb'>
+                <TextArea maxLength={500} showCount placeholder='请输入内容' />
+              </Form.Item>
+            </div>
+            <div className='B3Nrow'>
+              <Form.Item label='流传经历' name='yyyy'>
+                <TextArea maxLength={500} showCount placeholder='请输入内容' />
+              </Form.Item>
+            </div>
+          </div>
+
+          {/* 确定和取消按钮 */}
+          <Form.Item className='B3Nbtn'>
+            <Button type='primary' htmlType='submit'>
+              提交
+            </Button>
+            &emsp;
+            <MyPopconfirm txtK='取消' onConfirm={closeFu} />
+          </Form.Item>
+        </Form>
+      </div>
+    </Modal>
+  )
+}
+
+const MemoB3GaddNew = React.memo(B3GaddNew)
+
+export default MemoB3GaddNew

+ 59 - 0
src/pages/B_enterTibet/B3goodsTable/B3GaddNow/index.module.scss

@@ -0,0 +1,59 @@
+// 新增弹窗页面
+.B3GaddNow {
+  :global {
+    .ant-modal-close {
+      display: none;
+    }
+
+    .ant-modal {
+      width: 1600px !important;
+      min-width: 1600px;
+      top: 40px !important;
+    }
+
+    .ant-modal-body {
+      border-top: 1px solid #ccc;
+    }
+
+    .B3GaMain {
+      padding-top: 15px;
+      .B3GaTop {
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        margin-bottom: 15px;
+        .B3Gatopll {
+          display: flex;
+          & > div {
+            position: relative;
+            margin-right: 15px;
+            display: flex;
+            align-items: center;
+            .ant-input {
+              width: 160px;
+            }
+          }
+          .ant-select {
+            width: 120px;
+          }
+        }
+      }
+      .ant-table-cell {
+        padding: 8px !important;
+        text-align: center !important;
+      }
+      .ant-btn-text {
+        color: var(--themeColor);
+      }
+      .tableImgAuto {
+        display: flex;
+        justify-content: center;
+      }
+      .B3GaMainBtn {
+        position: relative;
+        top: 15px;
+        text-align: center;
+      }
+    }
+  }
+}

+ 160 - 0
src/pages/B_enterTibet/B3goodsTable/B3GaddNow/index.tsx

@@ -0,0 +1,160 @@
+import React, { useCallback, useMemo, useState } from 'react'
+import styles from './index.module.scss'
+import { Button, Checkbox, Input, Modal, Select } from 'antd'
+import MyPopconfirm from '@/components/MyPopconfirm'
+import MyTable from '@/components/MyTable'
+import { B3eTableC } from '@/utils/tableData'
+import { openGoodsInfoFu } from '@/utils/history'
+
+type Props = {
+  closeFu: () => void
+  nowSta: { key: string; id: string }
+}
+
+function B3GaddNow({ nowSta, closeFu }: Props) {
+  // 待完善 根据key值不同 来设置不同的下拉框数据
+
+  // 多选
+  const [checkArr, setCheckArr] = useState<number[]>([])
+
+  const checkFu = useCallback(
+    (id: number) => {
+      if (checkArr.includes(id)) setCheckArr(checkArr.filter(v => v !== id))
+      else setCheckArr([...checkArr, id])
+    },
+    [checkArr]
+  )
+
+  const startBtn = useMemo(() => {
+    return [
+      {
+        title: '选择',
+        width: 50,
+        render: (item: any) => (
+          <Checkbox checked={checkArr.includes(item.id)} onChange={() => checkFu(item.id)} />
+        )
+      },
+      {
+        title: '编号类型',
+        render: (item: any) => item.num || '(空)'
+      }
+    ]
+  }, [checkArr, checkFu])
+
+  const tableLastBtn = useMemo(() => {
+    return [
+      {
+        title: '操作',
+        render: (item: any) => {
+          return (
+            <Button size='small' type='text' onClick={() => openGoodsInfoFu(item.id)}>
+              查看
+            </Button>
+          )
+        }
+      }
+    ]
+  }, [])
+
+  return (
+    <Modal
+      wrapClassName={styles.B3GaddNow}
+      open={true}
+      title='选择藏品'
+      footer={
+        [] // 设置footer为空,去掉 取消 确定默认按钮
+      }
+    >
+      <div className='B3GaMain'>
+        <div className='B3GaTop'>
+          <div className='B3Gatopll'>
+            <div>
+              <span>藏品编号:</span>
+              <Input style={{ width: 185 }} placeholder='藏品编号' maxLength={30} />
+            </div>
+            <div>
+              <span>藏品名称:</span>
+              <Input style={{ width: 185 }} placeholder='请输入藏品名称' maxLength={30} />
+            </div>
+
+            <div>
+              <span>藏品总登记号:</span>
+              <Select />
+            </div>
+            <div>
+              <span>文物级别:</span>
+              <Select />
+            </div>
+            <div>
+              <span>类别:</span>
+              <Select />
+            </div>
+          </div>
+          <div>
+            <Checkbox>我关注的</Checkbox>
+          </div>
+        </div>
+
+        <div className='B3GaTop'>
+          <div className='B3Gatopll'>
+            <div>
+              <span>年代:</span>
+              <Select />
+            </div>
+            <div>
+              <span>质地:</span>
+              <Select />
+            </div>
+            <div>
+              <span>完残程度:</span>
+              <Select />
+            </div>
+            <div>
+              <span>来源:</span>
+              <Select />
+            </div>
+            <div>
+              <span>入藏状态:</span>
+              <Select />
+            </div>
+            <div>
+              <span>库存状态:</span>
+              <Select />
+            </div>
+          </div>
+          <div>
+            <Button type='primary'>查询</Button>&emsp;
+            <Button>重置</Button>
+          </div>
+        </div>
+
+        {/* 表格 */}
+        <MyTable
+          yHeight={575}
+          classKey='B3GaddNow'
+          list={[{ id: 99, thumb: '' }]}
+          columnsTemp={[
+            ...B3eTableC,
+            ['txt', '入藏状态', 'description'],
+            ['txt', '库存状态', 'description']
+          ]}
+          startBtn={startBtn}
+          lastBtn={tableLastBtn}
+          pagingInfo={false}
+        />
+
+        <div className='B3GaMainBtn'>
+          <Button type='primary' htmlType='submit' disabled={checkArr.length === 0}>
+            提交
+          </Button>
+          &emsp;
+          <MyPopconfirm txtK='取消' onConfirm={closeFu} />
+        </div>
+      </div>
+    </Modal>
+  )
+}
+
+const MemoB3GaddNow = React.memo(B3GaddNow)
+
+export default MemoB3GaddNow

+ 1 - 0
src/pages/B_enterTibet/B3goodsTable/index.module.scss

@@ -7,6 +7,7 @@
       padding-bottom: 10px;
       margin-bottom: 17px;
       .B3eGtop1 {
+        color: var(--themeColor);
         font-size: 18px;
         font-weight: 700;
         padding-left: 18px;

+ 49 - 9
src/pages/B_enterTibet/B3goodsTable/index.tsx

@@ -7,8 +7,19 @@ import MyPopconfirm from '@/components/MyPopconfirm'
 import classNames from 'classnames'
 import Y1cathet from '@/pages/Y_goodsDetails/Y1cathet'
 import { openGoodsInfoFu } from '@/utils/history'
+import { useParams } from 'react-router-dom'
+import B3GaddNow from './B3GaddNow'
+import { forwardRef, useImperativeHandle } from 'react'
+import B3GaddNew from './B3GaddNew'
+import { TypeB3PageSta } from '../B3_4page/type'
+
+type Props = {
+  pageSta: TypeB3PageSta
+}
+
+function B3goodsTable({ pageSta }: Props, ref: any) {
+  const { key, id } = useParams<any>()
 
-function B3goodsTable() {
   // 点击删除
   const delTableFu = useCallback(async (id: number) => {}, [])
 
@@ -43,21 +54,45 @@ function B3goodsTable() {
               <Button size='small' type='text' onClick={() => openGoodsInfoFu(item.id)}>
                 查看
               </Button>
-              <MyPopconfirm txtK='删除' onConfirm={() => delTableFu(item.id)} />
+              {['查看', '审批'].includes(pageSta) ? null : (
+                <MyPopconfirm txtK='删除' onConfirm={() => delTableFu(item.id)} />
+              )}
             </>
           )
         }
       }
     ]
-  }, [delTableFu])
+  }, [delTableFu, pageSta])
+
+  // 从已存在的藏品中添加
+  const [nowSta, setNowSta] = useState({ key: '', id: '', type: '' })
+
+  // 可以让父组件调用子组件的方法
+
+  const resData = useCallback(() => {
+    return { xxx: '藏品清单数据' }
+  }, [])
+
+  useImperativeHandle(ref, () => ({
+    resData
+  }))
 
   return (
     <div className={styles.B3goodsTable}>
       <div className='B3eGtop'>
         <div className='B3eGtop1'>藏品清单</div>
         <div>
-          <Button type='primary'>从已存在的藏品中添加</Button>&emsp;
-          <Button type='primary'>新增</Button>
+          {['查看', '审批'].includes(pageSta) ? null : (
+            <>
+              <Button type='primary' onClick={() => setNowSta({ key, id, type: 'now' })}>
+                从已存在的藏品中添加
+              </Button>
+              &emsp;
+              <Button type='primary' onClick={() => setNowSta({ key, id, type: 'new' })}>
+                新增
+              </Button>
+            </>
+          )}
         </div>
       </div>
       {/* 表格 */}
@@ -70,10 +105,15 @@ function B3goodsTable() {
       />
       {/* 打开侧边栏 */}
       <Y1cathet sId={cathet} closeFu={() => setCathet(0)} />
+
+      {nowSta.id ? (
+        nowSta.type === 'now' ? (
+          <B3GaddNow nowSta={nowSta} closeFu={() => setNowSta({ key: '', id: '', type: '' })} />
+        ) : (
+          <B3GaddNew nowSta={nowSta} closeFu={() => setNowSta({ key: '', id: '', type: '' })} />
+        )
+      ) : null}
     </div>
   )
 }
-
-const MemoB3goodsTable = React.memo(B3goodsTable)
-
-export default MemoB3goodsTable
+export default forwardRef(B3goodsTable)

+ 8 - 2
src/pages/Y_goodsDetails/Y1cathet/Y11com.tsx

@@ -12,7 +12,10 @@ function Y11com() {
           {Y11infoArr1.map((v, i) => (
             <div className='Y1row' key={v.name}>
               <div className='Y1rowll'>{v.name}:</div>
-              <div className='Y1rowrr'>这是一段文本{i}</div>
+              <div className='Y1rowrr'>
+                这是一段文本
+                {i}
+              </div>
             </div>
           ))}
         </div>
@@ -27,7 +30,10 @@ function Y11com() {
           {Y11infoArr2.map((v, i) => (
             <div className={classNames('y1z2_1row1', v.full ? 'y1z2_1row1Full' : '')} key={v.name}>
               <div className='y1z2_1r11'>{v.name}:</div>
-              <div className='y1z2_1r12'>这是一段文本{i}</div>
+              <div className='y1z2_1r12'>
+                这是一段文本
+                {i}
+              </div>
             </div>
           ))}
         </div>

+ 3 - 21
src/pages/Y_goodsDetails/Y1cathet/Y33com.tsx

@@ -4,10 +4,9 @@ import { Button, Checkbox } from 'antd'
 import MyTable from '@/components/MyTable'
 import { Y33tableC } from '@/utils/tableData'
 import ImageLazy from '@/components/ImageLazy'
-import { EyeOutlined } from '@ant-design/icons'
-import store from '@/store'
 import MyPopconfirm from '@/components/MyPopconfirm'
 import Y33setType from '../Y2look/Y33setType'
+import YtableVideo from '@/components/YtableVideo'
 
 type Props = {
   isLook?: boolean
@@ -48,24 +47,7 @@ function Y33com({ isLook }: Props) {
               <ImageLazy width={60} height={60} srcBig={item.src} src={item.src} offline={true} />
             </div>
           ) : item.type === '视频' ? (
-            <div className='tableImgAuto'>
-              <div className='TvideoBox'>
-                <div
-                  className='TvideoBoxLook'
-                  onClick={() =>
-                    store.dispatch({
-                      type: 'layout/lookDom',
-                      payload: { src: item.src, type: 'video', flag: true }
-                    })
-                  }
-                >
-                  <EyeOutlined />
-                  &nbsp;
-                  <div>预览</div>
-                </div>
-                <video src={item.src}></video>
-              </div>
-            </div>
+            <YtableVideo item={item} />
           ) : (
             ' - '
           )
@@ -173,7 +155,7 @@ function Y33com({ isLook }: Props) {
             type: '3D'
           }
         ]}
-        columnsTemp={Y33tableC}
+        columnsTemp={Y33tableC('详情')}
         lastBtn={tableLastBtn}
         startBtn={startBtn}
         pagingInfo={false}

+ 9 - 0
src/pages/Y_goodsDetails/Y1cathet/index.module.scss

@@ -79,6 +79,9 @@
           .Y1rowrr {
             width: calc(100% - 120px);
             word-wrap: break-word;
+            max-height: 130px;
+            overflow-y: auto;
+            white-space: pre-wrap;
           }
         }
 
@@ -125,10 +128,16 @@
                 .y1z2_1r12 {
                   width: calc(100% - 120px);
                   word-wrap: break-word;
+                  max-height: 130px;
+                  overflow-y: auto;
+                  white-space: pre-wrap;
                 }
               }
               .y1z2_1row1Full {
                 width: 100%;
+                .y1z2_1r12 {
+                  max-height: 1000px;
+                }
               }
             }
           }

+ 3 - 11
src/pages/Y_goodsDetails/Y2look/Y33setType.tsx

@@ -3,7 +3,6 @@ import styles from './index.module.scss'
 import { Button, Cascader, Form, FormInstance, Modal, Select } from 'antd'
 import { Y33BtnArr } from '../Y1cathet/data'
 import MyPopconfirm from '@/components/MyPopconfirm'
-import { Z1_APIgetDictZhi } from '@/store/action/Z1dict'
 import { TypeZ1dict } from '@/pages/Z_system/Z1dict/type'
 
 type Props = {
@@ -12,20 +11,13 @@ type Props = {
 }
 
 function Y33setType({ info, closeFu }: Props) {
-  const getTreeFu = useCallback(async () => {
-    const res = await Z1_APIgetDictZhi('12013')
-    if (res.code === 0) {
-      setTreeArr(res.data)
-    }
-  }, [])
-
-  useEffect(() => {
-    getTreeFu()
-  }, [getTreeFu])
+  // 待完善 获取用途树-后面统一写一个函数从总数据里面拿
 
   const [treeArr, setTreeArr] = useState<TypeZ1dict[]>([])
 
   useEffect(() => {
+    console.log('待完善', setTreeArr)
+
     if (info.flag === '单个') {
       FormBoxRef.current?.setFieldsValue({
         aaaa: info.leiXin

+ 0 - 1
src/pages/Y_goodsDetails/Y2look/data.ts

@@ -1 +0,0 @@
-export const a = ''

+ 9 - 0
src/pages/Y_goodsDetails/Y2look/index.module.scss

@@ -83,6 +83,9 @@
         .Y1rowrr {
           width: calc(100% - 120px);
           word-wrap: break-word;
+          max-height: 130px;
+          overflow-y: auto;
+          white-space: pre-wrap;
         }
       }
 
@@ -129,10 +132,16 @@
               .y1z2_1r12 {
                 width: calc(100% - 120px);
                 word-wrap: break-word;
+                max-height: 130px;
+                overflow-y: auto;
+                white-space: pre-wrap;
               }
             }
             .y1z2_1row1Full {
               width: 100%;
+              .y1z2_1r12 {
+                max-height: 1000px;
+              }
             }
           }
         }

+ 21 - 8
src/utils/tableData.ts

@@ -29,6 +29,14 @@ export const B3eTableC = [
 ]
 
 // 待完善
+export const B3FtableC = [
+  ['txt', '节点名称', 'description'],
+  ['txt', '提交日期', 'description'],
+  ['txt', '处理人', 'description'],
+  ['txt', '审批结果', 'description']
+]
+
+// 待完善
 export const D1GtableC = [
   ['img', '封面图', 'thumb'],
   ['txt', '藏品编号', 'userName'],
@@ -85,15 +93,20 @@ export const Y22tableC = [
 ]
 
 // 待完善
-export const Y33tableC = [
-  ['txt', '附件类型', 'type'],
-  ['txt', '附件名称', 'description'],
-  ['txt', '用途', 'description'],
-  ['txt', '上传日期', 'description'],
-  ['txt', '上传人', 'description'],
-  ['txt', '文件大小', 'description']
-]
+export const Y33tableC = (type: '详情' | '新增') => {
+  let arr1 = [
+    ['txt', '附件类型', 'type'],
+    ['txt', '用途', 'description']
+  ]
 
+  const arr2 = [
+    ['txt', '附件名称', 'description'],
+    ['txt', '附件大小', 'description'],
+    ['txt', '上传日期', 'description'],
+    ['txt', '上传人', 'description']
+  ]
+  return type === '详情' ? [...arr1, ...arr2] : arr2
+}
 // 待完善
 export const Y44tableC = [
   ['txt', '业务类型', 'xxxx'],