Преглед изворни кода

feat: 定义资料清单相关接口以及类型;抽离rowSelection逻辑

lanjianrong пре 3 година
родитељ
комит
de3d668993

+ 22 - 0
src/pages/Business/Inventory/hooks/useRowScript.tsx

@@ -0,0 +1,22 @@
+import { queryProfileTemplateList } from '@/services/api/business'
+import { useRequest } from '@umijs/max'
+import { useState } from 'react'
+
+interface IState {
+  list?: API.ProfileTemplateItem[]
+}
+
+export function useRowScript() {
+  const [state, setState] = useState<IState>({})
+
+  const { refresh } = useRequest(queryProfileTemplateList, {
+    onSuccess: (result: API.ProfileTemplateItem[]) => {
+      setState({ ...state, list: result?.children || [] })
+    }
+  })
+
+  return {
+    list: state.list,
+    refresh
+  }
+}

+ 65 - 2
src/pages/Business/Inventory/index.tsx

@@ -1,8 +1,71 @@
 import { PageContainer } from '@ant-design/pro-layout'
-import React from 'react'
+import { Table } from 'antd'
+import { ColumnsType } from 'antd/lib/table'
+import { useRowScript } from './hooks/useRowScript'
+
+enum TemplateMode {
+  PAPER = 'paper',
+  UPLOAD = 'upload',
+  ALL = 'all'
+}
 
 const Inventory = () => {
-  return <PageContainer title={false}>资料清单接收模板</PageContainer>
+  const { list } = useRowScript()
+  const columns: ColumnsType<API.ProfileTemplateItem> = [
+    {
+      title: '序号',
+      dataIndex: 'sort',
+      width: 120
+    },
+    {
+      title: '目录文件名称',
+      dataIndex: 'name'
+    },
+    {
+      title: '状态',
+      dataIndex: 'enable',
+      render: text =>
+        text ? <span className="text-green">启用</span> : <span className="text-red">停用</span>
+    },
+    {
+      title: '是否必填',
+      dataIndex: 'required',
+      render: text => (text ? '是' : '否')
+    },
+    {
+      title: '资料提供方式',
+      dataIndex: 'mode',
+      render: (mode: TemplateMode) => (
+        <div>
+          {[TemplateMode.PAPER, TemplateMode.ALL].includes(mode) && (
+            <span className="border border-hex-91d5ff text-blue bg-hex-e6f7ff rounded-1 px-1 text-sm">
+              纸质
+            </span>
+          )}
+          {[TemplateMode.UPLOAD, TemplateMode.ALL].includes(mode) && (
+            <span className="border border-hex-9fede5 text-hex-13c2c2 bg-hex-e6fffb rounded-1 px-1 ml-2 text-sm">
+              上传
+            </span>
+          )}
+        </div>
+      )
+    }
+  ]
+  return (
+    <PageContainer title={false}>
+      {list?.length && (
+        <Table
+          rowKey="ID"
+          columns={columns}
+          dataSource={list}
+          pagination={false}
+          size="small"
+          bordered
+          expandable={{ defaultExpandAllRows: true }}
+        />
+      )}
+    </PageContainer>
+  )
 }
 
 export default Inventory

+ 56 - 0
src/services/api/business.ts

@@ -0,0 +1,56 @@
+import { request } from '@umijs/max'
+
+/** 清单模板 列表 */
+export async function queryProfileTemplateList() {
+  return request<API.ProfileTemplateItem[]>('/form/v1/profile/template/list')
+}
+
+/** 清单模板 创建目录 */
+export async function createTemplateFolder(params: { name: string; parentID: string }) {
+  return request('/form/v1/profile/template/folder/create', {
+    method: 'POST',
+    data: params
+  })
+}
+
+/** 清单模板 创建文件 */
+export async function createTemplateFile(
+  params: Required<Omit<API.ProfileTemplateItem, 'ID' | 'sort' | 'folder' | 'children'>>
+) {
+  return request('/form/v1/profile/template/file/create', {
+    method: 'POST',
+    data: params
+  })
+}
+
+/** 清单模板 编辑名称 */
+export async function updateProfileTemplate(params: { name: string; ID: string }) {
+  return request('/form/v1/profile/template/update', {
+    method: 'POST',
+    data: params
+  })
+}
+
+/** 清单模板 删除 */
+export async function delProfileTemplate(params: { ID: string }) {
+  return request('/form/v1/profile/template/delete', {
+    method: 'POST',
+    data: params
+  })
+}
+
+/** 清单模板 上下移动 */
+export async function moveTemplateWithOperation(params: { ID: string; operation: 'up' | 'down' }) {
+  return request('/form/v1/profile/template/updown', {
+    method: 'POST',
+    data: params
+  })
+}
+
+/** 清单模板 移动 */
+export async function moveTemplate(params: { ID: string; moveID: string }) {
+  return request('/form/v1/profile/template/move', {
+    method: 'POST',
+    data: params
+  })
+}

+ 12 - 0
src/services/api/typings.d.ts

@@ -376,4 +376,16 @@ declare namespace API {
     institutionID: string
     accountIDs: []
   }
+
+  type ProfileTemplateItem = {
+    ID?: string
+    parentID?: string
+    name?: string
+    enable?: boolean
+    required?: boolean
+    mode?: 'paper' | 'upload' | 'all'
+    sort?: number
+    folder?: boolean
+    children?: ProfileTemplateItem[]
+  }
 }