Pārlūkot izejas kodu

fix: add parent catalogue

hi-cactus! 3 gadi atpakaļ
vecāks
revīzija
09c303b40c

+ 1 - 0
app/containers/DataGovernanceMarkRule/components/AuditClassificationFormModal.tsx

@@ -160,6 +160,7 @@ export const AuditClassificationFormModal = (
           type="primary"
           icon="plus"
           onClick={() => {
+            setRuleFormView({ })
             setFormVisible(true)
             // DataSubjectFormVisible(true)
             // DataSubjectForm(null)

+ 21 - 6
app/containers/DataManagerView/components/CatalogueModal.tsx

@@ -19,13 +19,16 @@
  */
 
 import React from 'react'
-import { Modal, Form, Button, Input, Spin } from 'antd'
+import { Modal, Form, Button, Input, Spin, Select, Radio } from 'antd'
 import { FormComponentProps } from 'antd/lib/form'
 import { ICatalogue, IViewBase } from '../types'
+import RadioGroup from 'antd/es/radio/group'
 
 const FormItem = Form.Item
 
 interface ICopyModalProps extends FormComponentProps<ICatalogue> {
+  catalogues: ICatalogue[],
+  selectedCatalogueKeys: string[],
   visible: boolean,
   loading: boolean,
   fromView: ICatalogue,
@@ -73,7 +76,7 @@ export class CatalogueModal extends React.PureComponent<ICopyModalProps> {
   }
 
   public render() {
-    const { form, visible, loading, fromView, onCancel } = this.props
+    const { form, visible, loading, fromView, catalogues, selectedCatalogueKeys, onCancel } = this.props
     const { getFieldDecorator } = form
 
     const modalButtons = [
@@ -90,7 +93,6 @@ export class CatalogueModal extends React.PureComponent<ICopyModalProps> {
         保 存
       </Button>
     ]
-
     return (
       <Modal
         title={fromView ? '编辑' : '新增'}
@@ -103,12 +105,25 @@ export class CatalogueModal extends React.PureComponent<ICopyModalProps> {
       >
         <Spin spinning={loading}>
           <Form>
-            <FormItem label='资源名称' {...this.formItemStyle}>
+            {!fromView && catalogues?.find((c) => selectedCatalogueKeys.includes(`${c?.id}`)) &&
+              <FormItem label='目录' {...this.formItemStyle}>
+                {getFieldDecorator<ICatalogue>('parentId', {
+                  validateFirst: true,
+                  rules: [{ required: true, message: '不能为空' }],
+                  initialValue: selectedCatalogueKeys.join()
+                })(
+                  <RadioGroup>
+                    <Radio value={selectedCatalogueKeys.join()}>子目录</Radio>
+                    <Radio value={'-1'}>一级目录</Radio>
+                  </RadioGroup>
+                )}
+              </FormItem>}
+            <FormItem label="资源名称" {...this.formItemStyle}>
               {getFieldDecorator<ICatalogue>('name', {
                 validateFirst: true,
                 rules: [
-                  { required: true, message: '不能为空' },
-                  { validator: this.checkName }
+                  { required: true, message: '不能为空' }
+                  // { validator: this.checkName }
                 ],
                 initialValue: fromView?.name
               })(<Input autoComplete={'off'} />)}

+ 55 - 50
app/containers/DataManagerView/index.tsx

@@ -127,10 +127,8 @@ interface IViewListStates {
 
 const { TreeNode, DirectoryTree } = Tree
 
-export class ViewList extends React.PureComponent<
-  IViewListProps,
-  IViewListStates
-> {
+export class ViewList extends React.PureComponent<IViewListProps,
+  IViewListStates> {
   // @ts-ignore
   public state: Readonly<IViewListStates> = {
     screenWidth: document.documentElement.clientWidth,
@@ -164,7 +162,7 @@ export class ViewList extends React.PureComponent<
     window.addEventListener('resize', this.setScreenWidth, false)
   }
 
-  private loadViews = async () => {
+  private loadViews = async() => {
     const { projectId } = this.props.match.params
     if (projectId && this.state.selectedCatalogueKeys.length > 0) {
       const parentId = Number(this.state.selectedCatalogueKeys[0])
@@ -172,7 +170,7 @@ export class ViewList extends React.PureComponent<
         this.setState({ tableLoading: true })
         const data = await request(
           api.getViewsByParentId +
-            `?projectId=${projectId}&parentId=${parentId}`,
+          `?projectId=${projectId}&parentId=${parentId}`,
           { method: 'get' }
         )
         this.setState({
@@ -214,10 +212,10 @@ export class ViewList extends React.PureComponent<
   }))
 
   private getTableColumns = ({
-    viewPermission,
-    AdminButton,
-    EditButton
-  }: ReturnType<typeof ViewList.getViewPermission>) => {
+                               viewPermission,
+                               AdminButton,
+                               EditButton
+                             }: ReturnType<typeof ViewList.getViewPermission>) => {
     // const { views } = this.props
     const { viewList } = this.state
     const {
@@ -234,7 +232,7 @@ export class ViewList extends React.PureComponent<
         dataIndex: 'name',
         filterDropdown: (
           <SearchFilterDropdown
-            placeholder="名称"
+            placeholder='名称'
             value={tempFilterViewName}
             onChange={this.filterViewNameChange}
             onSearch={this.searchView}
@@ -285,30 +283,30 @@ export class ViewList extends React.PureComponent<
         width: 150,
         className: utilStyles.textAlignCenter,
         render: (_, record) => (
-          <span className="ant-table-action-column">
-            <Tooltip title="复制">
+          <span className='ant-table-action-column'>
+            <Tooltip title='复制'>
               <EditButton
-                icon="copy"
-                shape="circle"
-                type="ghost"
+                icon='copy'
+                shape='circle'
+                type='ghost'
                 onClick={this.copyView(record)}
               />
             </Tooltip>
-            <Tooltip title="修改">
+            <Tooltip title='修改'>
               <EditButton
-                icon="edit"
-                shape="circle"
-                type="ghost"
+                icon='edit'
+                shape='circle'
+                type='ghost'
                 onClick={this.editView(record.id)}
               />
             </Tooltip>
             <Popconfirm
-              title="确定删除?"
-              placement="bottom"
+              title='确定删除?'
+              placement='bottom'
               onConfirm={this.deleteView(record.id)}
             >
-              <Tooltip title="删除">
-                <AdminButton icon="delete" shape="circle" type="ghost" />
+              <Tooltip title='删除'>
+                <AdminButton icon='delete' shape='circle' type='ghost' />
               </Tooltip>
             </Popconfirm>
           </span>
@@ -398,7 +396,7 @@ export class ViewList extends React.PureComponent<
     )
   }
 
-  private getCatalogues = async () => {
+  private getCatalogues = async() => {
     try {
       const { projectId } = this.props.match.params
 
@@ -419,7 +417,7 @@ export class ViewList extends React.PureComponent<
     }
   }
 
-  private handleSaveCatalogue = async (catalogue: ICatalogue) => {
+  private handleSaveCatalogue = async(catalogue: ICatalogue) => {
     const { projectId } = this.props.match.params
     if (!projectId) {
       return
@@ -431,12 +429,19 @@ export class ViewList extends React.PureComponent<
       if (catalogueFromView) {
         await request(api.updateCatalogue + `/${catalogueFromView.id}`, {
           method: 'PUT',
-          data: { ...catalogue, parentId, projectId }
-      })
+          data: {
+            ...catalogue,
+            projectId
+          }
+        })
       } else {
         await request(api.createCatalogue, {
           method: 'post',
-          data: { ...catalogue, parentId, projectId }
+          data: {
+            ...catalogue,
+            parentId: catalogue.parentId === '-1' ? null : catalogue.parentId,
+            projectId
+          }
         })
       }
       this.setState({ catalogueModalVisible: false })
@@ -455,7 +460,7 @@ export class ViewList extends React.PureComponent<
     })
   }
 
-  private handleDeleteCatalogue = async (c: ICatalogue) => {
+  private handleDeleteCatalogue = async(c: ICatalogue) => {
     try {
       this.setState({ treeLoading: true })
       const data = await request(api.deleteCatalogue + `/${c.id}`, {
@@ -463,7 +468,7 @@ export class ViewList extends React.PureComponent<
       })
       // @ts-ignore
       if (data?.header?.code === 200) {
-        message.error({ content: '删除成功' })
+        message.success({ content: '删除成功' })
         this.getCatalogues()
       } else {
         // @ts-ignore
@@ -499,22 +504,22 @@ export class ViewList extends React.PureComponent<
                   })
                 }}
               >
-                <Icon type="folder-open" />
+                <Icon type='folder-open' />
                 {c.name}
               </span>
               <Dropdown
                 overlay={() => (
                   <Menu>
                     <Menu.Item
-                      key="0"
+                      key='0'
                       onClick={() => this.handleEditCatalogue(c)}
                     >
                       编辑
                     </Menu.Item>
-                    <Menu.Item key="1">
+                    <Menu.Item key='1'>
                       <Popconfirm
-                        title="确定删除?"
-                        placement="bottom"
+                        title='确定删除?'
+                        placement='bottom'
                         onConfirm={() => this.handleDeleteCatalogue(c)}
                       >
                         <a> 删除</a>
@@ -524,7 +529,7 @@ export class ViewList extends React.PureComponent<
                 )}
                 trigger={['click']}
               >
-                <Icon type="more" />
+                <Icon type='more' />
               </Dropdown>
             </div>
             <div style={{ marginLeft: 20 }}>
@@ -564,18 +569,18 @@ export class ViewList extends React.PureComponent<
     return (
       <>
         <Container>
-          <Helmet title="数据资产" />
+          <Helmet title='数据资产' />
           {!pathname.includes('dataManager') && (
             <ContainerTitle>
               <Row>
                 <Col span={24} className={utilStyles.shortcut}>
                   <Breadcrumb className={utilStyles.breadcrumb}>
                     <Breadcrumb.Item>
-                      <Link to="">View</Link>
+                      <Link to=''>View</Link>
                     </Breadcrumb.Item>
                   </Breadcrumb>
                   <Link to={`/account/organization/${currentProject.orgId}`}>
-                    <i className="iconfont icon-organization" />
+                    <i className='iconfont icon-organization' />
                   </Link>
                 </Col>
               </Row>
@@ -585,14 +590,14 @@ export class ViewList extends React.PureComponent<
             <Box>
               <Box.Header>
                 <Box.Title>
-                  <Icon type="bars" />
+                  <Icon type='bars' />
                   数据资产列表
                 </Box.Title>
                 <Box.Tools>
-                  <Tooltip placement="bottom" title="新增">
+                  <Tooltip placement='bottom' title='新增'>
                     <AdminButton
-                      type="primary"
-                      icon="plus"
+                      type='primary'
+                      icon='plus'
                       onClick={this.addView}
                     />
                   </Tooltip>
@@ -609,7 +614,7 @@ export class ViewList extends React.PureComponent<
                           this.setState({ catalogueModalVisible: true })
                         }}
                       >
-                        <Icon type="plus" />
+                        <Icon type='plus' />
                       </div>
                     </div>
                     <div className={styles.treeContent}>
@@ -621,7 +626,7 @@ export class ViewList extends React.PureComponent<
                   <Table
                     style={{ flex: 1 }}
                     bordered
-                    rowKey="id"
+                    rowKey='id'
                     loading={this.state.tableLoading}
                     dataSource={filterViews}
                     columns={tableColumns}
@@ -643,6 +648,8 @@ export class ViewList extends React.PureComponent<
           onCancel={this.cancelCopy}
         />
         <CatalogueModal
+          catalogues={this.state.catalogues}
+          selectedCatalogueKeys={this.state.selectedCatalogueKeys}
           visible={catalogueModalVisible}
           loading={this.state.saveCatalogueLoading}
           fromView={catalogueFromView}
@@ -673,11 +680,9 @@ const mapStateToProps = createStructuredSelector({
   loading: makeSelectLoading()
 })
 
-const withConnect = connect<
-  IViewListStateProps,
+const withConnect = connect<IViewListStateProps,
   IViewListDispatchProps,
-  RouteComponentWithParams
->(mapStateToProps, mapDispatchToProps)
+  RouteComponentWithParams>(mapStateToProps, mapDispatchToProps)
 const withReducer = injectReducer({ key: 'view', reducer })
 const withSaga = injectSaga({ key: 'view', saga: sagas })