shaogen1995 před 8 měsíci
rodič
revize
daca12fc7c

+ 4 - 4
后台管理/.prettierrc.js

@@ -1,11 +1,11 @@
 module.exports = {
-  printWidth: 100, // 一行的字符数,如果超过会进行换行
+  printWidth: 90, // 一行的字符数,如果超过会进行换行
   tabWidth: 2, // 一个tab代表几个空格数,默认就是2
   useTabs: false, // 是否启用tab取代空格符缩进,.editorconfig设置空格缩进,所以设置为false
   semi: false, // 行尾是否使用分号,默认为true
   singleQuote: true, // 字符串是否使用单引号
-  trailingComma: "none", // 对象或数组末尾是否添加逗号 none| es5| all
+  trailingComma: 'none', // 对象或数组末尾是否添加逗号 none| es5| all
   jsxSingleQuote: true, // 在jsx里是否使用单引号,你看着办
   bracketSpacing: true, // 对象大括号直接是否有空格,默认为true,效果:{ foo: bar }
-  arrowParens: "avoid", // 箭头函数如果只有一个参数则省略括号
-};
+  arrowParens: 'avoid' // 箭头函数如果只有一个参数则省略括号
+}

+ 17 - 5
后台管理/src/pages/A2orderSet/index.tsx

@@ -18,7 +18,10 @@ import A2template from './A2template'
 
 function A2orderSet() {
   // 1111111-------------第一个表格相关--------开始
-  const [list, setList] = useState<A2listType[]>([])
+  const [list, setList] = useState<A2listType[]>([
+    { id: 1, time: 'am' } as A2listType,
+    { id: 2 } as A2listType
+  ])
 
   const getList = useCallback(async () => {
     const res = await A2_APIgeiList()
@@ -52,7 +55,11 @@ function A2orderSet() {
             }}
             className='A2tabCli'
           >
-            {item[v.key as 'monday'] ? '可预约' : '不可预约'}
+            {item[v.key as 'monday'] === 1
+              ? '可预约'
+              : item[v.key as 'monday'] === 0
+              ? '不可预约'
+              : ''}
           </span>
         )
       })
@@ -71,7 +78,10 @@ function A2orderSet() {
   const changeTimeFlagFu = useCallback(
     async (val: 0 | 1 | null) => {
       if (val !== null) {
-        const res = await A2_APIedit({ ...keTimeRef.current, [keTimeRef.current.myKey]: val })
+        const res = await A2_APIedit({
+          ...keTimeRef.current,
+          [keTimeRef.current.myKey]: val
+        })
 
         if (res.code === 0) {
           MessageFu.success('修改成功!')
@@ -86,7 +96,7 @@ function A2orderSet() {
   // 11111111-1------------第一个表格相关----结束
 
   // 222222222-------------第二个表格---------开始
-  const [noList, setNoList] = useState<A2NolistType[]>([])
+  const [noList, setNoList] = useState<A2NolistType[]>([{ id: '1', time: '' }])
 
   const getNoListFu = useCallback(async () => {
     const res = await A2_APIgetConfig('cms/book/config/get', 10)
@@ -178,7 +188,9 @@ function A2orderSet() {
       </div>
 
       {/* 可预约-不可预约设置 */}
-      {keTime.time ? <A2timeFlag info={keTime} closeFu={val => changeTimeFlagFu(val)} /> : null}
+      {keTime.time ? (
+        <A2timeFlag info={keTime} closeFu={val => changeTimeFlagFu(val)} />
+      ) : null}
 
       {/* 不可预约日期设置 */}
       {noTxt ? (

+ 118 - 0
后台管理/src/pages/A4proveSuo/A4main/A4auth.tsx

@@ -0,0 +1,118 @@
+import React, { useCallback, useState } from 'react'
+import styles from './index.module.scss'
+import { Button, Modal } from 'antd'
+import MyPopconfirm from '@/components/MyPopconfirm'
+import { MessageFu } from '@/utils/message'
+import { DownloadOutlined } from '@ant-design/icons'
+
+type Props = {
+  sId: number
+  closeFu: () => void
+  editTableFu: () => void
+}
+
+const fileArr = [
+  {
+    id: 1,
+    name: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.pdf',
+    filePath: '/favicon.ico'
+  },
+  {
+    id: 2,
+    name: 'xxxxxxxxxxxxxx.pdf',
+    filePath: '/favicon.ico'
+  },
+  {
+    id: 3,
+    name: 'xxxxxxxxxxxxxx.pdf',
+    filePath: '/favicon.ico'
+  }
+]
+
+export const btnArr = [
+  {
+    value: 0,
+    label: '待审核'
+  },
+  {
+    value: 1,
+    label: '审核通过'
+  },
+  {
+    value: 2,
+    label: '已拒绝'
+  }
+]
+
+function A4auth({ sId, closeFu, editTableFu }: Props) {
+  const [btnAc, setBtnAc] = useState(-1)
+
+  // 点击提交
+  const btnOk = useCallback(() => {
+    MessageFu.success('审核成功!')
+    editTableFu()
+    closeFu()
+  }, [closeFu, editTableFu])
+
+  return (
+    <Modal
+      wrapClassName={styles.A4auth}
+      open={true}
+      title='审核'
+      footer={
+        [] // 设置footer为空,去掉 取消 确定默认按钮
+      }
+    >
+      <div className='A4Arow'>
+        <div className='A4Arowll'>授权或同意文件:</div>
+        {fileArr.length ? (
+          <div className='A4Arowrr A4Arowrr0'>
+            {fileArr.map(item => (
+              <div className='A4Arowrr1Down' title={item.name}>
+                <a
+                  key={item.id}
+                  href={item.filePath}
+                  target='_blank'
+                  rel='noopener noreferrer'
+                  download={item.name}
+                >
+                  <DownloadOutlined />
+                </a>
+                <div>{item.name}</div>
+              </div>
+            ))}
+          </div>
+        ) : (
+          <div className='A4ArowrrNo'>(空)</div>
+        )}
+      </div>
+
+      <div className='A4Arow'>
+        <div className='A4Arowll'>审核状态:</div>
+        <div className='A4Arowrr'>
+          {btnArr.map(item => (
+            <Button
+              key={item.value}
+              type={btnAc === item.value ? 'primary' : 'default'}
+              onClick={() => setBtnAc(item.value)}
+            >
+              {item.label}
+            </Button>
+          ))}
+        </div>
+      </div>
+
+      <div className='A4Abtn'>
+        <MyPopconfirm txtK='取消' onConfirm={closeFu} />
+        &emsp;
+        <Button type='primary' onClick={btnOk}>
+          提交
+        </Button>
+      </div>
+    </Modal>
+  )
+}
+
+const MemoA4auth = React.memo(A4auth)
+
+export default MemoA4auth

+ 67 - 0
后台管理/src/pages/A4proveSuo/A4main/index.module.scss

@@ -0,0 +1,67 @@
+.A4main {
+  background-color: #fff;
+  border-radius: 10px;
+}
+
+// 审核页面的弹窗
+.A4auth {
+  :global {
+    .ant-modal-close {
+      display: none;
+    }
+    .ant-modal {
+      width: 800px !important;
+    }
+    .ant-modal-body {
+      border-top: 1px solid #ccc;
+      padding-top: 15px !important;
+      font-size: 16px !important;
+
+      .A4Arow {
+        margin-bottom: 30px;
+        display: flex;
+        .A4Arowll {
+          position: relative;
+          top: 3px;
+          width: 130px;
+          text-align: right;
+        }
+
+        .A4Arowrr0 {
+          .A4Arowrr1Down {
+            display: flex;
+            & > a {
+              font-size: 20px;
+            }
+            & > div {
+              position: relative;
+              top: 3px;
+              margin-left: 10px;
+              font-size: 18px;
+              width: calc(100% - 40px);
+              overflow: hidden;
+              text-overflow: ellipsis;
+              white-space: nowrap;
+            }
+          }
+        }
+
+        .A4Arowrr {
+          width: calc(100% - 140px);
+
+          .ant-btn {
+            margin-right: 20px;
+          }
+        }
+        .A4ArowrrNo {
+          position: relative;
+          top: 3px;
+        }
+      }
+    }
+    .A4Abtn {
+      margin-top: 24px;
+      text-align: center;
+    }
+  }
+}

+ 92 - 0
后台管理/src/pages/A4proveSuo/A4main/index.tsx

@@ -0,0 +1,92 @@
+import React, { useCallback, useEffect, useMemo, useState } from 'react'
+import styles from './index.module.scss'
+import { useDispatch, useSelector } from 'react-redux'
+import { A4_APIdel, A4_APIgetList } from '@/store/action/A4proveSuo'
+import MyTable from '@/components/MyTable'
+import { RootState } from '@/store'
+import { A4tableType } from '../type'
+import { Button } from 'antd'
+import MyPopconfirm from '@/components/MyPopconfirm'
+import { MessageFu } from '@/utils/message'
+import { A4tableC } from '@/utils/tableData'
+import A4auth from './A4auth'
+
+// 待完善
+
+type Props = {
+  type: 'live' | 'neighbour'
+}
+
+function A4main({ type }: Props) {
+  const dispatch = useDispatch()
+
+  const [fromData, setFromData] = useState({ pageNum: 1, pageSize: 10 })
+
+  const getListFu = useCallback(() => {
+    dispatch(A4_APIgetList(fromData, type))
+  }, [dispatch, fromData, type])
+
+  useEffect(() => {
+    getListFu()
+  }, [getListFu])
+
+  const { tableInfo1, tableInfo2 } = useSelector((state: RootState) => state.A4proveSuo)
+
+  const delTableFu = useCallback(
+    async (id: number) => {
+      const res = await A4_APIdel(id)
+      if (res.code === 0) {
+        MessageFu.success('删除成功!')
+        getListFu()
+      }
+    },
+    [getListFu]
+  )
+
+  const tableLastBtn = useMemo(() => {
+    return [
+      {
+        title: '操作',
+        render: (item: A4tableType) => (
+          <>
+            <Button size='small' type='text'>
+              审核
+            </Button>
+
+            <MyPopconfirm txtK='删除' onConfirm={() => delTableFu(item.id)} />
+          </>
+        )
+      }
+    ]
+  }, [delTableFu])
+
+  // 点击审核
+  const [authId, setAuthId] = useState(0)
+
+  return (
+    <div className={styles.A4main}>
+      <div className='pageTitle' onClick={() => setAuthId(1)}>
+        团队认证({type === 'live' ? '民生事务局' : '街坊会联合总会'})
+      </div>
+      <MyTable
+        yHeight={700}
+        list={type === 'live' ? tableInfo1.list : tableInfo2.list}
+        columnsTemp={A4tableC}
+        lastBtn={tableLastBtn}
+        pageNum={fromData.pageNum}
+        pageSize={fromData.pageSize}
+        total={type === 'live' ? tableInfo1.total : tableInfo2.total}
+        onChange={(pageNum, pageSize) => setFromData({ ...fromData, pageNum, pageSize })}
+      />
+
+      {/* 点击审核 */}
+      {authId ? (
+        <A4auth sId={authId} closeFu={() => setAuthId(0)} editTableFu={getListFu} />
+      ) : null}
+    </div>
+  )
+}
+
+const MemoA4main = React.memo(A4main)
+
+export default MemoA4main

+ 0 - 4
后台管理/src/pages/A4proveSuo/index.module.scss

@@ -1,4 +0,0 @@
-.A4proveSuo {
-  :global {
-  }
-}

+ 2 - 6
后台管理/src/pages/A4proveSuo/index.tsx

@@ -1,11 +1,7 @@
 import React from 'react'
-import styles from './index.module.scss'
+import A4main from './A4main'
 function A4proveSuo() {
-  return (
-    <div className={styles.A4proveSuo}>
-      <h1>A4proveSuo</h1>
-    </div>
-  )
+  return <A4main type='live' />
 }
 
 const MemoA4proveSuo = React.memo(A4proveSuo)

+ 2 - 0
后台管理/src/pages/A4proveSuo/type.d.ts

@@ -0,0 +1,2 @@
+export type A4tableType = any
+// 待完善

+ 0 - 4
后台管理/src/pages/A5proveHui/index.module.scss

@@ -1,4 +0,0 @@
-.A5proveHui {
-  :global {
-  }
-}

+ 2 - 6
后台管理/src/pages/A5proveHui/index.tsx

@@ -1,11 +1,7 @@
 import React from 'react'
-import styles from './index.module.scss'
+import A4main from '../A4proveSuo/A4main'
 function A5proveHui() {
-  return (
-    <div className={styles.A5proveHui}>
-      <h1>A5proveHui</h1>
-    </div>
-  )
+  return <A4main type='neighbour' />
 }
 
 const MemoA5proveHui = React.memo(A5proveHui)

+ 71 - 0
后台管理/src/pages/A6record/A6auth.tsx

@@ -0,0 +1,71 @@
+import React, { useCallback, useEffect, useState } from 'react'
+import styles from './index.module.scss'
+import { Button, Modal } from 'antd'
+import { btnArr } from '../A4proveSuo/A4main/A4auth'
+import MyPopconfirm from '@/components/MyPopconfirm'
+import { MessageFu } from '@/utils/message'
+import { A6_APIauth } from '@/store/action/A6record'
+
+type Props = {
+  sId: number
+  status: number
+  closeFu: () => void
+  editTableFu: () => void
+}
+
+function A6auth({ sId, closeFu, editTableFu, status }: Props) {
+  const [btnAc, setBtnAc] = useState(-1)
+
+  useEffect(() => {
+    setBtnAc(status)
+  }, [status])
+
+  // 点击提交
+  const btnOk = useCallback(async () => {
+    const res = await A6_APIauth(sId, btnAc)
+
+    if (res.code === 0) {
+      MessageFu.success('审核成功!')
+      editTableFu()
+      closeFu()
+    }
+  }, [btnAc, closeFu, editTableFu, sId])
+
+  return (
+    <Modal
+      wrapClassName={styles.A6auth}
+      open={true}
+      title='审核'
+      footer={
+        [] // 设置footer为空,去掉 取消 确定默认按钮
+      }
+    >
+      <div className='A6Arow'>
+        <div className='A6Arowll'>审核状态:</div>
+        <div className='A6Arowrr'>
+          {btnArr.map(item => (
+            <Button
+              key={item.value}
+              type={btnAc === item.value ? 'primary' : 'default'}
+              onClick={() => setBtnAc(item.value)}
+            >
+              {item.label}
+            </Button>
+          ))}
+        </div>
+      </div>
+
+      <div className='A6Abtn'>
+        <MyPopconfirm txtK='取消' onConfirm={closeFu} />
+        &emsp;
+        <Button type='primary' onClick={btnOk}>
+          提交
+        </Button>
+      </div>
+    </Modal>
+  )
+}
+
+const MemoA6auth = React.memo(A6auth)
+
+export default MemoA6auth

+ 38 - 0
后台管理/src/pages/A6record/index.module.scss

@@ -1,4 +1,42 @@
 .A6record {
+  background-color: #fff;
+  border-radius: 10px;
+}
+
+// 审核页面的弹窗
+.A6auth {
   :global {
+    .ant-modal-close {
+      display: none;
+    }
+
+    .ant-modal-body {
+      border-top: 1px solid #ccc;
+      padding-top: 15px !important;
+      font-size: 16px !important;
+
+      .A6Arow {
+        margin-bottom: 30px;
+        display: flex;
+        .A6Arowll {
+          position: relative;
+          top: 3px;
+          width: 130px;
+          text-align: right;
+        }
+
+        .A6Arowrr {
+          width: calc(100% - 140px);
+
+          .ant-btn {
+            margin-right: 20px;
+          }
+        }
+      }
+    }
+    .A6Abtn {
+      margin-top: 24px;
+      text-align: center;
+    }
   }
 }

+ 90 - 2
后台管理/src/pages/A6record/index.tsx

@@ -1,9 +1,97 @@
-import React from 'react'
+import React, { useCallback, useEffect, useMemo, useState } from 'react'
 import styles from './index.module.scss'
+import { useDispatch, useSelector } from 'react-redux'
+import { A6_APIdel, A6_APIgetList } from '@/store/action/A6record'
+import { RootState } from '@/store'
+import { MessageFu } from '@/utils/message'
+import { A6tableType } from './type'
+import { Button } from 'antd'
+import MyPopconfirm from '@/components/MyPopconfirm'
+import MyTable from '@/components/MyTable'
+import { A6tableC } from '@/utils/tableData'
+import A6auth from './A6auth'
 function A6record() {
+  const dispatch = useDispatch()
+
+  const [fromData, setFromData] = useState({ pageNum: 1, pageSize: 10 })
+
+  const getListFu = useCallback(() => {
+    dispatch(A6_APIgetList(fromData))
+  }, [dispatch, fromData])
+
+  useEffect(() => {
+    getListFu()
+  }, [getListFu])
+
+  const { tableInfo } = useSelector((state: RootState) => state.A6record)
+
+  const delTableFu = useCallback(
+    async (id: number) => {
+      const res = await A6_APIdel(id)
+      if (res.code === 0) {
+        MessageFu.success('删除成功!')
+        getListFu()
+      }
+    },
+    [getListFu]
+  )
+
+  const tableLastBtn = useMemo(() => {
+    return [
+      {
+        title: '操作',
+        render: (item: A6tableType) => (
+          <>
+            <Button
+              size='small'
+              type='text'
+              onClick={() =>
+                setAuthId({
+                  id: item.id,
+                  status: item.status
+                })
+              }
+            >
+              审核
+            </Button>
+
+            <MyPopconfirm txtK='删除' onConfirm={() => delTableFu(item.id)} />
+          </>
+        )
+      }
+    ]
+  }, [delTableFu])
+
+  // 点击审核
+  const [authId, setAuthId] = useState({
+    id: 0,
+    status: 0
+  })
+
   return (
     <div className={styles.A6record}>
-      <h1>A6record</h1>
+      <div className='pageTitle'>课程预约记录</div>
+
+      <MyTable
+        yHeight={680}
+        list={tableInfo.list}
+        columnsTemp={A6tableC}
+        lastBtn={tableLastBtn}
+        pageNum={fromData.pageNum}
+        pageSize={fromData.pageSize}
+        total={tableInfo.total}
+        onChange={(pageNum, pageSize) => setFromData({ ...fromData, pageNum, pageSize })}
+      />
+
+      {/* 点击审核 */}
+      {authId.id ? (
+        <A6auth
+          sId={authId.id}
+          status={authId.status}
+          closeFu={() => setAuthId({ id: 0, status: 0 })}
+          editTableFu={getListFu}
+        />
+      ) : null}
     </div>
   )
 }

+ 16 - 0
后台管理/src/pages/A6record/type.d.ts

@@ -0,0 +1,16 @@
+export type A6tableType = {
+  bookDate: string
+  bookTime: string
+  createTime: string
+  creatorName: string
+  fileIds: string
+  id: number
+  identity: string
+  name: string
+  phone: string
+  remark: string
+  subjectName: string
+  unit: string
+  updateTime: string
+  status: number
+}

+ 99 - 0
后台管理/src/pages/B2exhiLog/B2look.tsx

@@ -0,0 +1,99 @@
+import React, { useCallback, useEffect } from 'react'
+import styles from './index.module.scss'
+import { Button, Modal } from 'antd'
+import { B2_APIgetInfo } from '@/store/action/B2exhiLog'
+
+type Props = {
+  sId: number
+  closeFu: () => void
+}
+
+const arr = [
+  {
+    id: 1,
+    name: '啊萨达萨达是',
+    phone: '18702025050',
+    identity: '421083199504071212'
+  },
+  {
+    id: 2,
+    name: '王大锤',
+    phone: '18702025050',
+    identity: '421083199504071212'
+  },
+  {
+    id: 3,
+    name: '小溺😥',
+    phone: '18702025050',
+    identity: '421083199504071212'
+  }
+]
+
+function B2look({ sId, closeFu }: Props) {
+  const getInfoFu = useCallback(async (id: number) => {
+    const res = await B2_APIgetInfo(id)
+    if (res.code === 0) {
+      // 待完善 接口数据不明确
+      console.log(123, res)
+    }
+  }, [])
+
+  useEffect(() => {
+    getInfoFu(sId)
+  }, [getInfoFu, sId])
+
+  return (
+    <Modal
+      wrapClassName={styles.B2look}
+      open={true}
+      title='查看'
+      footer={
+        [] // 设置footer为空,去掉 取消 确定默认按钮
+      }
+    >
+      <div className='B2row'>
+        <div className='B2box'>
+          <div className='B2boxll'>申请时间:</div>
+          <div className='B2boxrr'>2024-10-30 09:59:05</div>
+        </div>
+        {/* 待完善 */}
+        {/* <div className='B2box'>验证状态:</div> */}
+        <div className='B2box'>
+          <div className='B2boxll'>预约日期:</div>
+          <div className='B2boxrr'>2024-10-30</div>
+        </div>
+
+        <div className='B2box'>
+          <div className='B2boxll'>预约时段:</div>
+          <div className='B2boxrr'>08:00-09:00</div>
+        </div>
+        <br />
+      </div>
+
+      {arr.map(item => (
+        <div className='B2row' key={item.id}>
+          <div className='B2box'>
+            <div className='B2boxll'>参观人姓名:</div>
+            <div className='B2boxrr'>{item.name}</div>
+          </div>
+          <div className='B2box'>
+            <div className='B2boxll'>参观人电话:</div>
+            <div className='B2boxrr'>{item.phone}</div>
+          </div>
+          <div className='B2box'>
+            <div className='B2boxll'>身份证号:</div>
+            <div className='B2boxrr'>{item.identity}</div>
+          </div>
+        </div>
+      ))}
+
+      <div className='B2Lbtn'>
+        <Button onClick={closeFu}>关闭</Button>
+      </div>
+    </Modal>
+  )
+}
+
+const MemoB2look = React.memo(B2look)
+
+export default MemoB2look

+ 38 - 0
后台管理/src/pages/B2exhiLog/index.module.scss

@@ -1,4 +1,42 @@
 .B2exhiLog {
+  background-color: #fff;
+  border-radius: 10px;
+}
+
+// 查看页面弹窗
+.B2look {
   :global {
+    .ant-modal-close {
+      display: none;
+    }
+    .ant-modal {
+      width: 800px !important;
+    }
+
+    .ant-modal-body {
+      border-top: 1px solid #ccc;
+      font-size: 16px !important;
+
+      .B2row {
+        padding: 10px 0;
+        border-bottom: 1px solid #ccc;
+      }
+
+      .B2box {
+        display: flex;
+        margin-bottom: 5px;
+        .B2boxll {
+          font-weight: 700;
+          width: 100px;
+        }
+        .B2boxrr {
+          width: calc(100% - 100px);
+        }
+      }
+    }
+    .B2Lbtn {
+      margin-top: 24px;
+      text-align: center;
+    }
   }
 }

+ 71 - 2
后台管理/src/pages/B2exhiLog/index.tsx

@@ -1,9 +1,78 @@
-import React from 'react'
+import React, { useCallback, useEffect, useMemo, useState } from 'react'
 import styles from './index.module.scss'
+import { useDispatch, useSelector } from 'react-redux'
+import { B2_APIdel, B2_APIgetList } from '@/store/action/B2exhiLog'
+import { RootState } from '@/store'
+import { MessageFu } from '@/utils/message'
+import { B2tableType } from './type'
+import { Button } from 'antd'
+import MyPopconfirm from '@/components/MyPopconfirm'
+import MyTable from '@/components/MyTable'
+import { B2tableC } from '@/utils/tableData'
+import B2look from './B2look'
 function B2exhiLog() {
+  const dispatch = useDispatch()
+
+  const [fromData, setFromData] = useState({ pageNum: 1, pageSize: 10 })
+
+  const getListFu = useCallback(() => {
+    dispatch(B2_APIgetList(fromData))
+  }, [dispatch, fromData])
+
+  useEffect(() => {
+    getListFu()
+  }, [getListFu])
+
+  const { tableInfo } = useSelector((state: RootState) => state.B2exhiLog)
+
+  const delTableFu = useCallback(
+    async (id: number) => {
+      const res = await B2_APIdel(id)
+      if (res.code === 0) {
+        MessageFu.success('删除成功!')
+        getListFu()
+      }
+    },
+    [getListFu]
+  )
+
+  const tableLastBtn = useMemo(() => {
+    return [
+      {
+        title: '操作',
+        render: (item: B2tableType) => (
+          <>
+            <Button size='small' type='text' onClick={() => setLookId(item.id)}>
+              查看
+            </Button>
+
+            <MyPopconfirm txtK='删除' onConfirm={() => delTableFu(item.id)} />
+          </>
+        )
+      }
+    ]
+  }, [delTableFu])
+
+  // 点击查看
+  const [lookId, setLookId] = useState(0)
+
   return (
     <div className={styles.B2exhiLog}>
-      <h1>B2exhiLog</h1>
+      <div className='pageTitle'>展馆预约记录</div>
+
+      <MyTable
+        yHeight={700}
+        list={tableInfo.list}
+        columnsTemp={B2tableC}
+        lastBtn={tableLastBtn}
+        pageNum={fromData.pageNum}
+        pageSize={fromData.pageSize}
+        total={tableInfo.total}
+        onChange={(pageNum, pageSize) => setFromData({ ...fromData, pageNum, pageSize })}
+      />
+
+      {/* 点击查看 */}
+      {lookId ? <B2look sId={lookId} closeFu={() => setLookId(0)} /> : null}
     </div>
   )
 }

+ 14 - 0
后台管理/src/pages/B2exhiLog/type.d.ts

@@ -0,0 +1,14 @@
+export type B2tableType = {
+  bookDate: string
+  bookId: string
+  createTime: string
+  creatorName: string
+  id: number
+  name: string
+  pcs: number
+  phone: string
+  rtf: string
+  status: number
+  time: string
+  updateTime: string
+}

+ 40 - 0
后台管理/src/store/action/A4proveSuo.ts

@@ -0,0 +1,40 @@
+import http from '@/utils/http'
+import { AppDispatch } from '..'
+
+/**
+ * 团队认证-列表
+ */
+
+export const A4_APIgetList = (data: any, type: 'live' | 'neighbour'): any => {
+  return async (dispatch: AppDispatch) => {
+    const res = await http.post('cms/auth/pageList', { ...data, type })
+    if (res.code === 0) {
+      const obj = {
+        list: res.data.records,
+        total: res.data.total
+      }
+      dispatch({ type: type === 'live' ? 'A4/getList1' : 'A4/getList2', payload: obj })
+    }
+  }
+}
+
+/**
+ * 团队认证-删除
+ */
+export const A4_APIdel = (id: number) => {
+  return http.get(`cms/auth/removes/${id}`)
+}
+
+/**
+ * 团队认证-详情
+ */
+export const A4_APIgetInfo = (id: number) => {
+  return http.get(`cms/auth/detail/${id}`)
+}
+
+/**
+ * 团队认证-审核
+ */
+export const A4_APIauth = (id: number, status: number) => {
+  return http.get(`cms/auth/update/${id}/${status}`)
+}

+ 37 - 0
后台管理/src/store/action/A6record.ts

@@ -0,0 +1,37 @@
+import http from '@/utils/http'
+import { AppDispatch } from '..'
+
+/**
+ * 课程预约记录-列表
+ */
+
+export const A6_APIgetList = (data: any): any => {
+  return async (dispatch: AppDispatch) => {
+    const res = await http.post('cms/apply/pageList', data)
+    if (res.code === 0) {
+      console.log(123, res)
+
+      // 待完善 多封装了一层data
+
+      const obj = {
+        list: res.data.data.records,
+        total: res.data.data.total
+      }
+      dispatch({ type: 'A6/getList', payload: obj })
+    }
+  }
+}
+
+/**
+ * 课程预约记录-删除
+ */
+export const A6_APIdel = (id: number) => {
+  return http.get(`cms/apply/removes/${id}`)
+}
+
+/**
+ * 课程预约记录-审核
+ */
+export const A6_APIauth = (id: number, status: number) => {
+  return http.get(`cms/apply/update/${id}/${status}`)
+}

+ 33 - 0
后台管理/src/store/action/B2exhiLog.ts

@@ -0,0 +1,33 @@
+import http from '@/utils/http'
+import { AppDispatch } from '..'
+
+/**
+ * 团队认证-列表
+ */
+
+export const B2_APIgetList = (data: any): any => {
+  return async (dispatch: AppDispatch) => {
+    const res = await http.post('cms/applyExhibition/pageList', data)
+    if (res.code === 0) {
+      const obj = {
+        list: res.data.records,
+        total: res.data.total
+      }
+      dispatch({ type: 'B2/getList', payload: obj })
+    }
+  }
+}
+
+/**
+ * 团队认证-删除
+ */
+export const B2_APIdel = (id: number) => {
+  return http.get(`cms/applyExhibition/removes/${id}`)
+}
+
+/**
+ * 团队认证-详情
+ */
+export const B2_APIgetInfo = (id: number) => {
+  return http.get(`cms/applyExhibition/detail/${id}`)
+}

+ 38 - 0
后台管理/src/store/reducer/A4proveSuo.ts

@@ -0,0 +1,38 @@
+import { A4tableType } from '@/pages/A4proveSuo/type'
+
+// 初始化状态
+const initState = {
+  // 列表数据
+  tableInfo1: {
+    list: [] as A4tableType[],
+    total: 0
+  },
+  tableInfo2: {
+    list: [] as A4tableType[],
+    total: 0
+  }
+}
+
+// 定义 action 类型
+type Props =
+  | {
+      type: 'A4/getList1'
+      payload: { list: A4tableType[]; total: number }
+    }
+  | {
+      type: 'A4/getList2'
+      payload: { list: A4tableType[]; total: number }
+    }
+
+// reducer
+export default function Reducer(state = initState, action: Props) {
+  switch (action.type) {
+    // 获取列表数据
+    case 'A4/getList1':
+      return { ...state, tableInfo1: action.payload }
+    case 'A4/getList2':
+      return { ...state, tableInfo2: action.payload }
+    default:
+      return state
+  }
+}

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

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

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

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

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

@@ -4,7 +4,10 @@ import { combineReducers } from 'redux'
 // 导入 登录 模块的 reducer
 import A0Layout from './layout'
 import A3course from './A3course'
+import A4proveSuo from './A4proveSuo'
+import A6record from './A6record'
 import B1exhibit from './B1exhibit'
+import B2exhiLog from './B2exhiLog'
 import Z1user from './Z1user'
 import Z2log from './Z2log'
 
@@ -12,7 +15,10 @@ import Z2log from './Z2log'
 const rootReducer = combineReducers({
   A0Layout,
   A3course,
+  A4proveSuo,
+  A6record,
   B1exhibit,
+  B2exhiLog,
   Z1user,
   Z2log
 })

+ 47 - 0
后台管理/src/utils/tableData.ts

@@ -36,6 +36,53 @@ export const A3tableCtype = [
   ['txt', '排序值', 'sort']
 ]
 
+export const A4tableC = [
+  ['txt', '负责人姓名', 'name'],
+  ['txt', '联系方式', 'sort'],
+  ['txt', '单位名称', 'unit'],
+  [
+    'txtChange',
+    '审核状态',
+    'status',
+    { 0: '待审核 ', 1: '审核通过', 2: '已拒绝', 3: '已失效' }
+  ],
+  ['txt', '申请时间', 'createTime']
+]
+
+export const A6tableC = [
+  ['txt', '预约日期', 'bookDate'],
+  [
+    'txtChange',
+    '预约时段',
+    'bookTime',
+    { am: '上午', pm: '下午', 2: '已拒绝', 3: '已失效' }
+  ],
+  ['txt', '预约课程', 'subjectName'],
+  ['txt', '	负责人姓名', 'name'],
+  ['txt', '	联系方式', 'phone'],
+  ['txt', '	身份证号', 'identity'],
+  ['txt', '	参团学生人数', 'pcsStudent'],
+  ['txt', '	随堂老师人数', 'pcsTeacher'],
+  ['txt', '	所属机构', 'unit'],
+  ['text', '团体描述', 'remark', 50],
+  [
+    'txtChange',
+    '审核状态',
+    'status',
+    { 0: '待审核', 1: '审核通过', 2: '已拒绝', 3: '已失效' }
+  ],
+  ['txt', '申请时间', 'createTime']
+]
+
+export const B2tableC = [
+  ['txt', '申请时间', 'createTime'],
+  ['txt', '姓名', 'name'],
+  ['txt', '联系电话', 'phone'],
+  ['txt', '人数', 'pcs'],
+  ['txt', '预约日期', 'bookDate'],
+  ['txt', '预约时段', 'time']
+]
+
 export const Z1tableC = [
   ['txt', '用户名', 'userName'],
   ['txtChange', '角色', 'isAdmin', { 1: '管理员', 0: '普通成员' }],