Sfoglia il codice sorgente

文件管理管理员对文件给用户授权

Renxy 2 anni fa
parent
commit
57c2b78221

+ 1 - 1
src/pages/ContractManager/index.jsx

@@ -246,7 +246,7 @@ const ConteactManager = (props) => {
   const handleUpload = (record) => {
     const token = getToken();
     window.downloadFile(
-      `/api/archive/v1/file/download?id=${record.id}&JWT-TOKEN=${token}`,
+      `/api/contract/v1/contract/download?id=${record.id}&JWT-TOKEN=${token}`,
       record.name,
       false,
     );

+ 129 - 0
src/pages/FileManagement/components/AddModal.js

@@ -0,0 +1,129 @@
+import { Checkbox, Modal, Select, Table, TreeSelect } from 'antd';
+import style from './index.less';
+import { useMemo, useEffect, useState } from 'react';
+import { useModel, useRequest } from '@umijs/max';
+
+function AddModal({ node, fileNode, havePreList, addOpen, onCancel, onOk }) {
+  console.log(node, fileNode, havePreList);
+  const { userList, run: userListRun } = useModel('userList');
+  const [values, setValues] = useState([]);
+  const [userID, setUserID] = useState();
+
+  useEffect(() => {
+    if (!addOpen) {
+      setValues([]);
+      setUserID(null);
+    }
+  }, [addOpen]);
+
+  useEffect(() => {
+    userListRun();
+  }, []);
+
+  const defaultPerList = [
+    { label: '查看列表', value: 6, disabled: true },
+    { label: '只读', value: 8, disabled: true },
+    { label: '下载', value: 1 },
+    { label: '删除', value: 2 },
+    // { label: '授权', value: 3 },
+  ];
+  const preData = useMemo(() => {
+    const list = [...defaultPerList];
+    const uploadDis =
+      havePreList?.findIndex((item) => item.permit == 1) > -1 ? true : false;
+    const downDis =
+      havePreList?.findIndex((item) => item.permit == 2) > -1 ? true : false;
+    list[2] = { ...list[2], disabled: uploadDis };
+    list[3] = { ...list[3], disabled: downDis };
+
+    const defValues = list
+      ?.filter((item) => item.disabled)
+      ?.map((item) => item.value);
+    setValues(defValues);
+    return { list, defValues };
+  }, [havePreList]);
+
+  const rowSelection = {
+    onChange: (selectedRowKeys, selectedRows) => {
+      console.log(
+        `selectedRowKeys: ${selectedRowKeys}`,
+        'selectedRows: ',
+        selectedRows,
+      );
+    },
+  };
+
+  const handlerOk = () => {
+    const permit = values
+      .filter(
+        (value) => preData?.defValues?.findIndex((cur) => cur == value) == -1,
+      )
+      .join(',');
+    const data = {
+      user_id: userID,
+      file_type: node?.dir_type,
+      permit,
+      file_id: fileNode.id,
+    };
+    onOk(data);
+  };
+
+  const handleChange = (values) => {
+    setValues(values);
+  };
+
+  return (
+    <Modal
+      title="新增权限"
+      open={addOpen}
+      onOk={handlerOk}
+      onCancel={onCancel}
+      width={800}
+      destroyOnClose
+    >
+      {/* <Table
+        title={() => '文档列表'}
+        columns={columns.slice(0, -1)}
+        dataSource={tempData}
+        pagination={false}
+        rowSelection={rowSelection}
+        destroyOnClose
+      /> */}
+
+      <div className={style.title}>申请权限对象:</div>
+      <div className={style.content}>{fileNode?.dir_name}</div>
+      <div style={{ margin: '20px 0px' }}>
+        <div className={style.title} style={{ marginBottom: 10 }}>
+          选择用户:
+        </div>
+        <Select
+          showSearch
+          style={{ width: '100%' }}
+          placeholder="请选择"
+          onChange={(value) => setUserID(value)}
+          filterOption={(input, option) =>
+            (option?.label ?? '').toLowerCase().includes(input.toLowerCase())
+          }
+          options={userList?.map((item) => {
+            return {
+              value: item.ID,
+              label: item.CName,
+            };
+          })}
+        />
+      </div>
+      <div>
+        <span className={style.title} style={{ marginRight: 20 }}>
+          选择权限:
+        </span>
+        <Checkbox.Group
+          options={preData.list}
+          value={values}
+          onChange={handleChange}
+        />
+      </div>
+    </Modal>
+  );
+}
+
+export default AddModal;

+ 1 - 0
src/pages/FileManagement/components/model.jsx

@@ -14,6 +14,7 @@ const AddFileModal = ({ id, visible, handleOk, handleCancel }) => {
       open={visible}
       onOk={onChange}
       onCancel={handleCancel}
+      destroyOnClose
     >
       <div
         style={{ display: 'flex', whiteSpace: 'nowrap', alignItems: 'center' }}

+ 94 - 82
src/pages/FileManagement/index.js

@@ -33,18 +33,26 @@ import { downloadFile, getToken } from '@/utils/utils';
 import {
   ExclamationCircleOutlined,
   PlusCircleOutlined,
+  PlusOutlined,
 } from '@ant-design/icons';
 import AddFileModal from './components/model';
 import PerModal from './components/PreModal';
 import { queryAuditList, createAduit } from '@/services/boom';
 import { stringify } from 'qs';
 import FileViewerModal from '@/components/FileViewerNew';
+import AddModal from './components/AddModal';
+import { useMemo } from 'react';
 
 const tempData = [
   { name: '文件1', upload_user: '管理员', upload_time: '2023-04-08 11:00:00' },
   { name: '文件2', upload_user: '管理员', upload_time: '2023-04-10 11:00:00' },
 ];
 
+const tempPer = [
+  { name: '管理员', list: 1, read: 1, download: 1, delete: 1, permission: 1 },
+  { name: '徐俊杰', list: 1, read: 1, download: 0, delete: 0, permission: 0 },
+];
+
 const { DirectoryTree } = Tree;
 const { Search } = Input;
 const { RangePicker } = DatePicker;
@@ -60,6 +68,11 @@ function FileManagement(props) {
   const [fileViewerVisible, setFileViewerVisible] = useState(false);
   const [fileViewerData, setFileViewerData] = useState();
 
+  const isSuper = useMemo(() => {
+    if (user?.Permission['menu-001-audit']) return true;
+    return false;
+  }, [user]);
+
   const {
     data: treeData,
     loading: treeLoading,
@@ -82,7 +95,7 @@ function FileManagement(props) {
             ...item,
             dir_name: item.file_name,
             create_time: item.created_on,
-            key: idx,
+            key: item.id,
           };
         }) || [];
       setTableData(result);
@@ -111,7 +124,7 @@ function FileManagement(props) {
               ...item,
               dir_name: name,
               create_time: dayjs(item.c_time).format('YYYY-MM-DD'),
-              key: idx,
+              key: item.id,
             };
           }) || [];
         setTableData(result);
@@ -131,7 +144,7 @@ function FileManagement(props) {
               ...item,
               dir_name: item.name,
               create_time: item.created_on,
-              key: idx,
+              key: item.id,
             };
           }) || [];
         setTableData(result);
@@ -154,16 +167,17 @@ function FileManagement(props) {
       },
     },
   );
-  //申请权限
+  //文件授权
   const { loading: perLoading, run: runPer } = useRequest(
     (data) => querySetPermit(data),
     {
       manual: true,
       onSuccess: (data) => {
-        message.success('申请成功');
+        setAddOpen(false);
+        message.success('授权成功');
       },
       onError: () => {
-        message.error('申请失败');
+        message.error('授权失败');
       },
     },
   );
@@ -271,6 +285,36 @@ function FileManagement(props) {
     },
   ];
 
+  const editPer = true;
+  const columnsPer = [
+    { title: '用户', dataIndex: 'name' },
+    {
+      title: '查看列表',
+      dataIndex: 'list',
+      render: (value, _) => <Checkbox checked={value} disabled />,
+    },
+    {
+      title: '只读',
+      dataIndex: 'read',
+      render: (value, _) => <Checkbox checked={value} disabled />,
+    },
+    {
+      title: '下载',
+      dataIndex: 'download',
+      render: (value, _) => <Checkbox checked={value} disabled={!editPer} />,
+    },
+    {
+      title: '删除',
+      dataIndex: 'delete',
+      render: (value, _) => <Checkbox checked={value} disabled={!editPer} />,
+    },
+    {
+      title: '授权',
+      dataIndex: 'permission',
+      render: (value, _) => <Checkbox checked={value} disabled={!editPer} />,
+    },
+  ];
+
   useEffect(() => {
     //获取列表的权限
     if (!tableData || tableData.length <= 0) return;
@@ -494,6 +538,18 @@ function FileManagement(props) {
                 申请权限
               </Button>
             </Form.Item>
+            {isSuper && (
+              <Form.Item>
+                <Button
+                  type="primary"
+                  onClick={() => setAddOpen(true)}
+                  disabled={selectedRowKeys?.length > 0 ? false : true}
+                >
+                  <PlusOutlined />
+                  新增权限
+                </Button>
+              </Form.Item>
+            )}
           </Form>
           <div>
             <Table
@@ -513,35 +569,29 @@ function FileManagement(props) {
               childrenColumnName="none"
               pagination={false}
             />
-            {/* 
-            <Button type="primary" onClick={() => setAddOpen(true)}>
-              <PlusOutlined />
-              新增权限
-            </Button>
-            {!editPer && (
-              <Button
-                type="primary"
-                onClick={() => setEditPer(true)}
-                style={{ marginLeft: 20 }}
-              >
-                编辑权限
-              </Button>
-            )}
-            {editPer && (
-              <Button
-                type="primary"
-                onClick={() => setEditPer(false)}
-                style={{ marginLeft: 20 }}
-              >
-                确定
-              </Button>
+            {isSuper && selectedRowKeys?.length > 0 && (
+              <>
+                <div
+                  style={{
+                    marginTop: '30px',
+                    fontWeight: 'bold',
+                    fontSize: '20px',
+                  }}
+                >
+                
+                  {
+                    tableData?.find((item) => item.key == selectedRowKeys[0])
+                      ?.dir_name
+                  }
+                  》权限列表
+                </div>
+                <Table
+                  columns={columnsPer}
+                  dataSource={tempPer}
+                  style={{ overflowY: 'auto' }}
+                />
+              </>
             )}
-            <Table
-              columns={columnsPer}
-              dataSource={tempPer}
-              style={{ overflowY: 'auto' }}
-            />
-            */}
           </div>
         </ProCard>
         <Input
@@ -553,9 +603,16 @@ function FileManagement(props) {
         />
         {contextHolder}
       </div>
-      {/* <PerModal /> */}
-      <AddModal />
-
+      <AddModal
+        node={node}
+        havePreList={preListData?.list?.filter(
+          (item) => item.file_id == selectedRowKeys[0],
+        )}
+        fileNode={tableData?.find((item) => item.key == selectedRowKeys[0])}
+        addOpen={addOpen}
+        onCancel={() => setAddOpen(false)}
+        onOk={(data) => runPer(data)}
+      />
       <AddFileModal
         id={node?.id}
         visible={visible}
@@ -584,51 +641,6 @@ function FileManagement(props) {
       />
     </PageContainer>
   );
-  function AddModal(props) {
-    const perList = [
-      { label: '查看列表', value: 'a', disabled: true },
-      { label: '只读', value: 'b', disabled: true },
-      { label: '下载', value: 'c' },
-      { label: '删除', value: 'd' },
-      { label: '授权', value: 'e' },
-    ];
-
-    const rowSelection = {
-      onChange: (selectedRowKeys, selectedRows) => {
-        console.log(
-          `selectedRowKeys: ${selectedRowKeys}`,
-          'selectedRows: ',
-          selectedRows,
-        );
-      },
-    };
-
-    return (
-      <Modal
-        title="新增权限"
-        open={addOpen}
-        onCancel={() => setAddOpen(false)}
-        width={800}
-      >
-        <Table
-          title={() => '文档列表'}
-          columns={columns.slice(0, -1)}
-          dataSource={tempData}
-          pagination={false}
-          rowSelection={rowSelection}
-          destroyOnClose
-        />
-        <div style={{ margin: '20px 0px' }}>
-          <span style={{ marginRight: 20 }}>选择用户:</span>
-          <TreeSelect multiple={true} style={{ width: 200 }}></TreeSelect>
-        </div>
-        <div>
-          <span style={{ marginRight: 20 }}>选择权限:</span>
-          <Checkbox.Group options={perList} defaultValue={['a', 'b']} />
-        </div>
-      </Modal>
-    );
-  }
 }
 
 export default FileManagement;