Просмотр исходного кода

优化文档管理功能,新增个人文档分类和编码申请逻辑

yusheng 8 месяцев назад
Родитель
Сommit
867ea705cd

+ 22 - 15
src/components/addDoc/api/index.js

@@ -13,9 +13,9 @@ export async function getDocTreeListAPI(data) {
 }
 
 /**
-* 查询文件数据
-* @data data
-*/
+ * 查询文件数据
+ * @data data
+ */
 export async function filePageAPI(data) {
   const res = await request.post('/fm/file/pageBusiness', data);
   if (res.data.code == 0) {
@@ -51,7 +51,7 @@ export async function fileGetByIdAPI(id) {
  * ids查询文件列表
  * @data data
  */
- export async function queryIds(data) {
+export async function queryIds(data) {
   const res = await request.post('/fm/file/queryIds', data);
   if (res.data.code == 0) {
     return res.data.data;
@@ -59,12 +59,12 @@ export async function fileGetByIdAPI(id) {
   return Promise.reject(new Error(res.data.message));
 }
 
-
-
-
 // 获取编码树
 export async function selectTreeList(data) {
-  const res = await request.post(`/main/business_code_category/selectTreeList`, data);
+  const res = await request.post(
+    `/main/business_code_category/selectTreeList`,
+    data
+  );
   if (res.data.code == 0) {
     return res.data.data;
   }
@@ -72,7 +72,10 @@ export async function selectTreeList(data) {
 }
 // 获取右侧列表
 export async function listParentId(data) {
-  const res = await request.post(`/main/business_code_category/listPageParentId`, data);
+  const res = await request.post(
+    `/main/business_code_category/listPageParentId`,
+    data
+  );
   if (res.data.code == 0) {
     return res.data.data;
   }
@@ -87,10 +90,11 @@ export async function pageSegment(data) {
   return Promise.reject(new Error(res.data.message));
 }
 
-
 // 生成编码
 export async function getCode(id) {
-  const res = await request.get(`/main/business_code_category/applyForCode/`+id);
+  const res = await request.get(
+    `/main/business_code_category/applyForCode/` + id
+  );
   if (res.data.code == 0) {
     return res.data.data;
   }
@@ -101,7 +105,7 @@ export async function getCode(id) {
  * 上传文件
  * @param file 文件
  */
- export async function uploadFileNew (data) {
+export async function uploadFileNew(data) {
   const formData = new FormData();
   formData.append('multiPartFile', data.multiPartFile);
   formData.append('module', data.module);
@@ -112,11 +116,14 @@ export async function getCode(id) {
   return Promise.reject(new Error(res.data.message));
 }
 // 编码方案
-export async function listCode() {
-  const res = await request.get(`/main/business_code_category/listCode/WD0001`);
+export async function listCode(data = {}) {
+  const res = await request.get(
+    `/main/business_code_category/listCode/${data.id || '0'}` +
+      '?parentId=' +
+      (data.parentId || '')
+  );
   if (res.data.code == 0) {
     return res.data.data;
   }
   return Promise.reject(new Error(res.data.message));
 }
-

+ 7 - 3
src/components/addDoc/doc_template.vue

@@ -11,7 +11,11 @@
           <ele-toolbar class="ele-toolbar-actions">
             <div style="margin: 5px 0"> </div>
           </ele-toolbar>
-          <div class="ele-border-lighter sys-organization-list">
+
+          <div
+            class="ele-border-lighter sys-organization-list"
+            style="height: 65vh"
+          >
             <el-tree
               ref="tree"
               :data="data"
@@ -23,7 +27,7 @@
               :default-expand-all="true"
               @node-click="onNodeClick"
             >
-              <span class="custom-tree-node" slot-scope="{ node }">
+              <span class="custom-tree-node" slot-scope="{ node, data }">
                 <ElementTreeLine
                   :node="node"
                   :showLabelLine="true"
@@ -74,7 +78,7 @@
       };
     },
     props: {
-      lcyStatus: null, //1:文档工作区 2:文档归档区 3:文档发布区 4:文档废止区
+      lcyStatus: '', //1:文档工作区 2:文档归档区 3:文档发布区 4:文档废止区
 
       disabledTableList: {
         //已选择列表

+ 213 - 147
src/components/addDoc/file-edit.vue

@@ -9,9 +9,38 @@
     @close="cancel"
     :title="title"
     ref="Emodal"
+    :maxable="true"
+    :resizable="true"
   >
+    <el-tabs
+      v-model="activeName"
+      type="card"
+      @tab-click="handleClick"
+      style="margin-bottom: 10px"
+    >
+      <el-tab-pane label="文档工作区" name="1"></el-tab-pane>
+      <el-tab-pane label="个人文档" name="2"></el-tab-pane>
+    </el-tabs>
     <el-form ref="form" :model="form" :rules="rules" label-width="82px">
       <el-row :gutter="15">
+        <el-col :span="24">
+          <el-form-item label="文档位置" prop="directoryId">
+            <el-cascader
+              style="width: 100%"
+              v-model="form.directoryId"
+              :options="folderList"
+              @change="initFileCode"
+              ref="cascaderRef"
+              :props="{
+                value: 'id',
+                label: 'name',
+                children: 'sonDirectoryList',
+                emitPath: false,
+                checkStrictly: true
+              }"
+            ></el-cascader>
+          </el-form-item>
+        </el-col>
         <el-col :span="24">
           <el-form-item label="编码分类" prop="codeType">
             <ele-tree-select
@@ -63,27 +92,11 @@
                 :multiple="true"
                 @fileChange="fileChange"
               >
-
               </fileUpload>
             </div>
           </el-form-item>
         </el-col>
-        <el-col :span="24">
-          <el-form-item label="文档位置" prop="directoryId">
-            <el-cascader
-              style="width: 100%"
-              v-model="form.directoryId"
-              :options="folderList"
-              :props="{
-                value: 'id',
-                label: 'name',
-                children: 'sonDirectoryList',
-                emitPath: false,
-                checkStrictly: true
-              }"
-            ></el-cascader>
-          </el-form-item>
-        </el-col>
+
         <el-col :span="24">
           <el-form-item label="备注" prop="remark">
             <el-input
@@ -105,159 +118,212 @@
 </template>
 
 <script>
-import { fileSaveAPI,selectTreeList, listParentId,getDocTreeListAPI,listCode} from './api/index';
-import FileUpload from './fileUpload.vue';
-import { setFolderList } from './util.js';
-import { mapGetters } from 'vuex';
-export default {
-  components: { FileUpload },
+  import {
+    fileSaveAPI,
+    selectTreeList,
+    listParentId,
+    getDocTreeListAPI,
+    listCode
+  } from './api/index';
+  import FileUpload from './fileUpload.vue';
+  import { setFolderList } from './util.js';
+  import { mapGetters } from 'vuex';
+  export default {
+    components: { FileUpload },
 
-  data() {
-    const defaultForm = {
-      name: '', //名称
-      type: '', //类型
-      sizeUnit: '', //大小,
-      unit: '', //单位
-      remark: '', //备注
-      status: '', //状态
-      storagePathId: '',
-      directoryId: '',
-      businessCodeId: '',
-      storagePath: [],
-      id: '',
-      lcyStatus: 1,
-      fileType:0
-    };
-    return {
-      rules: {
-        businessCodeId: [
-          { required: true, message: '请选择', trigger: 'blur' }
-        ],
-        // codeType: [{ required: true, message: '请选择', trigger: 'blur' }],
-        directoryId: [{ required: true, message: '请选择', trigger: 'blur' }],
-        storagePath: [{ required: true, message: '请选择', trigger: 'blur' }]
-      },
-      templateVisible: false,
-      folderList: [],
-      list: [],
-      options: [],
-      defaultForm,
-      code: '',
-      // 表单数据
-      form: { ...defaultForm },
+    data() {
+      const defaultForm = {
+        name: '', //名称
+        type: '1', //类型
+        sizeUnit: '', //大小,
+        unit: '', //单位
+        remark: '', //备注
+        status: '', //状态
+        storagePathId: '',
+        directoryId: '',
+        businessCodeId: '',
+        storagePath: [],
+        id: '',
+        lcyStatus: 1,
+        fileType: 0
+      };
+      return {
+        activeName: '1',
+        rules: {
+          businessCodeId: [
+            { required: true, message: '请选择', trigger: 'blur' }
+          ],
+          // codeType: [{ required: true, message: '请选择', trigger: 'blur' }],
+          directoryId: [{ required: true, message: '请选择', trigger: 'blur' }],
+          storagePath: [{ required: true, message: '请选择', trigger: 'blur' }]
+        },
+        templateVisible: false,
+        folderList: [],
+        allFolderList: [],
+        myFolderList: [],
+        list: [],
+        options: [],
+        defaultForm,
+        code: '',
+        // 表单数据
+        form: { ...defaultForm },
 
-      // 提交状态
-      loading: false,
-      showEditFlag: false,
-      title: '',
-      type: '新建附件'
-    };
-  },
-  computed: {
-    // 是否开启响应式布局
-    styleResponsive() {
-      return this.$store.state.theme.styleResponsive;
+        // 提交状态
+        loading: false,
+        showEditFlag: false,
+        title: '',
+        type: '新建附件',
+        nodeData: {}
+      };
     },
-    ...mapGetters(['user'])
-  },
-  async created() {
-    let query = {
-      type: 0,
-      currentUserId: this.user.info.userId
-    };
-    this.folderList = await getDocTreeListAPI(query);
-    setFolderList(this.folderList); //权限过滤
-  },
-  methods: {
-    async open() {
-    
-      this.showEditFlag = true;
-      this.list = await selectTreeList();
-      this.options= await listCode();
-      if(this.options.length>0){
-        this.form.businessCodeId=this.options[0].id
-      }
-      this.setTree(this.list);
+    computed: {
+      // 是否开启响应式布局
+      styleResponsive() {
+        return this.$store.state.theme.styleResponsive;
+      },
+      ...mapGetters(['user'])
     },
-    setTree(data) {
-      data.forEach((item) => {
-        item.sonDirectoryList = item.sonDirectoryList.filter(
-          (item) => item.type == 1
-        );
-        if (item.sonDirectoryList.length > 0) {
-          this.setTree(item.sonDirectoryList);
-        }
+    async created() {
+      this.allFolderList = await getDocTreeListAPI({
+        type: 0,
+        currentUserId: this.user.info.userId
       });
-    },
-    async typeChange(val) {
-      let data = await listParentId({
-        pageNum: 1,
-        size: 100,
-        parentId: val
+      this.myFolderList = await getDocTreeListAPI({
+        type: 1,
+        currentUserId: this.user.info.userId
       });
-      this.options = data.list.filter((item) => item.type == 2);
-      this.form.businessCodeId = '';
-    },
-
-    fileChange(file) {
-      this.form.name = file.name.replace(/\.[^/.]+$/, '');
+      this.folderList = this.allFolderList;
+      setFolderList(this.folderList); //权限过滤
     },
-
-    /* 保存编辑 */
-    save() {
-      this.$refs.form.validate(async (valid) => {
-        if (!valid) {
-          return false;
+    methods: {
+      handleClick() {
+        this.form.directoryId = '';
+        this.form.businessCodeId = '';
+        this.form.codeType = '';
+        if (this.activeName == 2) {
+          this.folderList = this.myFolderList;
+        } else {
+          this.folderList = this.allFolderList;
+        }
+      },
+      async getTreeCode() {
+        let nodeData = {};
+        await this.$nextTick(() => {
+          // console.log(this.$refs,'this.$refs')
+          nodeData =
+            this.$refs.cascaderRef && this.$refs.cascaderRef.getCheckedNodes();
+        });
+        this.nodeData = {
+          id: nodeData[0]?.data?.id,
+          parentId:
+            nodeData[0]?.data?.parentId != 0 ? nodeData[0]?.data?.parentId : ''
+        };
+      },
+      async initFileCode() {
+        await this.getTreeCode();
+        this.options = this.nodeData.id ? await listCode(this.nodeData) : [];
+        if (this.options.length > 0) {
+          this.form.businessCodeId = this.options[0].id;
+          this.form.codeType = this.options[0].parentId;
+        } else {
+          this.form.businessCodeId = '';
         }
+      },
+      async open() {
+        this.showEditFlag = true;
+        this.$nextTick(async () => {
+          this.list = await selectTreeList();
+          await this.initFileCode();
+          this.setTree(this.list);
+        });
+      },
 
-        const data = {
-          ...this.form,
+      setTree(data) {
+        data.forEach((item) => {
+          item.sonDirectoryList = item.sonDirectoryList.filter(
+            (item) => item.type == 1
+          );
+          if (item.sonDirectoryList.length > 0) {
+            this.setTree(item.sonDirectoryList);
+          }
+        });
+      },
+      async typeChange(val) {
+        let obj = {
+          pageNum: 1,
+          size: 100,
+          parentId: val
         };
+        if (this.activeName == 1) {
+          obj['objId'] = this.nodeData?.id;
+          obj['objParentId'] = this.nodeData?.parentId;
+        }
+        let data = await listParentId(obj);
+        this.options = data.list.filter((item) => item.type == 2);
+        this.form.businessCodeId = '';
+      },
+
+      fileChange(file) {
+        this.form.name = file.name.replace(/\.[^/.]+$/, '');
+      },
 
-        this.loading = true;
-        fileSaveAPI(data)
-          .then( (msg) => {
-            this.loading = false;
+      /* 保存编辑 */
+      save() {
+        this.$refs.form.validate(async (valid) => {
+          if (!valid) {
+            return false;
+          }
 
-            this.cancel();
-            this.$emit('done',msg);
-          })
-          .catch((e) => {
-            this.loading = false;
-          });
-      });
-    },
+          let data = {
+            ...this.form
+          };
+          if (this.activeName == 2) {
+            data.fileType = 1;
+          }
+          this.loading = true;
+          fileSaveAPI(data)
+            .then((msg) => {
+              this.loading = false;
+
+              this.cancel();
+              this.$emit('done', msg);
+            })
+            .catch((e) => {
+              this.loading = false;
+            });
+        });
+      },
 
-    cancel() {
-      this.form = { ...this.defaultForm };
-      this.$refs.form.clearValidate();
-      this.showEditFlag = false;
+      cancel() {
+        this.form = { ...this.defaultForm, directoryId: this.form.directoryId };
+        this.$refs.form.clearValidate();
+        this.showEditFlag = false;
+      }
     }
-  }
-};
+  };
 </script>
 <style scoped lang="scss">
-.aaa {
-  width: 100%;
-
-  ::v-deep .upload-demo {
+  .aaa {
     width: 100%;
 
-    .el-upload--text {
+    ::v-deep .upload-demo {
       width: 100%;
 
-      button {
+      .el-upload--text {
         width: 100%;
-        background: #ffffff;
-        border: 1px solid #dbdbdb;
-        border-radius: 5px;
+
+        button {
+          width: 100%;
+          background: #ffffff;
+          border: 1px solid #dbdbdb;
+          border-radius: 5px;
+        }
       }
-    }
 
-    .el-upload-list {
-      transform: translate(10px, -39px);
-      position: absolute;
+      .el-upload-list {
+        transform: translate(10px, -39px);
+        position: absolute;
+      }
     }
   }
-}
 </style>

+ 0 - 1
src/components/addDoc/file-table-listTemplate.vue

@@ -6,7 +6,6 @@
       :columns="columns"
       :datasource="datasource"
       tool-class="ele-toolbar-form"
-      :needPage="false"
       row-key="id"
       :selection.sync="selection"
       :toolbar="false"

+ 1 - 0
src/components/addDoc/fileUpload.vue

@@ -180,6 +180,7 @@
           }).then(() => {
             return true;
           });
+          return true;
         } else {
           return true;
         }

+ 3 - 13
src/components/addDoc/getCode.vue

@@ -8,6 +8,8 @@
     append-to-body
     @close="cancel"
     title="申请编码"
+    :maxable="true"
+    :resizable="true"
   >
     <el-form ref="form" :model="form" :rules="rules" label-width="82px">
       <el-row :gutter="15">
@@ -61,7 +63,6 @@
 
 <script>
   import { selectTreeList, listParentId, getCode } from './api';
-  import headerTitle from '@/components/header-title/index.vue';
 
   export default {
     data() {
@@ -90,7 +91,6 @@
       }
     },
     components: {
-      headerTitle
     },
     created() {},
     methods: {
@@ -119,17 +119,7 @@
         this.form.type1 = '';
       },
       async type1Change(val) {
-        this.form.code = await getCode(val);
-        // let data = await pageSegment({
-        //   pageNum: 1,
-        //   size: 100,
-        //   businessCodeCategoryId: val
-        // });
-        // data.list.map((item) =>{
-        //   console.log(item,'dsds')
-        // });
-        // console.log(code, 'ds');
-        // this.options = data.list.map((item) => item.type == 2);
+        // this.form.code = await getCode(val);
       },
       /* 保存编辑 */
       save() {

+ 5 - 1
src/components/addDoc/index.vue

@@ -6,6 +6,7 @@
         v-if="type != 'view'"
         type="primary"
         @click="handleUpload"
+        :size="size"
       >
         上传</el-button
       >
@@ -43,6 +44,10 @@
         default: () => {
           return [];
         }
+      },
+      size: {
+        type: String,
+        default: 'mini'
       }
     },
     data() {
@@ -53,7 +58,6 @@
     watch: {
       value: {
         handler(newVal) {
-          console.log(newVal, '=======');
           this.selectVal = newVal || [];
         },
         immediate: true

+ 4 - 0
src/components/addDoc/main.vue

@@ -6,6 +6,8 @@
     custom-class="ele-dialog-form"
     append-to-body
     ref="Emodal"
+    :maxable="true"
+    :resizable="true"
   >
     <!-- 数据表格 -->
     <ele-pro-table
@@ -60,6 +62,8 @@
       :close-on-click-modal="false"
       custom-class="ele-dialog-form"
       append-to-body
+      :maxable="true"
+      :resizable="true"
     >
       <doc_template
         :disabledTableList="tableList"

+ 2 - 2
src/components/addDoc/util.js

@@ -1,6 +1,6 @@
 import store from '@/store';
-const userId = store.state.user.info.userId;
-const userName = store.state.user.info.name;
+const userId = store.state.user?.info?.userId;
+const userName = store.state.user?.info?.name;
 export function isPower(data = {}, power, selection = []) {
   if (power == 'add' && data.userAuthority.length == 0) {
     //文件夹默认开放新增权限

+ 3 - 1
src/enum/dict.js

@@ -41,7 +41,9 @@ export default {
   规则周期: 'rule_cycle',
   流程实例的结果: 'bpm_process_instance_result',
   取样类型: 'quality_method_code',
-  放行类型: 'checklist_type'
+  放行类型: 'checklist_type',
+  文档类型: 'doc_type'
+
 };
 export const numberList = ['date_method'];