scorpioyq пре 3 година
родитељ
комит
3eb35a80cd

+ 3 - 0
src/api/project/index.js

@@ -38,6 +38,9 @@ export default {
   folderList (params) { // 阶段包含文件夹列表
     return fetch('/blade-project-manage/projectstagefilefolder/v1/getProjectStageFileList', params)
   },
+  sqRecord (params) { // 文件夹授权记录
+    return fetch('/blade-project-manage/qrcode/v1/grantLog', params)
+  },
   findFiles (params) { // 文件搜索
     return fetch('/blade-project-manage/bladefile/v1/findFileList', params)
   },

+ 1 - 1
src/assets/svg/1.svg

@@ -1 +1 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="45" height="45" viewBox="0 0 45 45"><defs><style>.a{fill:#ffe5d2;}.b{fill:#bc002d;}.c{fill:#ef716f;}</style></defs><g transform="translate(-45 -473)"><circle class="a" cx="22.5" cy="22.5" r="22.5" transform="translate(45 473)"/><g transform="translate(1478 -7.148)"><g transform="translate(-1419.347 488)"><path class="b" d="M-1414.005,495.99h5.326a4,4,0,0,0,3.995-3.995,4,4,0,0,0-3.995-3.995h-5.326a4,4,0,0,0-3.995,3.995A4,4,0,0,0-1414.005,495.99Z" transform="translate(1418 -488)"/><path class="b" d="M-1408.679,500h-5.326a4,4,0,0,0-3.995,3.995,4,4,0,0,0,3.995,3.995h5.326a4,4,0,0,0,3.995-3.995A4,4,0,0,0-1408.679,500Z" transform="translate(1418 -489.347)"/><path class="b" d="M-1408.679,512h-5.326a4,4,0,0,0-3.995,3.995,4,4,0,0,0,3.995,3.995h5.326a4,4,0,0,0,3.995-3.995A4,4,0,0,0-1408.679,512Z" transform="translate(1418 -490.694)"/></g><g transform="translate(-1430 490.663)"><path class="c" d="M-1425.292,500.129a.888.888,0,0,0-.018,1.255l1.052,1.083a4.852,4.852,0,0,1-3.966-4.809,4.829,4.829,0,0,1,4.762-4.883h1.831V491h-1.831a6.605,6.605,0,0,0-6.537,6.658,6.623,6.623,0,0,0,5.752,6.606l-1.006.868a.887.887,0,0,0-.092,1.252.882.882,0,0,0,.672.308.884.884,0,0,0,.58-.216l3.377-2.913-3.32-3.417A.886.886,0,0,0-1425.292,500.129Z" transform="translate(1430 -491)"/><path class="c" d="M-1391.748,509.658a6.605,6.605,0,0,0-6.537-6.658h-1.831v1.775h1.831a4.829,4.829,0,0,1,4.762,4.883,4.852,4.852,0,0,1-3.966,4.809l1.052-1.083a.888.888,0,0,0-.018-1.255.888.888,0,0,0-1.256.018l-3.319,3.417,3.376,2.913a.886.886,0,0,0,.58.216.884.884,0,0,0,.673-.308.887.887,0,0,0-.092-1.252l-1.007-.868A6.623,6.623,0,0,0-1391.748,509.658Z" transform="translate(1426.748 -492.347)"/></g></g></g></svg>
+<svg xmlns="http://www.w3.org/2000/svg" width="45" height="45" viewBox="0 0 45 45"><defs><style>.a{fill:#f1e1ce;}.b{fill:#ab7630;}.c{fill:#db9c4b;}</style></defs><g transform="translate(-45 -473)"><circle class="a" cx="22.5" cy="22.5" r="22.5" transform="translate(45 473)"/><g transform="translate(1478 -7.148)"><g transform="translate(-1419.347 488)"><path class="b" d="M-1414.005,495.99h5.326a4,4,0,0,0,3.995-3.995,4,4,0,0,0-3.995-3.995h-5.326a4,4,0,0,0-3.995,3.995A4,4,0,0,0-1414.005,495.99Z" transform="translate(1418 -488)"/><path class="b" d="M-1408.679,500h-5.326a4,4,0,0,0-3.995,3.995,4,4,0,0,0,3.995,3.995h5.326a4,4,0,0,0,3.995-3.995A4,4,0,0,0-1408.679,500Z" transform="translate(1418 -489.347)"/><path class="b" d="M-1408.679,512h-5.326a4,4,0,0,0-3.995,3.995,4,4,0,0,0,3.995,3.995h5.326a4,4,0,0,0,3.995-3.995A4,4,0,0,0-1408.679,512Z" transform="translate(1418 -490.694)"/></g><g transform="translate(-1430 490.663)"><path class="c" d="M-1425.292,500.129a.888.888,0,0,0-.018,1.255l1.052,1.083a4.852,4.852,0,0,1-3.966-4.809,4.829,4.829,0,0,1,4.762-4.883h1.831V491h-1.831a6.605,6.605,0,0,0-6.537,6.658,6.623,6.623,0,0,0,5.752,6.606l-1.006.868a.887.887,0,0,0-.092,1.252.882.882,0,0,0,.672.308.884.884,0,0,0,.58-.216l3.377-2.913-3.32-3.417A.886.886,0,0,0-1425.292,500.129Z" transform="translate(1430 -491)"/><path class="c" d="M-1391.748,509.658a6.605,6.605,0,0,0-6.537-6.658h-1.831v1.775h1.831a4.829,4.829,0,0,1,4.762,4.883,4.852,4.852,0,0,1-3.966,4.809l1.052-1.083a.888.888,0,0,0-.018-1.255.888.888,0,0,0-1.256.018l-3.319,3.417,3.376,2.913a.886.886,0,0,0,.58.216.884.884,0,0,0,.673-.308.887.887,0,0,0-.092-1.252l-1.007-.868A6.623,6.623,0,0,0-1391.748,509.658Z" transform="translate(1426.748 -492.347)"/></g></g></g></svg>

+ 1 - 1
src/assets/svg/2.svg

@@ -1 +1 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="45" height="45" viewBox="0 0 45 45"><defs><style>.a{fill:#ffe5d2;}.b{fill:#bc002d;}.c{fill:#d9e6ff;}.d{fill:#ef716f;}</style></defs><g transform="translate(-43 -473)"><circle class="a" cx="22.5" cy="22.5" r="22.5" transform="translate(43 473)"/><g transform="translate(1496 -47.686)"><path class="b" d="M-1435.976,535.052l-1.663-1.663a1.33,1.33,0,0,0-.941-.39h-6.091a1.329,1.329,0,0,0-1.329,1.329v19.042h29.229V537.433a1.776,1.776,0,0,0-1.776-1.776h-15.969A2.067,2.067,0,0,1-1435.976,535.052Z"/><rect class="c" width="23" height="13" rx="2.077" transform="translate(-1442 536.686)"/><path class="d" d="M-1416.548,554.057H-1446l1.579-13.584a1.76,1.76,0,0,1,1.806-1.474h25.8a1.716,1.716,0,0,1,1.806,1.818Z" transform="translate(0 -0.686)"/></g></g></svg>
+<svg xmlns="http://www.w3.org/2000/svg" width="45" height="45" viewBox="0 0 45 45"><defs><style>.a{fill:#f1e1ce;}.b{fill:#ab7630;}.c{fill:#d9e6ff;}.d{fill:#db9c4b;}</style></defs><g transform="translate(-43 -473)"><circle class="a" cx="22.5" cy="22.5" r="22.5" transform="translate(43 473)"/><g transform="translate(1496 -47.686)"><path class="b" d="M-1435.976,535.052l-1.663-1.663a1.33,1.33,0,0,0-.941-.39h-6.091a1.329,1.329,0,0,0-1.329,1.329v19.042h29.229V537.433a1.776,1.776,0,0,0-1.776-1.776h-15.969A2.067,2.067,0,0,1-1435.976,535.052Z"/><rect class="c" width="23" height="13" rx="2.077" transform="translate(-1442 536.686)"/><path class="d" d="M-1416.548,554.057H-1446l1.579-13.584a1.76,1.76,0,0,1,1.806-1.474h25.8a1.716,1.716,0,0,1,1.806,1.818Z" transform="translate(0 -0.686)"/></g></g></svg>

+ 1 - 0
src/assets/svg/3.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="45" height="45" viewBox="0 0 45 45"><defs><style>.a{fill:#f1e1ce;}.b{fill:#db9c4b;}.c{fill:#ab7630;}</style></defs><g transform="translate(-1242 -508)"><g transform="translate(1199 35)"><circle class="a" cx="22.5" cy="22.5" r="22.5" transform="translate(43 473)"/></g><g transform="translate(2655.368 -9.383)"><path class="b" d="M-1378.176,533.163V546.6a1.723,1.723,0,0,1-1.088,1.6l-10.773,4.311-.191.075a1.7,1.7,0,0,1-1.279,0l-.191-.075-10.773-4.311a1.723,1.723,0,0,1-1.088-1.6v-13.44c0-.091.008-.183.017-.266a1.736,1.736,0,0,1,1.072-1.337l.042-.017,10.923-4.369a1.7,1.7,0,0,1,1.279,0l10.931,4.369.033.017a1.736,1.736,0,0,1,1.072,1.337C-1378.184,532.981-1378.176,533.072-1378.176,533.163Z" transform="translate(0 0)"/><path class="c" d="M-1378.189,533.814l-11.845,4.735-.831.332-.831-.332-11.845-4.735a1.736,1.736,0,0,1,1.072-1.337l.042-.017,11.562,4.627,11.571-4.627.033.017A1.735,1.735,0,0,1-1378.189,533.814Z" transform="translate(-0.003 -0.916)"/><path class="c" d="M-1387.619,539.11v15.45l-.191.075a1.7,1.7,0,0,1-1.279,0l-.191-.075V539.11Z" transform="translate(-2.419 -2.043)"/></g></g></svg>

+ 2 - 2
src/components/base-button.vue

@@ -25,7 +25,7 @@ export default {
     },
     width: {
       type: Number,
-      default: 120
+      default: 100
     }
   },
   methods: {
@@ -54,6 +54,6 @@ export default {
   font-size: 14px;
   background-color: white;
   color: #AB7630;
-  border: 1px solid #E9A856;
+  border: 1px solid #ECAB56;
 }
 </style>

+ 3 - 0
src/components/basic-step/index.vue

@@ -32,6 +32,9 @@
                   <el-icon v-if="item.isAccess === 2" style="margin-top: 3px;margin-left: 5px" color="#E2AE64">
                     <EditPen/>
                   </el-icon>
+                  <el-icon v-if="item.isAccess === 3" style="margin-top: 3px;margin-left: 5px" color="#E2AE64">
+                    <Lock/>
+                  </el-icon>
                 </div>
               </div>
             </div>

+ 31 - 12
src/views/database/component/dialog_info.vue

@@ -4,42 +4,51 @@
       <img v-if="info.suffix === 'docx'" class="icon-1" src="../../../assets/svg/folder/doc.svg">
       <img v-else-if="info.suffix === 'pdf'" class="icon-1" src="../../../assets/svg/folder/pdf.svg">
       <img v-else-if="info.suffix === 'xlsx'" class="icon-1" src="../../../assets/svg/folder/xls.svg">
+      <img v-else class="icon-1" src="../../../assets/svg/folder/other.svg">
     </div>
     <!------1----->
     <div class="flex flex-center full-width flex-justify-between mt-10">
       <div class="flex flex-col flex-align-start bg-1">
         <img class="icon-2" src="../../../assets/svg/1.svg">
         <span class="grey-6 bold mt-10">当前文件所在项目进度</span>
-        <span class="mt-10 main-color font-15 bold">{{ info.projectStageName ? info.projectStageName : '-' }}</span>
+        <span class="mt-10 font-15 bold sp">{{
+            info.projectStageName ? info.projectStageName : '-'
+          }}</span>
       </div>
       <div class="flex flex-col bg-1">
         <img class="icon-2" src="../../../assets/svg/2.svg">
         <span class="grey-6 bold mt-10">当前文件所在位置</span>
-        <span class="mt-10 main-color font-15 bold">{{ info.folderName ? info.folderName : '-' }}</span>
+        <span class="mt-10 font-15 bold sp">{{ info.folderName ? info.folderName : '-' }}</span>
       </div>
       <div class="flex flex-col bg-1">
-        <img class="icon-2" src="../../../assets/svg/2.svg">
+        <img class="icon-2" src="../../../assets/svg/3.svg">
         <span class="grey-6 bold mt-10">当前文件所属类型</span>
-        <span class="mt-10 main-color font-15 bold">{{ info.folderTypeName ? info.folderTypeName : '-' }}</span>
+        <span class="mt-10 font-15 bold sp">{{
+            info.folderTypeName ? info.folderTypeName : '-'
+          }}</span>
       </div>
     </div>
     <!------2----->
     <div class="flex flex-center flex-justify-between mt-20 full-width grey-bg radius grey-6-bg">
       <div class="flex flex-col flex-center margin" style="margin-left: 50px">
         <span class="grey-6 bold mt-10">上传人</span>
-        <span class="mt-5 main-color font-15 bold">{{ info.createUserName ? info.createUserName : '-' }}</span>
+        <span class="font-15 bold sp1">{{
+            info.createUserName ? info.createUserName : '-'
+          }}</span>
       </div>
       <div class="flex flex-col flex-center">
         <span class="grey-6 bold mt-10">上传时间</span>
-        <span class="mt-5 main-color font-15 bold">{{ info.createTime ? info.createTime : '-' }}</span>
+        <span class="font-15 sp1 bold">{{ info.createTime ? info.createTime : '-' }}</span>
       </div>
       <div class="flex flex-col flex-center">
         <span class="grey-6 bold mt-10">编制单位</span>
-        <span class="mt-5 main-color font-15 bold">{{ info.createDeptName ? info.createDeptName : '-' }}</span>
+        <span class="font-15 sp1 bold">{{
+            info.createDeptName ? info.createDeptName : '-'
+          }}</span>
       </div>
       <div class="flex flex-col flex-center" style="margin-right: 50px">
         <span class="grey-6 bold mt-10">文件大小</span>
-        <span class="mt-5 main-color font-15 bold">{{ size ? size : '-' }}</span>
+        <span class="font-15 sp1 bold">{{ size ? size : '-' }}</span>
       </div>
     </div>
     <!------3----->
@@ -61,9 +70,9 @@
     </div>
     <!------4----->
     <div class="flex flex-center flex-justify-between" style="width: 70%;margin-top: 40px">
-      <base-button icon="Download" title="下载" type="0" @click='download'/>
-      <base-button icon="UploadFilled" title="同步到" type="0" @click='showMsg'/>
-      <base-button icon="Link" title="分享到" type="0" @click='showMsg'/>
+      <base-button icon="View" title="预览" type="0" class="sp" @click='download'/>
+      <base-button icon="UploadFilled" title="同步到" type="0" class="sp" @click='showMsg'/>
+      <base-button icon="Link" title="分享到" class="sp" type="0" @click='showMsg'/>
     </div>
   </div>
 </template>
@@ -129,7 +138,7 @@ export default {
 
 .bg-2 {
   flex: 1;
-  background-color: #BC002D;
+  background-color: #AB7630;
   border-radius: 15px 0 0 15px
 }
 
@@ -153,4 +162,14 @@ export default {
   background-color: #DEDEDE;
   width: 96%;
 }
+
+.sp1 {
+  color: #AB7630;
+  margin-bottom: 5px;
+  margin-top: 10px;
+}
+
+.sp {
+  color: #AA1E1C
+}
 </style>

+ 27 - 19
src/views/database/component/list.vue

@@ -1,12 +1,12 @@
 <template>
   <div class="full-height full-width flex flex-col">
     <div class="white-bg flex flex-align-center padding">
-      <el-select
-          v-model="keyWords"
-          class="mt-10 ml-10"
-          clearable
-          placeholder="排列方式"
-      />
+      <!--      <el-select-->
+      <!--          v-model="keyWords"-->
+      <!--          class="mt-10 ml-10"-->
+      <!--          clearable-->
+      <!--          placeholder="排列方式"-->
+      <!--      />-->
       <div class="flex flex-align-center tip mt-10">
         <el-icon class="ml-20" color="#ECAB56">
           <WarningFilled/>
@@ -14,19 +14,21 @@
         <span class="ml-5">共找到相关资料{{ page.total }}份</span>
       </div>
     </div>
-    <avue-crud ref="crud"
-               v-model="form"
-               v-model:page="page"
-               :before-open="beforeOpen"
-               :data="data"
-               :option="option"
-               :table-loading="loading"
-               @row-del="rowDel"
-               @current-change="currentChange"
-               @size-change="sizeChange"
-               @refresh-change="refreshChange"
-               @on-load="onLoad">
-    </avue-crud>
+    <div class="crud">
+      <avue-crud ref="crud"
+                 v-model="form"
+                 v-model:page="page"
+                 :before-open="beforeOpen"
+                 :data="data"
+                 :option="option"
+                 :table-loading="loading"
+                 @row-del="rowDel"
+                 @current-change="currentChange"
+                 @size-change="sizeChange"
+                 @refresh-change="refreshChange"
+                 @on-load="onLoad">
+      </avue-crud>
+    </div>
     <el-dialog v-model="showInfo" append-to-body width="45%">
       <dialog-info :id="id"/>
     </el-dialog>
@@ -157,6 +159,12 @@ export default {
 </script>
 
 <style lang="scss" scoped>
+.crud {
+  :deep(.avue-crud__menu) {
+    min-height: 5px;
+  }
+}
+
 .tip {
   width: 260px;
   height: 32px;

+ 9 - 7
src/views/home/component/files_list.vue

@@ -6,7 +6,7 @@
         <span style="flex: 2;text-align: left">文件/文件夹名称</span>
         <span style="flex: 1">更新(上传)时间</span>
         <span class="flex-1">文件大小(数量)</span>
-        <span class="flex-1">是否同步</span>
+        <!--        <span class="flex-1">是否同步</span>-->
         <span class="flex-1">上传人</span>
         <span style="flex: 3">操作</span>
       </div>
@@ -18,7 +18,7 @@
           <img v-else-if="item.suffix === 'xlsx'" class="icon" src="../../../assets/svg/folder/xls.svg">
           <img v-else class="icon" src="../../../assets/svg/folder/other.svg">
         </div>
-        <div v-else class="flex-1">
+        <div v-else class="flex-1 pointer" @click="View(item)">
           <img v-if="item.isAccess === '1'" src="../../../assets/svg/folder/see.svg" style="width: 50px;height: 46px">
           <img v-if="item.isAccess === '2'" src="../../../assets/svg/folder/edit.svg" style="width: 50px;height: 46px">
           <img v-if="item.isAccess === '3'" src="../../../assets/svg/folder/invisible.svg"
@@ -27,19 +27,21 @@
         <span style="flex: 2;text-align: left">{{ item.title }}</span>
         <span style="flex: 1">{{ item.createTime.substring(0, 10) }}</span>
         <span v-if="item.type === '1'" class="flex-1">{{ item.size }}</span>
-        <span v-if="item.type === '2'" class="flex-1">{{item.fileChildrenNumber}}个</span>
-        <span v-if="item.type === '1'" class="flex-1">{{ item.status }}</span>
-        <span v-if="item.type === '2'" class="flex-1">-</span>
+        <span v-if="item.type === '2'" class="flex-1">{{ item.fileChildrenNumber }}个</span>
+        <!--        <span v-if="item.type === '1'" class="flex-1">{{ item.status }}</span>-->
+        <!--        <span v-if="item.type === '2'" class="flex-1">-</span>-->
         <span v-if="item.type === '1'" class="flex-1">{{ item.createUserName }}</span>
         <span v-if="item.type === '2'" class="flex-1">-</span>
         <div class="flex flex-center" style="flex: 3">
           <main-button icon="View" title="详情" width="85" @click="View(item)"/>
-          <main-button v-if="item.type === '1' && item.isAccess === '2' " icon="Download" title="下载" width="85" @click="downFile(item)"/>
+          <main-button v-if="item.type === '1' && item.isAccess === '2' " icon="Download" title="下载" width="85"
+                       @click="downFile(item)"/>
           <main-button v-else-if="item.type === '2' && item.isAccess === '2'" icon="Upload" title="上传文件" width="85"
                        @click="upload(item)"/>
           <main-button v-else-if="item.type === '2' && item.isAccess === '3'" icon="Position"
                        title="授权申请" width="85" @click="folderApply(item)"/>
-          <main-button v-if='permission.permissions.home_folder_del' icon="Delete" title="删除" width="85" @click="removeFile(item)"/>
+          <main-button v-if='permission.permissions.home_folder_del' icon="Delete" title="删除" width="85"
+                       @click="removeFile(item)"/>
         </div>
       </div>
     </div>

+ 223 - 0
src/views/home/component/grant_record.vue

@@ -0,0 +1,223 @@
+<template>
+  <div class="flex flex-col full-width full-height white-bg">
+    <div class="white-bg flex flex-col padding">
+      <div class="flex flex-align-center mb-10 tip">
+        <el-icon class="ml-20" color="#BC002D">
+          <WarningFilled/>
+        </el-icon>
+        <span class="ml-5">共授权过<span
+            class="main-color font-15 mr-5 ml-5 bold">{{ total }}</span>个文件夹</span>
+      </div>
+    </div>
+    <avue-crud ref="crud"
+               v-model="form"
+               :page="page"
+               :before-open="beforeOpen"
+               :data="data"
+               :option="option"
+               :table-loading="loading"
+               class="curd"
+               @current-change="currentChange"
+               @size-change="sizeChange"
+               @refresh-change="refreshChange"
+               @on-load="onLoad">
+      <template
+          v-slot:isExpired="{row}">
+        <el-tag :type="row.isExpired ? 'danger':''">{{ row.isExpired ? '过期' : '有效' }}</el-tag>
+      </template>
+      <template v-slot:menu="{row}">
+        <el-button icon="Operation" text @click="apply(row)">{{
+            row.isExpired ? '重新申请' : '申请延期'
+          }}
+        </el-button>
+      </template>
+    </avue-crud>
+    <el-dialog title='申请授权' v-model='applyShow' width='35%'>
+      <div class='full-width flex flex-center flex-col'>
+        <text class='full-width black text-left bold'>确认向业主申请 <span class="main-color bold font-15">{{
+            folderName
+          }}</span> 的管理权限?
+        </text>
+        <div class='full-width flex flex-align-center mt-20'>
+          <span class='font-14 bold'>授权时长</span>
+          <el-date-picker
+              v-model="applyTime"
+              class='ml-20'
+              end-placeholder="截止日期"
+              range-separator="至"
+              start-placeholder="开始日期"
+              type="daterange"
+              value-format='YYYY-MM-DD'
+          />
+        </div>
+        <el-divider/>
+        <div class='full-width flex flex-center'>
+          <el-button type='danger' plain @click="applyShow = false">取 消</el-button>
+          <el-button type='primary' @click='submit'>确 定</el-button>
+        </div>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+
+export default {
+  data () {
+    return {
+      applyShow: false,
+      applyTime: [],
+      currentFolder: null,
+      folderName: '',
+      loading: false,
+      data: [],
+      form: {},
+      option: {
+        calcHeight: 230,
+        refreshBtn: false,
+        tip: false,
+        columnBtn: false,
+        searchShow: true,
+        editBtn: false,
+        addBtn: false,
+        delBtn: false,
+        border: true,
+        index: true,
+        align: 'center',
+        viewBtn: false,
+        dialogClickModal: false,
+        column: [
+          {
+            label: '授权文件夹',
+            prop: 'folderName',
+            addDisplay: false,
+            editDisplay: false
+          },
+          {
+            label: '授权人员',
+            prop: 'ownerUserName'
+          },
+          {
+            label: '授权机构',
+            prop: 'ownerDeptName',
+            type: 'select'
+          },
+          {
+            label: '接受人员',
+            prop: 'providerUserName'
+          },
+          {
+            label: '接受机构',
+            prop: 'providerDeptName'
+          },
+          {
+            label: '授权状态',
+            prop: 'isExpired'
+          },
+          {
+            label: '授权到期时间',
+            prop: 'endTime'
+          }]
+      },
+      page: {
+        size: 10,
+        current: 1,
+        total: 0
+      },
+      total: ''
+    }
+  },
+  computed: {
+    // permissionList () {
+    //   return {
+    //     delBtn: vaildData(this.permissions.permissions.home_del, false)
+    //   }
+    // }
+  },
+  methods: {
+    onLoad (query = {}) {
+      this.loading = true
+      const data = { ...query, ...this.page }
+      this.$api.project.sqRecord(data).then(res => {
+        this.loading = false
+        if (res.code === 200) {
+          this.data = res.data.records
+          this.total = res.data.total
+          this.page.total = this.total
+          this.loading = false
+        }
+      })
+    },
+    beforeOpen (done, type) {
+      if (['view'].includes(type)) {
+        this.$router.push({
+          path: '/home/details',
+          query: { id: this.form.id, type: '0', ownerId: this.form.createUser }
+        })
+      } else if (type === 'edit') {
+        this.$alert('功能建设中,尽情期待...', '消息提醒', {
+          confirmButtonText: 'OK'
+        })
+        // this.$router.push({
+        //   path: '/home/details',
+        //   query: { id: this.form.id, type: '1' }
+        // })
+      }
+    },
+    currentChange (currentPage) {
+      this.page.currentPage = currentPage
+      // this.refreshChange()
+    },
+    sizeChange (pageSize) {
+      this.page.pageSize = pageSize
+      // this.refreshChange()
+    },
+    refreshChange () {
+      this.onLoad(this.query)
+    },
+    apply (row) {
+      this.currentFolder = row.fileFolderId
+      this.folderName = row.folderName
+      this.applyShow = true
+    },
+    submit () {
+      if (this.applyTime.length !== 2) {
+        this.$message.error('请选择授权时间')
+        return
+      }
+      const tmp = { projectId: this.$route.query.id, ownerId: this.$route.query.ownerId }
+      const item = { startTime: this.applyTime[0], endTime: this.applyTime[1], folderId: this.currentFolder }
+      const list = [item]
+      this.$api.project.apply(Object.assign(tmp, { folders: list })).then(res => {
+        if (res.code === 200) {
+          this.applyShow = false
+          this.$confirm(res.data, {
+            confirmButtonText: '确定',
+            cancelButtonText: '取消',
+            type: 'warning'
+          })
+        } else {
+          this.$message.error(res.msg)
+        }
+      })
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.tip {
+  width: 260px;
+  height: 38px;
+  background-color: #FBF6ED;
+  font-weight: 500;
+  flex-wrap: nowrap;
+  margin-left: 20px;
+}
+
+.curd {
+  :deep(.avue-crud__menu) {
+    min-height: 5px;
+  }
+}
+</style>

+ 123 - 6
src/views/home/component/historical.vue

@@ -4,24 +4,141 @@
       <div class="bold font-16 grey flex-child-average text-left" style="margin-left: 50px">
         <span>历史数据({{ total }})</span>
       </div>
-      <div class="flex flex-center flex-child-average flex-justify-end" style="margin-right: 50px">
-        <base-button class="mr-20" icon="User" title="授权查看" type="0"/>
-        <base-button icon="Upload" title="上传文件"/>
-      </div>
+      <!--      <div class="flex flex-center flex-child-average flex-justify-end" style="margin-right: 50px">-->
+      <!--        <base-button v-if="permissions.permissions.floder_detail_add" icon="Plus" title="添加文件夹"-->
+      <!--                     class="mr-5"-->
+      <!--                     type="0" @click="addShow = true"/>-->
+      <!--        <base-button icon="Upload" @click="show = true" title="上传文件"/>-->
+      <!--      </div>-->
     </div>
     <folder_list :folder="folderList" :total="total" :type="1" class="mt-20"/>
+    <el-dialog v-model="show"
+               append-to-body
+               center
+               title="附件上传(可批量)">
+      <uploadFile :data='{type:1,toStatus:0}' :max='20'
+                  @close='show = false'
+                  accept='.doc,docx,.pdf,.xls,.xlsx,.png,.jpg,.jpeg,.ppt,pptx'
+                  @success='success'/>
+    </el-dialog>
+    <el-dialog v-model='addShow' append-to-body width='40%'>
+      <div class="flex flex-col">
+        <el-form ref="ruleFormRef"
+                 :model="folderInfo"
+                 class="demo-ruleForm"
+                 label-width="120px"
+                 status-icon>
+          <el-form-item label="文件夹名称">
+            <el-input
+                v-model="folderInfo.title"
+                placeholder="填写文件夹名称"
+                style="width: 100%"
+            />
+          </el-form-item>
+        </el-form>
+        <div class="full-width flex flex-center mt-10">
+          <base-button icon="Lock" title="保存" type="1" @click="folderAdd"/>
+        </div>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
 <script>
 import folder_list from './folder_list.vue'
+import permissionStore from '@/store/permission.js'
+import { useStore } from '@/store/user.js'
+import baseButton from '@/components/base-button.vue'
+import uploadFile from '../../../components/upload-file.vue'
 
 export default {
-  name: "historical",
-  components: {folder_list},
+  name: 'historical',
+  components: { folder_list, baseButton, uploadFile },
   props: {
     folderList: Array,
     total: String
+  },
+  data () {
+    return {
+      show: false,
+      addShow: false,
+      folderInfo: {
+        title: '',
+        projectStageId: '',
+        projectId: '',
+        parentId: '',
+        dictKey: ''
+      },
+      fileList: [],
+      saveCount: 0,
+      libraryList: []
+    }
+  },
+  setup () {
+    const permissions = permissionStore()
+    const user = useStore()
+    return { permissions, user }
+  },
+  methods: {
+    success (res) {
+      this.fileList = res.fileList.map(res => {
+        const item = {}
+        item.title = res.response.data.originalFileName
+        item.suffix = res.response.data.suffix
+        item.volume = res.response.data.volume
+        item.fileId = res.response.data.id
+        item.url = res.response.data.filePath
+        item.fileFolderId = this.id
+        item.projectId = this.$route.query.projectId
+        return item
+      })
+      this.fileList.forEach(sub => {
+        this.saveCount++
+        if (['pdf', 'doc'].includes(sub.suffix)) {
+          this.saveLibrary(sub)
+        }
+        if (this.saveCount === this.fileList.length) {
+          this.saveCount = 0
+          this.addFile()
+        }
+      })
+    },
+    saveLibrary (sub) {
+      const data = { category: 4, content: '' }
+      this.$api.common.submit(Object.assign(sub, data)).then(res => {
+        if (res.code === 200) {
+          this.saveCount++
+          this.libraryList.push(res.data.id)
+        } else {
+          this.$message.error(res.msg)
+        }
+      })
+    },
+    addFile () {
+      this.$api.project.fileAdd(this.fileList).then(res => {
+        if (res.code === 200) {
+          this.show = false
+          this.$emit('reFiles')
+          this.$message.success(res.msg)
+        } else {
+          this.show = false
+          this.$message.error(res.msg)
+        }
+      })
+    },
+    folderAdd () {
+      this.folderInfo.projectId = this.projectId
+      this.folderInfo.parentId = this.id
+      this.$api.project.folderAdd(this.folderInfo).then(res => {
+        if (res.code === 200) {
+          this.addShow = false
+          this.$message.success(res.msg)
+          this.$emit('reFiles')
+        } else {
+          this.$message.error(res.msg)
+        }
+      })
+    }
   }
 }
 </script>

+ 9 - 3
src/views/home/component/left_bar.vue

@@ -1,7 +1,7 @@
 <template>
   <div>
-    <div class="white-bg top full-height flex flex-col flex-align-start hide-scrollbar" style='overflow-y: auto;'>
-      <div class="flex flex-col flex-center padding">
+    <div class="white-bg top full-height flex flex-col hide-scrollbar" style='overflow-y: auto;'>
+      <div class="flex flex-col flex-center mt-15 padding">
         <span class='font-16 bold  mb-10'>{{ data.name }}</span>
         <span class="font-16 bold mt-5" style="color:#787C90;">项目总投资额</span>
         <span class="mt-5 font-16 bold main-color">{{
@@ -9,7 +9,10 @@
           }}万元</span>
         <main-button :width="200" type="0" @click="proInfo"/>
         <el-divider></el-divider>
-        <span class="title">项目阶段-文件管理</span>
+        <div class="flex flex-center flex-justify-between full-width">
+          <span class="title ml-20">项目阶段-文件管理</span>
+          <span class="title mr-20 pointer" @click="record">授权记录</span>
+        </div>
       </div>
       <div style='margin-left: 30px'>
         <el-empty v-if='stage && stage.length === 0 '></el-empty>
@@ -53,6 +56,9 @@ export default {
   methods: {
     proInfo () {
       this.$emit('typeChange')
+    },
+    record () {
+      this.$emit('typeChange1')
     }
   }
 }

+ 13 - 8
src/views/home/details.vue

@@ -1,30 +1,33 @@
 <template>
   <div class='flex flex-justify-start full-height'>
     <div class="full-height">
-      <left-bar :active="type === '0' ? -1 : active " :data="data" :stage="stage" @typeChange="typeChange"/>
+      <left-bar :active="type === '0' ? -1 : active " :data="data" :stage="stage" @typeChange="typeChange"
+                @typeChange1="typeChange1"/>
     </div>
     <div class="full-height full-width white-bg padding-left padding-top" style="margin-left: 300px">
       <proinfo v-if="type === '0'" :data="data" :issue="list" @refInfo="proInfo" @refresh="issueList"/>
-      <folder-info v-else :id="id" :data='data' :projectStageId="projectStageId" />
+      <folder-info v-else-if="type === '1'" :id="id" :data='data' :projectStageId="projectStageId"/>
+      <grant-record v-else/>
     </div>
   </div>
 </template>
 
 <route>
-  {
-    name: '项目详情',
-    meta: { keepAlive: true }
-  }
+{
+name: '项目详情',
+meta: { keepAlive: true }
+}
 </route>
 
 <script>
 import leftBar from './component/left_bar.vue'
 import proinfo from './component/proinfo.vue'
 import folderInfo from './component/folder_info.vue'
+import grantRecord from '@/views/home/component/grant_record.vue'
 
 export default {
   name: '项目详情',
-  components: { leftBar, proinfo, folderInfo },
+  components: { leftBar, proinfo, folderInfo, grantRecord },
   watch: {
     stage: {
       handler (newValue) {
@@ -57,12 +60,14 @@ export default {
       this.active = index
       this.projectStageId = this.stage[index] === undefined ? '' : this.stage[index].id
     })
-    console.log('created')
   },
   methods: {
     typeChange () {
       this.type = '0'
     },
+    typeChange1 () {
+      this.type = '2'
+    },
     /**
      * 项目信息
      */