lanjianrong 3 gadi atpakaļ
vecāks
revīzija
20a837d78a

+ 2 - 2
src/components/AnimateContent/index.tsx

@@ -28,9 +28,9 @@ const AnimateContent: FC<PropsWithChildren<AnimateContentProps>> = ({
         onClose={() => onVisibleChange(false)}
         mask={false}
         width="calc(100vw - 256px)"
-        style={{ right: '24px', top: `${72 + wrapHeight}px` }}
+        style={{ right: '24px', top: `${48 + wrapHeight}px` }}
         contentWrapperStyle={{
-          height: `calc(100vh - 96px - ${wrapHeight}px)`
+          height: `calc(100vh - 72px - ${wrapHeight}px)`
         }}
         // closeIcon={<Button onClick={() => onVisibleChange(false)}>返回</Button>}>
       >

+ 12 - 13
src/global.less

@@ -111,12 +111,23 @@ ol {
   color: rgba(0, 0, 0, 0.45) !important;
   cursor: not-allowed;
 }
-<<<<<<< HEAD
 .ant-pro-page-container-warp {
   background-color: transparent !important;
 }
 .ant-page-header {
   background-color: transparent !important;
+  .ant-page-header-heading-left {
+    margin-bottom: 0 !important;
+  }
+  // .ant-page-header-heading {
+  //   margin-top: 0 !important;
+  //   .ant-page-header-heading-left {
+  //     margin: 0 !important;
+  //   }
+  // }
+  .ant-page-header-footer {
+    margin-top: 0 !important;
+  }
 }
 
 .ant-pro-page-container-children-content {
@@ -152,15 +163,3 @@ ol {
 //   background-color: #f5f7fa;
 //   border-radius: 10px 10px 10px 10px;
 // }
-=======
-
-.fr-item-wrapper .ant-input {
-  width: 300px !important;
-}
-.fr-item-wrapper .ant-select-selector {
-  width: 300px !important;
-}
-.fr-item-wrapper .ant-input-affix-wrapper {
-  width: 300px !important;
-}
->>>>>>> ba83460... feat: 调整表格、表单列宽

+ 1 - 2
src/pages/Institutions/Company/List/index.tsx

@@ -100,8 +100,7 @@ const CompanyList: React.FC<ListProps> = ({ base, dispatch, pTypeList }) => {
     {
       dataIndex: 'institutionAcountTotal',
       title: '人员账号',
-      renderText: (text, record) => `${text}/${record.memberTotal}`
-      width: 96
+      renderText: (text, record) => `${text}/${record.memberTotal}`,
       width: 96,
       align: 'center',
       onHeaderCell: () => ({ style: { textAlign: 'center' } })

+ 63 - 0
src/pages/Project/Management/Detail/components/AuditPerm.tsx

@@ -0,0 +1,63 @@
+import ProForm, { ProFormSelect } from '@ant-design/pro-form'
+import type { ProFormInstance } from '@ant-design/pro-form'
+import React, { useEffect, useRef } from 'react'
+import { useRequest } from 'umi'
+import { getApprovalList, setProjectPersonor } from '@/services/api/project'
+import { Card, Form, message } from 'antd'
+import TreeNodeSelect from '../../List/components/TreeNodeSelect'
+import consts from '@/utils/consts'
+
+type AuditPermProps = {
+  dataID: string
+  defaultFormData: {
+    createdID: string
+    reportAccount: string[]
+  }
+}
+const AuditPerm: React.FC<AuditPermProps> = ({ dataID, defaultFormData }) => {
+  const ref = useRef<ProFormInstance>(null)
+  const { run: trySetProjectPersonor } = useRequest(setProjectPersonor, {
+    manual: true,
+    onSuccess: () => {
+      message.success('提交成功')
+    }
+  })
+  useEffect(() => {
+    if (dataID) {
+      ref.current?.setFieldsValue({ ...defaultFormData })
+    }
+  }, [dataID])
+
+  return (
+    <Card>
+      <div className="max-w-320px">
+        <ProForm
+          formRef={ref}
+          submitter={{ resetButtonProps: { style: { display: 'none' } } }}
+          onFinish={onFinish}>
+          <Form.Item label="指定人员" name="accountID">
+            <TreeNodeSelect />
+          </Form.Item>
+          <ProFormSelect
+            name="approvalID"
+            label={'审批流程'}
+            placeholder="请选择审批流程"
+            request={async () => {
+              const { code = -1, data = [] } = await getApprovalList()
+              if (code === consts.RET_CODE.SUCCESS) {
+                return data.map(item => ({ label: item.name, value: item.ID }))
+              }
+              return []
+            }}
+            options={state.approvalList.map(item => ({
+              label: item.name,
+              value: item.ID
+            }))}
+          />
+        </ProForm>
+      </div>
+    </Card>
+  )
+}
+
+export default AuditPerm

+ 19 - 14
src/pages/Project/Management/Detail/index.tsx

@@ -5,16 +5,17 @@ import { useRequest } from 'umi'
 import ProjectInfo from './components/ProjectInfo'
 import type { RouteComponentProps } from 'umi/node_modules/@types/react-router'
 import RolePerm from './components/RolePerm'
+import AuditPerm from './components/AuditPerm'
 
 export enum TabEnum {
   INFO = '0',
-  UPLOAD_ROLE = '1',
+  AUDIT_ROLE = '1',
   STAFF_ROLE = '2'
 }
 
 const menuMap: Record<string, string> = {
   [TabEnum.INFO]: '项目信息',
-  // [TabEnum.UPLOAD_ROLE]: '上传权限',
+  // [TabEnum.AUDIT_ROLE]: '上传权限',
   [TabEnum.STAFF_ROLE]: '角色权限'
 }
 
@@ -30,7 +31,7 @@ const ProjectDetail: React.FC<RouteComponentProps> = ({ location }) => {
   })
   const { run: tryGetProjectInfo } = useRequest(getProject, {
     manual: true,
-    onSuccess: (result: API.ProjectListItem) => setState({ ...state, projectInfo: result })
+    onSuccess: (result: API.ProjectDetail) => setState({ ...state, projectInfo: result })
   })
   useEffect(() => {
     if (dataID) {
@@ -53,22 +54,26 @@ const ProjectDetail: React.FC<RouteComponentProps> = ({ location }) => {
             }}
           />
         )
+      case TabEnum.AUDIT_ROLE:
+        return <AuditPerm></AuditPerm>
       default:
         break
     }
   }
   return (
-    <PageContainer
-      title={state.projectInfo?.name}
-      fixedHeader
-      tabList={[
-        { tab: menuMap[TabEnum.INFO], key: TabEnum.INFO },
-        // { tab: menuMap[TabEnum.UPLOAD_ROLE], key: TabEnum.UPLOAD_ROLE },
-        { tab: menuMap[TabEnum.STAFF_ROLE], key: TabEnum.STAFF_ROLE }
-      ]}
-      onTabChange={key => setState({ ...state, selectKey: key })}>
-      {renderChildren()}
-    </PageContainer>
+    state.projectInfo && (
+      <PageContainer
+        title={state.projectInfo?.name}
+        fixedHeader
+        tabList={[
+          { tab: menuMap[TabEnum.INFO], key: TabEnum.INFO },
+          // { tab: menuMap[TabEnum.AUDIT_ROLE], key: TabEnum.AUDIT_ROLE },
+          { tab: menuMap[TabEnum.STAFF_ROLE], key: TabEnum.STAFF_ROLE }
+        ]}
+        onTabChange={key => setState({ ...state, selectKey: key })}>
+        {renderChildren()}
+      </PageContainer>
+    )
   )
 }
 export default ProjectDetail

+ 3 - 14
src/pages/Project/Management/List/components/ProjectModal.tsx

@@ -2,24 +2,14 @@ import { connect, useRequest } from 'umi'
 import { message } from 'antd'
 import { addProject, updateProject } from '@/services/api/project'
 import { BaseMenuEnum, SchemaEnum } from '@/pages/Schema/Base'
-import { createForm, onFieldMount, onFormInit } from '@formily/core'
-import {
-  Form,
-  FormButtonGroup,
-  Submit,
-  FormLayout,
-  FormItem,
-  Input,
-  Select,
-  Reset
-} from '@formily/antd'
+import { createForm, onFieldMount } from '@formily/core'
+import { Form, FormButtonGroup, Submit, FormLayout, FormItem, Input, Select } from '@formily/antd'
 import { createSchemaField } from '@formily/react'
 import { connectSchema } from '@/utils/schema'
 
 import type { SchemaBaseModelState } from '@/pages/Schema/Base/model'
 import type { ConnectProps } from 'umi'
 import type { ProjectModelState } from '../../../model'
-import { useEffect } from 'react'
 
 export enum ModalType {
   ADD = 0,
@@ -47,7 +37,7 @@ const ProjectModal: React.FC<ProjectModalProps> = ({
 }) => {
   const formInstance = createForm({
     validateFirst: true,
-    initialValues: defaultFormData,
+    initialValues: type === ModalType.UPDATE ? defaultFormData : null,
     effects() {
       onFieldMount('projectTypeID', field => (field.dataSource = pTypeList))
     }
@@ -97,7 +87,6 @@ const ProjectModal: React.FC<ProjectModalProps> = ({
         <FormButtonGroup.Sticky>
           <FormButtonGroup.FormItem>
             <Submit onSubmit={onFinish}>提交</Submit>
-            <Reset>重置</Reset>
           </FormButtonGroup.FormItem>
         </FormButtonGroup.Sticky>
       </Form>

+ 1 - 2
src/pages/Project/Management/List/index.tsx

@@ -101,7 +101,6 @@ const List: React.FC<ListProps> = ({ schema, dispatch, pTypeList }) => {
       filters: true,
       filterMultiple: false,
       onHeaderCell: () => ({ style: { textAlign: 'center' } }),
-      render: (_, record) => <div>{record.projectType.name}</div>,
       valueEnum: pTypeList.reduce((prev, curr) => {
         const items = { ...prev }
         items[curr.value] = {
@@ -183,7 +182,7 @@ const List: React.FC<ListProps> = ({ schema, dispatch, pTypeList }) => {
         rowKey="ID"
         params={state.params}
         actionRef={tRef}
-        scroll={{ y: document.body.clientHeight - 313 }}
+        scroll={{ y: document.body.clientHeight - 291 }}
         // columns={generateColumns(columns, schema)}
         columns={columns}
         request={async (params, filter, sorter) => {

+ 0 - 136
src/pages/Project/Management/components/ProjectModal.tsx

@@ -1,136 +0,0 @@
-import { connect, useRequest } from 'umi'
-import { useEffect } from 'react'
-import { Button, message } from 'antd'
-import { addProject, getProject, updateProject } from '@/services/api/project'
-import { delay } from '@/utils/util'
-import FormRender, { useForm } from 'form-render'
-import { BaseMenuEnum } from '@/pages/Schema/Base'
-import type { SchemaBaseModelState } from '@/pages/Schema/Base/model'
-import type { ConnectProps } from 'umi'
-import type { ProjectModelState } from '../../model'
-import consts from '@/utils/consts'
-
-export enum ModalType {
-  ADD = 0,
-  UPDATE = 1,
-  PREVIEW = 2
-}
-
-type ProjectModalProps = ConnectProps & {
-  visible: boolean
-  setVisible: (visible: boolean) => void
-  readOnly: boolean
-  type: ModalType
-  defaultFormData?: {
-    dataID: string
-  }
-  pTypeList: API.ProjectTypeList
-  reload: () => void
-  schema?: Record<string, any> | null
-}
-const ProjectModal: React.FC<ProjectModalProps> = ({
-  visible,
-  setVisible,
-  dispatch,
-  schema,
-  type,
-  defaultFormData,
-  pTypeList,
-  reload
-}) => {
-  const form = useForm()
-  useEffect(() => {
-    if (visible && !schema) {
-      dispatch({
-        type: 'schemaBase/querySchema',
-        payload: {
-          columnType: BaseMenuEnum.PROJECT
-        }
-      })
-    }
-  }, [visible])
-
-  const { run: tryUpdateProject } = useRequest(updateProject, {
-    manual: true,
-    onSuccess: () => {
-      message.success('更新成功')
-    }
-  })
-  const { run: tryAddProject } = useRequest(addProject, {
-    manual: true,
-    onSuccess: () => {
-      message.success('创建成功')
-    }
-  })
-
-  const onMount = async () => {
-    if (defaultFormData?.dataID) {
-      const { code = -1, data = {} } = await getProject({ ID: defaultFormData.dataID })
-      if (code === consts.RET_CODE.SUCCESS) {
-        const currentFormData = { ...data }
-        const keys = Object.keys(currentFormData)
-        keys.forEach(key => {
-          if (currentFormData[key] instanceof Object) {
-            const targetMap = currentFormData[key]
-            delete currentFormData[key]
-            currentFormData[`${key}ID`] = targetMap.ID
-          }
-        })
-        form.setValues(type === ModalType.ADD ? {} : { ...currentFormData })
-        delay(80).then(() => {
-          // console.log(pTypeList)
-
-          form.setSchemaByPath('projectTypeID', {
-            enum: pTypeList.map(item => item.value),
-            enumNames: pTypeList.map(item => item.label)
-          })
-        })
-      }
-    }
-  }
-
-  const onFinish = async (formData, errors) => {
-    if (errors?.length) return
-    try {
-      // 执行表单提交
-      if (type === ModalType.ADD) {
-        await tryAddProject(formData)
-      } else {
-        await tryUpdateProject(formData)
-      }
-      setVisible(false)
-      reload()
-    } catch (error) {
-      message.error(error)
-    }
-  }
-  return (
-    <div className="mt-6">
-      {schema && <FormRender form={form} schema={schema} onFinish={onFinish} onMount={onMount} />}
-      <div className="ml-120px">
-        {/* * 重置会导致下拉框的options丢失
-          <Button onClick={() => form.setValues({})}>重置</Button> */}
-        <Button type="primary" onClick={form.submit}>
-          提交
-        </Button>
-      </div>
-      {/* <Form>
-        {schema && <FormRender form={form} schema={schema} onFinish={onFinish} onMount={onMount} />}
-        <div className="ml-120px">
-          * 重置会导致下拉框的options丢失
-          <Button onClick={() => form.setValues({})}>重置</Button>
-          <Button type="primary" onClick={form.submit}>
-            提交
-          </Button>
-        </div>
-      </Form> */}
-    </div>
-  )
-}
-
-export default connect(
-  ({ project, schemaBase }: { project: ProjectModelState; schemaBase: SchemaBaseModelState }) => ({
-    pTypeList: project.projectTypeList.map(item => ({ label: item.name, value: item.ID })),
-    schema: schemaBase.base[BaseMenuEnum.PROJECT]?.schema
-  })
-)(ProjectModal)

+ 0 - 6
src/pages/Schema/Base/index.tsx

@@ -144,13 +144,7 @@ const Index: React.FC<BaseProps> = ({ base, pTypeList, dispatch }) => {
               onClick={() => gotoDetail(state.activeKey)}
               className="w-14px h-14px rounded-1/2 hover:bg-dark-50 hover:cursor-pointer"></div>
           </div>
-<<<<<<< HEAD
           <div className="max-w-800px">{renderForm()}</div>
-=======
-          <div className="max-w-874px">
-            {currentSchema && <FormRender form={form} schema={currentSchema?.schema} />}
-          </div>
->>>>>>> ba83460... feat: 调整表格、表单列宽
         </div>
       </div>
     </PageContainer>

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

@@ -33,6 +33,9 @@ declare namespace API {
     reportAccount: { ID: string; name: string }[]
   }
 
+  type ProjectDetail = ProjectListItem & {
+    approval: Nullable<{ ID: string; name: string }>
+  }
   type ProjectListParams = BasicPageParams & {
     search?: string
     projectTypeID?: string

+ 3 - 0
src/utils/schema.ts

@@ -338,6 +338,9 @@ export const transformToSchemaData = (
   }
   generateKey(connectSchema(SchemaEnum[columnType], syncSchema))
   const formData = {}
+  if ('ID' in data) {
+    formData.ID = data.ID
+  }
   keys.forEach(key => {
     if (key in data) {
       formData[key] = data?.[key]