浏览代码

业务中心

shaogen1995 2 月之前
父节点
当前提交
184f883802

+ 59 - 0
src/pages/A_workbench/A2business/A2setStock/index.module.scss

@@ -0,0 +1,59 @@
+.A2setStock {
+  :global {
+    .ant-modal-close {
+      display: none;
+    }
+    .ant-modal {
+      width: 800px !important;
+    }
+    .ant-modal-body {
+      border-top: 1px solid #ccc;
+      .A2Smain {
+        margin-top: 20px;
+
+        .Z5eboxrr {
+          width: 100%;
+          .Z5eRow {
+            margin-bottom: 10px;
+            display: flex;
+
+            .Z5eRow1 {
+              width: 70px;
+              font-weight: 700;
+              text-align: right;
+              margin-right: 10px;
+            }
+
+            .Z5eRow2 {
+              width: calc(100% - 80px);
+            }
+          }
+
+          .Z5eErr {
+            margin-bottom: 20px;
+            text-align: center;
+            color: #ff4d4f;
+            opacity: 0;
+            pointer-events: none;
+            transition: all 0.3s;
+            position: relative;
+            top: -10px;
+          }
+
+          .Z5eErrAc {
+            opacity: 1;
+            top: 0;
+          }
+          .Z5eboxrr_1 {
+            margin-top: 5px;
+          }
+        }
+
+        .A2Sbtn {
+          margin-top: 20px;
+          text-align: center;
+        }
+      }
+    }
+  }
+}

+ 113 - 0
src/pages/A_workbench/A2business/A2setStock/index.tsx

@@ -0,0 +1,113 @@
+import React, { useCallback, useEffect, useMemo, useState } from 'react'
+import styles from './index.module.scss'
+import { Button, Checkbox, Modal } from 'antd'
+import MyPopconfirm from '@/components/MyPopconfirm'
+import classNmaes from 'classnames'
+import { A2_APIsetStock } from '@/store/action/A2business'
+import { MessageFu } from '@/utils/message'
+import { RouterType } from '@/types'
+
+type Props = {
+  sId: number
+  arr: RouterType
+  closeFu: () => void
+  succFu: () => void
+}
+
+function A2setStock({ arr, closeFu, succFu, sId }: Props) {
+  const [roleArr, setRoleArr] = useState<RouterType>([])
+
+  useEffect(() => {
+    setRoleArr(arr)
+  }, [arr])
+
+  // 多选框变化
+  const onChange = useCallback(
+    (val: boolean, id1: number, id2: number) => {
+      setRoleArr(
+        roleArr.map(v => ({
+          ...v,
+          son:
+            v.id === id1
+              ? v.son.map(c => ({
+                  ...c,
+                  authority: c.id === id2 ? val : c.authority
+                }))
+              : v.son
+        }))
+      )
+    },
+    [roleArr]
+  )
+
+  // 二级选中的数组id集合
+  const checkIds = useMemo(() => {
+    const arr: number[] = []
+    roleArr.forEach(v => {
+      v.son.forEach(c => {
+        if (c.authority) arr.push(c.id)
+      })
+    })
+    return arr
+  }, [roleArr])
+
+  // 点击提交
+  const btnOk = useCallback(async () => {
+    const res = await A2_APIsetStock(sId, JSON.stringify(roleArr))
+    if (res.code === 0) {
+      MessageFu.success('设置成功')
+      succFu()
+      closeFu()
+    }
+  }, [closeFu, roleArr, sId, succFu])
+
+  return (
+    <Modal
+      wrapClassName={styles.A2setStock}
+      open={true}
+      title='常用功能'
+      footer={
+        [] // 设置footer为空,去掉 取消 确定默认按钮
+      }
+    >
+      <div className='A2Smain'>
+        <div className='Z5eboxrr'>
+          {roleArr.map(v => (
+            <div key={v.id} className='Z5eRow' hidden={v.son.length === 0}>
+              <div className='Z5eRow1'>{v.name}</div>
+              <div className='Z5eRow2'>
+                {v.son.map(c =>
+                  c.name === '业务中心' ? null : (
+                    <Checkbox
+                      key={c.id}
+                      checked={c.authority}
+                      onChange={e => onChange(e.target.checked, v.id, c.id)}
+                    >
+                      {c.name}
+                    </Checkbox>
+                  )
+                )}
+              </div>
+            </div>
+          ))}
+
+          <div className={classNmaes('Z5eErr', checkIds.length <= 0 ? 'Z5eErrAc' : '')}>
+            至少选中一个
+          </div>
+        </div>
+
+        <div className='A2Sbtn'>
+          <Button type='primary' disabled={checkIds.length <= 0} onClick={btnOk}>
+            提交
+          </Button>
+          &emsp;
+          <MyPopconfirm txtK='取消' onConfirm={closeFu} />
+        </div>
+      </div>
+    </Modal>
+  )
+}
+
+const MemoA2setStock = React.memo(A2setStock)
+
+export default MemoA2setStock

+ 28 - 0
src/pages/A_workbench/A2business/A2table/index.module.scss

@@ -0,0 +1,28 @@
+.A2table {
+  width: 100%;
+  padding: 20px;
+  background-color: #fff;
+  border-radius: 10px;
+  margin-top: 20px;
+
+  :global {
+    .A2Ttop {
+      display: flex;
+      justify-content: space-between;
+      margin-bottom: 15px;
+      .ant-select-selection-placeholder {
+        color: black;
+      }
+
+      .ant-btn {
+        margin-right: 15px;
+      }
+      .A2TtopRR {
+        display: flex;
+        & > div {
+          margin-left: 15px;
+        }
+      }
+    }
+  }
+}

+ 197 - 0
src/pages/A_workbench/A2business/A2table/index.tsx

@@ -0,0 +1,197 @@
+import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
+import styles from './index.module.scss'
+import { Button, DatePicker, Input, Select } from 'antd'
+import { A2_APIgetList } from '@/store/action/A2business'
+import { RouterTypeRow } from '@/types'
+import tabLeftArr from '@/pages/Layout/data'
+import dayjs from 'dayjs'
+import { selectObj } from '@/utils/select'
+import { LogListType } from '@/pages/Y_goodsDetails/Y1cathet/Y44com'
+import MyTable from '@/components/MyTable'
+import { A2tableC } from '@/utils/tableData'
+import { openGoodsInfoFu } from '@/utils/history'
+import { MessageFu } from '@/utils/message'
+
+const { RangePicker } = DatePicker
+
+const btnArr = [
+  { name: '我发起的', key: '1' },
+  { name: '待我审批', key: '2' },
+  { name: '抄送我的', key: '3' }
+]
+
+function A2table() {
+  // 路由信息过滤过来
+  const typePageArr = useMemo(() => {
+    const arr: RouterTypeRow[] = []
+    tabLeftArr.forEach(v1 => {
+      v1.son.forEach(v2 => {
+        if (v2.isLog) arr.push(v2)
+      })
+    })
+    return arr
+  }, [])
+
+  const [formData, setFormData] = useState({
+    pageNum: 1,
+    pageSize: 10,
+    name: '',
+    num: '',
+    startTime: '',
+    endTime: '',
+    status: '',
+    userType: '1'
+  })
+
+  const getListFu = useCallback(async () => {
+    const res = await A2_APIgetList(formData)
+    if (res.code === 0) {
+      setTableObj({ list: res.data.records || [], total: res.data.total })
+    }
+  }, [formData])
+
+  useEffect(() => {
+    getListFu()
+  }, [getListFu])
+
+  // 时间选择器改变
+  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 paginationChange = useCallback(
+    (pageNum: number, pageSize: number) => {
+      setFormData({ ...formData, pageNum, pageSize })
+    },
+    [formData]
+  )
+
+  // 输入框的输入
+  const timeRef = useRef(-1)
+  const txtChangeFu = useCallback(
+    (e: React.ChangeEvent<HTMLInputElement>, key: 'num') => {
+      clearTimeout(timeRef.current)
+      timeRef.current = window.setTimeout(() => {
+        setFormData({
+          ...formData,
+          [key]: e.target.value.replaceAll("'", ''),
+          pageNum: 1
+        })
+      }, 500)
+    },
+    [formData]
+  )
+
+  const [tableObj, setTableObj] = useState<{ list: LogListType[]; total: number }>({
+    list: [],
+    total: 0
+  })
+
+  // 点击查看 新窗口打开
+  const lookPage = useCallback(
+    (name: string, id: number) => {
+      const obj = typePageArr.find(v => v.name === name)
+      if (obj) openGoodsInfoFu(id, `#${obj.path}_edit/4/`)
+      else MessageFu.warning('业务类型错误')
+    },
+    [typePageArr]
+  )
+
+  const tableLastBtn = useMemo(() => {
+    return [
+      {
+        title: '操作',
+        render: (item: any) => {
+          return (
+            <Button size='small' type='text' onClick={() => lookPage(item.typeName, item.id)}>
+              查看
+            </Button>
+          )
+        }
+      }
+    ]
+  }, [lookPage])
+
+  return (
+    <div className={styles.A2table}>
+      <div className='A2Ttop'>
+        <div>
+          {btnArr.map(v => (
+            <Button
+              onClick={() => setFormData({ ...formData, userType: v.key, pageNum: 1 })}
+              key={v.key}
+              type={formData.userType === v.key ? 'primary' : 'default'}
+            >
+              {v.name}
+            </Button>
+          ))}
+        </div>
+        <div className='A2TtopRR'>
+          <div>
+            <span>业务类型:</span>
+            <Select
+              allowClear={true}
+              placeholder='全部'
+              style={{ width: 120 }}
+              value={formData.name ? formData.name : null}
+              onChange={e => setFormData({ ...formData, name: e, pageNum: 1 })}
+              options={typePageArr.map(v => ({ value: v.name, label: v.name }))}
+            />
+          </div>
+
+          <div>
+            <span>业务编号:</span>
+            <Input
+              style={{ width: 150 }}
+              placeholder='请输入业务编号'
+              maxLength={30}
+              onChange={e => txtChangeFu(e, 'num')}
+            />
+          </div>
+
+          <div>
+            <span>发起日期范围:</span>
+            <RangePicker style={{ width: 220 }} onChange={timeChange} />
+          </div>
+
+          <div>
+            <span>申请状态:</span>
+            <Select
+              allowClear={true}
+              placeholder='全部'
+              style={{ width: 120 }}
+              value={formData.status ? formData.status : null}
+              onChange={e => setFormData({ ...formData, status: e, pageNum: 1 })}
+              options={selectObj['申请状态'].filter(v => v.label !== '待盘点')}
+            />
+          </div>
+        </div>
+      </div>
+
+      {/* 表格 */}
+      <MyTable
+        list={tableObj.list}
+        columnsTemp={A2tableC}
+        lastBtn={tableLastBtn}
+        pageNum={formData.pageNum}
+        pageSize={formData.pageSize}
+        total={tableObj.total}
+        onChange={(pageNum, pageSize) => paginationChange(pageNum, pageSize)}
+      />
+    </div>
+  )
+}
+
+const MemoA2table = React.memo(A2table)
+
+export default MemoA2table

+ 14 - 64
src/pages/A_workbench/A2business/index.module.scss

@@ -11,6 +11,18 @@
       align-items: center;
       justify-content: space-between;
       margin-bottom: 10px;
+      position: relative;
+      padding-left: 16px;
+      &::before {
+        content: '';
+        position: absolute;
+        top: 48%;
+        left: 0;
+        transform: translateY(-50%);
+        width: 5px;
+        height: 20px;
+        background-color: var(--themeColor);
+      }
     }
     .A2none {
       width: 100%;
@@ -23,14 +35,13 @@
     }
 
     .A2ll {
-      width: calc(100% - 190px);
+      width: 100%;
       height: 100%;
       overflow-y: auto;
-      margin-right: 20px;
 
       .A2ll1 {
         height: 100px;
-        background-color: #dddddd;
+        background-color: #fff;
         border-radius: 10px;
         display: flex;
         align-items: center;
@@ -59,7 +70,6 @@
         margin-top: 15px;
         display: flex;
         justify-content: space-between;
-        min-height: 27.38%;
 
         .A2ll2_1 {
           width: calc(100% - 520px);
@@ -103,66 +113,6 @@
           }
         }
       }
-      .A2ll2Full {
-        background-color: #fff;
-        border-radius: 10px;
-        padding: 10px 20px 0px;
-        display: block;
-      }
-    }
-    .A2rr {
-      width: 170px;
-      background-color: #fff;
-      border-radius: 10px;
-      padding: 20px;
-      height: calc(100% - 3px);
-      & > h1 {
-        font-size: 18px;
-      }
-      .A2rrRow {
-        position: relative;
-        margin-top: 36%;
-        width: 100%;
-        height: 12%;
-        background-color: #dddddd;
-        border-radius: 10px;
-        display: flex;
-        align-items: center;
-        & > div {
-          text-align: center;
-          &:nth-of-type(1) {
-            width: 60%;
-          }
-          &:nth-of-type(2) {
-            width: 40%;
-          }
-        }
-        .A2rrRowShow {
-          transition: all 0.2s;
-          opacity: 0;
-          pointer-events: none;
-          position: absolute;
-          top: 0;
-          left: -130px;
-          width: 130px;
-          background-color: #fff;
-          border-radius: 6px;
-          box-shadow: 0px 0px 4px 4px #ccc;
-          & > div {
-            cursor: pointer;
-            padding: 5px 0;
-            &:hover {
-              background-color: #ccc;
-            }
-          }
-        }
-        &:hover {
-          .A2rrRowShow {
-            opacity: 1;
-            pointer-events: auto;
-          }
-        }
-      }
     }
   }
 }

+ 40 - 116
src/pages/A_workbench/A2business/index.tsx

@@ -12,72 +12,31 @@ import { treeLastIdFindFatherFu } from '@/pages/Z_system/Z6user/data'
 import MyPopconfirm from '@/components/MyPopconfirm'
 import history from '@/utils/history'
 import A2editUser from './A2editUser'
+import A2setStock from './A2setStock'
+import { RouterType } from '@/types'
+import A2table from './A2table'
 
-const rrArr = [
-  {
-    name: '草稿',
-    num: 6,
-    key: [
-      { key: 1, label: '藏品入馆 4' },
-      { key: 2, label: '藏品入藏 2' },
-      { key: 3, label: '藏品入馆 4' },
-      { key: 4, label: '藏品入藏 2' }
-    ]
-  },
-  {
-    name: '待提交',
-    num: 6,
-    key: [
-      { key: 1, label: '藏品入馆 4' },
-      { key: 2, label: '藏品入藏 2' }
-    ]
-  },
-  {
-    name: '待审批',
-    num: 6,
-    key: [
-      { key: 1, label: '藏品入馆 4' },
-      { key: 2, label: '藏品入藏 2' }
-    ]
-  },
-  {
-    name: '未通过',
-    num: 6,
-    key: [
-      { key: 1, label: '藏品入馆 4' },
-      { key: 2, label: '藏品入藏 2' }
-    ]
-  },
-  {
-    name: '已完成',
-    num: 6,
-    key: [
-      { key: 1, label: '藏品入馆 4' },
-      { key: 2, label: '藏品入藏 2' }
-    ]
-  }
-]
-
-const arr3 = [
-  { name: '藏品征集', num: 6 },
-  { name: '藏品鉴定', num: 6 },
-  { name: '藏品入馆', num: 6 },
-  { name: '藏品入藏', num: 6 },
-  { name: '藏品出库', num: 6 },
-  { name: '藏品移库', num: 6 }
-]
+const userInfoJting = getTokenInfo().user
 
 function A2business() {
-  const getUserInfo = useCallback(async (id: number) => {
-    const res = await getUserInfoByIdAPI(id)
+  // 设置常用功能
+  const userRolePermissions = useSelector((state: RootState) => state.A0Layout.userRolePermissions)
+  const [stockShow, setStockShow] = useState(false)
+  const [stockList, setStockList] = useState<RouterType>([])
+
+  const getUserInfo = useCallback(async () => {
+    const res = await getUserInfoByIdAPI(userInfoJting.id)
     if (res.code === 0) {
       store.dispatch({ type: 'layout/userInfo', payload: res.data })
+
+      // 设置常用功能
+      if (res.data.permRtf) setStockList(JSON.parse(res.data.permRtf || '[]'))
+      else setStockList(userRolePermissions)
     }
-  }, [])
+  }, [userRolePermissions])
 
   useEffect(() => {
-    const userInfo = getTokenInfo().user
-    if (userInfo && userInfo.id) getUserInfo(userInfo.id)
+    getUserInfo()
   }, [getUserInfo])
 
   // 获取组织管理列表
@@ -111,7 +70,7 @@ function A2business() {
           realName: obj.realName
         }
       })
-      getUserInfo(obj.id)
+      getUserInfo()
     },
     [getUserInfo]
   )
@@ -155,16 +114,19 @@ function A2business() {
             <div className='A2tit'>
               <div>常用功能</div>
               <div>
-                <Button>设置</Button>
+                <Button onClick={() => setStockShow(true)}>设置</Button>
               </div>
             </div>
             <div className='A2ll2RowBox'>
-              {/* 待完善  设置常用功能 */}
-              {['入藏管理', '藏品总账', '我的关注'].map((v, i) => (
-                <div key={i} className='A2ll2Row'>
-                  {v}
-                </div>
-              ))}
+              {stockList.map(v1 =>
+                v1.son.map(v2 =>
+                  v2.authority && v2.name !== '业务中心' ? (
+                    <div key={v2.id} className='A2ll2Row' onClick={() => history.push(v2.path)}>
+                      {v2.name}
+                    </div>
+                  ) : null
+                )
+              )}
             </div>
           </div>
           {/* 最近使用 */}
@@ -183,62 +145,24 @@ function A2business() {
             </div>
           </div>
         </div>
-
-        {/* 待审批 */}
-        <div className='A2ll2 A2ll2Full'>
-          <div className='A2tit'>待审批</div>
-          <div className='A2ll2RowBox'>
-            {arr3.length ? (
-              arr3.map((v, i) => (
-                <div key={i} className='A2ll2Row'>
-                  {v.name}
-                  <p>{v.num}</p>
-                </div>
-              ))
-            ) : (
-              <div className='A2none'>暂无信息</div>
-            )}
-          </div>
-        </div>
-
-        {/* 抄送未读 */}
-        <div className='A2ll2 A2ll2Full'>
-          <div className='A2tit'>抄送未读</div>
-          <div className='A2ll2RowBox'>
-            {arr3.length ? (
-              arr3.map((v, i) => (
-                <div key={i} className='A2ll2Row'>
-                  {v.name}
-                  <p>{v.num}</p>
-                </div>
-              ))
-            ) : (
-              <div className='A2none'>暂无信息</div>
-            )}
-          </div>
-        </div>
-      </div>
-      {/* 右边我的申请 */}
-      <div className='A2rr'>
-        <h1>我的申请</h1>
-
-        {rrArr.map(item => (
-          <div className='A2rrRow' key={item.name}>
-            <div>{item.name}</div>
-            <div>{item.num}</div>
-            <div className='A2rrRowShow'>
-              {item.key.map(v => (
-                <div key={v.key}>{v.label}</div>
-              ))}
-            </div>
-          </div>
-        ))}
+        {/* 表格 */}
+        <A2table />
       </div>
 
       {/* 编辑个人资料 */}
       {editUser ? (
         <A2editUser closeFu={() => setEditUser(false)} userInfo={userInfo} succFu={upUserInfoFu} />
       ) : null}
+
+      {/* 设置常用功能 */}
+      {stockShow ? (
+        <A2setStock
+          sId={userInfoJting.id}
+          arr={stockList}
+          closeFu={() => setStockShow(false)}
+          succFu={getUserInfo}
+        />
+      ) : null}
     </div>
   )
 }

+ 17 - 2
src/pages/Layout/index.tsx

@@ -102,13 +102,14 @@ function Layout() {
 
     if (getRoleRes.code === 0) {
       const getRoleArr: TypeZ5Role[] = getRoleRes.data || []
-
       const isOkIdArr: number[] = [9901]
 
       getRoleArr.forEach(v1 => {
         if (v1.children) {
           v1.children.forEach(v2 => {
-            if (v2.authority) isOkIdArr.push(v2.id)
+            if (v2.authority) {
+              isOkIdArr.push(v2.id)
+            }
           })
         }
       })
@@ -126,16 +127,30 @@ function Layout() {
 
       const tempArr: RouterTypeRow[] = []
 
+      // 权限数据存到仓库
+      const roleArrStoreArr: RouterType = []
+
       tabLeftArr.forEach(v1 => {
         if (v1.son && v1.son[0]) {
+          const obj = {
+            ...v1,
+            son: [] as RouterTypeRow[]
+          }
+
           v1.son.forEach(v2 => {
             if (isOkIdArr.includes(v2.id)) {
               tempArr.push(v2)
+              if (v2.id < 9901) obj.son.push({ ...v2, authority: true })
             }
           })
+
+          roleArrStoreArr.push(obj)
         }
       })
 
+      // 权限数据存到仓库
+      store.dispatch({ type: 'layout/userRolePermissions', payload: roleArrStoreArr })
+
       setRouterCom(tempArr)
 
       // 如果当前页面没有权限了,跳转有权限的第一个页面

+ 2 - 2
src/pages/Y_goodsDetails/Y1cathet/Y44com.tsx

@@ -25,7 +25,7 @@ const baseFormData: TypeY44form = {
   typeName: ''
 }
 
-type ListType = {
+export type LogListType = {
   createTime: string
   creatorName: string
   deptName: string
@@ -60,7 +60,7 @@ function Y44com({ isLook, sId }: Props) {
     formDataRef.current = formData
   }, [formData])
 
-  const [tableObj, setTableObj] = useState<{ list: ListType[]; total: number }>({
+  const [tableObj, setTableObj] = useState<{ list: LogListType[]; total: number }>({
     list: [],
     total: 0
   })

+ 2 - 1
src/pages/Z_system/Z1dict/Z1add.tsx

@@ -128,7 +128,8 @@ function Z1add({ addInfo, addFu, closeFu, isNoAcIds, acShuTxt }: Props) {
         id: addInfo.txt === '编辑' ? addInfo.id : null,
         ancestor,
         // level,
-        parentId
+        parentId,
+        type: 'dict'
       }
       // console.log(123, obj)
       // if (1 + 1 === 2) {

+ 25 - 0
src/store/action/A2business.ts

@@ -6,3 +6,28 @@ import http from '@/utils/http'
 export const A2_APIeditUser = (data: any) => {
   return http.post('sys/user/editInfo', data)
 }
+
+/**
+ * 业务中心-常用功能获取详情
+ */
+// export const A2_APIgetStock = (id: number) => {
+//   return http.get(`cms/center/dict/detail/${id}`)
+// }
+
+/**
+ * 业务中心-修改常用功能
+ */
+export const A2_APIsetStock = (id: number, permRtf: string) => {
+  const data = {
+    id,
+    permRtf
+  }
+  return http.post('cms/center/dict/save', data)
+}
+
+/**
+ * 业务中心-获取分页列表
+ */
+export const A2_APIgetList = (data: any) => {
+  return http.post('cms/center/page', data)
+}

+ 10 - 2
src/store/reducer/layout.ts

@@ -1,4 +1,4 @@
-import { LookDomType, UserTableListType } from '@/types'
+import { LookDomType, RouterType, UserTableListType } from '@/types'
 import { MessageType } from '@/utils/message'
 
 type DownImgType = {
@@ -48,7 +48,10 @@ const initState = {
   } as DownImgType,
 
   // 批量导出
-  exInfo: {} as ExInfoType
+  exInfo: {} as ExInfoType,
+
+  // 用户的权限数据
+  userRolePermissions: [] as RouterType
 }
 
 // 定义 action 类型
@@ -67,6 +70,7 @@ type LayoutActionType =
   | { type: 'layout/passEditShow'; payload: boolean }
   | { type: 'layout/downImg'; payload: DownImgType }
   | { type: 'layout/exInfo'; payload: ExInfoType }
+  | { type: 'layout/userRolePermissions'; payload: RouterType }
 
 // 频道 reducer
 export default function layoutReducer(state = initState, action: LayoutActionType) {
@@ -97,6 +101,10 @@ export default function layoutReducer(state = initState, action: LayoutActionTyp
     // 批量导出
     case 'layout/exInfo':
       return { ...state, exInfo: action.payload }
+
+    // 用户权限
+    case 'layout/userRolePermissions':
+      return { ...state, userRolePermissions: action.payload }
     default:
       return state
   }

+ 1 - 0
src/types/api/layot.d.ts

@@ -12,6 +12,7 @@ export type RouterTypeRow = {
   // 日志模块需要的过滤
   isLog?: boolean
   Com: React.LazyExoticComponent<React.MemoExoticComponent<() => JSX.Element>>
+  authority?: boolean
 }
 
 export type RouterType = {

+ 8 - 0
src/utils/tableData.ts

@@ -58,6 +58,14 @@ export const statusObj = {
   5: '待盘点'
 }
 
+// 业务中心
+export const A2tableC = [
+  ['txt', '业务类型', 'typeName'],
+  ['txt', '业务编号', 'num'],
+  ['txt', '发起日期', 'createTime'],
+  ['txtChange', '申请状态', 'status', statusObj]
+]
+
 // 藏品征集
 export const B1TableC = [
   ['txt', '业务单号', 'num'],