scorpio 2 سال پیش
والد
کامیت
7dffe4fdd5

+ 17 - 5
src/api/project/index.js

@@ -49,16 +49,16 @@ export default {
     return fetch('/blade-project-manage-v2/bladefile/v2/findFileList', params)
   },
   folderListAll (params) { // 历史数据文件夹列表
-    return fetch('/blade-project-manage-v2/filefolder/v2/list', params)
+    return fetch('/blade-project-manage-v2/folder/v2/history', params)
   },
   folderRemove (params) { // 删除文件夹
-    return fetch('/blade-project-manage-v2/filefolder/v2/remove', params, 'post')
+    return fetch('/blade-project-manage-v2/folder/v2/remove', params, 'post')
   },
   folderAdd (params) { // 添加文件夹
-    return fetch('/blade-project-manage-v2/filefolder/v2/save', params, 'post', 'json')
+    return fetch('/blade-project-manage-v2/folder/v2/submit', params, 'post', 'json')
   },
   folderUpdate (params) { // 文件夹更新
-    return fetch('/blade-project-manage-v2/filefolder/v2/update', params, 'post', 'json')
+    return fetch('/blade-project-manage-v2/folder/v2/submit', params, 'post', 'json')
   },
   fileList (params) { // 文件夹里包含文件列表
     return fetch('/blade-project-manage-v2/folder/v2/getListByFolderId', params)
@@ -73,7 +73,7 @@ export default {
     return fetch('/blade-project-manage-v2/folder/v2/saveFile', params, 'post', 'json')
   },
   fileRemove (params) { // 删除文件
-    return fetch('/blade-project-manage-v2/bladefile/v2/remove', params, 'post')
+    return fetch('/blade-project-manage-v2/folder/v2/remove', params, 'post', 'json')
   },
   /**
      * 业主主动授权
@@ -115,5 +115,17 @@ export default {
   },
   totalAmount (params) {
     return fetch('/blade-project-manage-v2/project/v2/getTotalAmount', params)
+  },
+  /**
+   * 是否需要归档
+   */
+  isHistory (params) {
+    return fetch('/blade-project-manage-v2/folder/v2/isHistory', params)
+  },
+  /**
+   * 归档
+   */
+  doneHistory (params) {
+    return fetch('/blade-project-manage-v2/folder/v2/history', params)
   }
 }

+ 11 - 11
src/layout/top.vue

@@ -98,18 +98,18 @@
 
 <script>
 import navStore from '../store/nav.js'
-import {useStore} from '../store/user.js'
+import { useStore } from '../store/user.js'
 import permissionStore from '@/store/permission.js'
 
 export default {
   name: 'top',
-  setup() {
+  setup () {
     const nav = navStore()
     const user = useStore()
     const permission = permissionStore()
-    return {nav, user, permission}
+    return { nav, user, permission }
   },
-  data() {
+  data () {
     return {
       show: false,
       keywords: '',
@@ -140,13 +140,13 @@ export default {
       },
       data: [],
       total: '',
-      isAll: 0,
+      isAll: 0
     }
   },
-  created() {
+  created () {
   },
   methods: {
-    dropDown(res) {
+    dropDown (res) {
       if (res === 'info') {
         this.$router.push('/user')
       } else if (res === 'logout') {
@@ -183,7 +183,7 @@ export default {
         this.searchTotal()
       }
     },
-    change(index, key) {
+    change (index, key) {
       this.active = index
       this.params.searchType = key
       if (this.params.searchType === 'all') {
@@ -205,7 +205,7 @@ export default {
         })
       }
     },
-    searchTotal(res) {
+    searchTotal (res) {
       if (res.key === 'Enter') {
         this.getTotal()
         this.$api.project.totalSearch(this.params).then(res => {
@@ -216,8 +216,8 @@ export default {
         })
       }
     },
-    getTotal() {
-      this.$api.project.total({keyword: this.params.keyword}).then(res => {
+    getTotal () {
+      this.$api.project.total({ keyword: this.params.keyword }).then(res => {
         if (res.code === 200) {
           this.type[0].count = res.data.projectTotal
           this.type[1].count = res.data.fileTotal

+ 1 - 1
src/views/company/index.vue

@@ -75,7 +75,7 @@
         @close='showImage = false'
     />
     <el-dialog v-model='authorShow' title='批量授权'>
-      <authorize :list='data' :folder-id='currentFolder.id' :extra='{type:2}' @close='authorShow = false'/>
+      <authorize :list='data' :folder-id='currentFolder.id' :extra='{type:2}' :author-type='false' @close='authorShow = false'/>
     </el-dialog>
   </el-row>
 </template>

+ 7 - 2
src/views/home/component/authorize.vue

@@ -1,10 +1,10 @@
 <template>
   <div class='flex flex-justify-between flex-col  full-width '>
-    <div class='flex flex-justify-start flex-align-center full-width'>
+    <div class='flex flex-justify-start flex-align-center full-width' v-if='authorType'>
       <span class='bold'>授权模式:</span>
       <el-radio-group v-model='grantType'>
         <el-radio :label="1">项目全托管</el-radio>
-        <el-radio :label="0">按项目授权</el-radio>
+        <el-radio :label="0">按文件授权</el-radio>
       </el-radio-group>
     </div>
     <el-tabs v-if='grantType === 0' class='mt-20' type='border-card' v-model='initType'>
@@ -80,6 +80,7 @@
         <vue-qr :currentLevel='3' :logoCornerRadius='4' :logoScale='0.25' :text='qrCodeText'
                 size='340'/>
         <span>右键复制二维码,通过微信进行分享</span>
+        {{qrCodeText}}
       </div>
     </el-dialog>
   </div>
@@ -108,6 +109,10 @@ export default {
     extra: {
       type: Object,
       default: null
+    },
+    authorType: {
+      type: Boolean,
+      default: true
     }
   },
   watch: {

+ 6 - 3
src/views/home/component/current.vue

@@ -92,10 +92,12 @@ export default {
       show: false,
       folderInfo: {
         title: '',
-        projectStageId: '',
+        stageId: '',
         projectId: '',
         parentId: '',
-        dictKey: ''
+        dictKey: '',
+        folderType: '1',
+        type: 2
       },
       fileList: [],
       saveCount: 0,
@@ -122,7 +124,7 @@ export default {
     this.isAccess = this.$route.query.isAccess
     this.projectId = this.$route.query.projectId
     this.folderInfo.dictKey = this.$route.query.dictKey
-    this.folderInfo.projectStageId = this.$route.query.projectStageId
+    this.folderInfo.stageId = this.$route.query.projectStageId
   },
   methods: {
     showClick () {
@@ -139,6 +141,7 @@ export default {
         item.parentId = this.id
         item.projectId = this.$route.query.projectId
         item.type = 1
+        item.dictKey = this.$route.query.dictKey
         item.stageId = this.$route.query.projectStageId
         return item
       })

+ 33 - 1
src/views/home/component/files_list.vue

@@ -25,7 +25,7 @@
           <img v-if="item.isAccess === 3" src="../../../assets/svg/folder/invisible.svg" class="icon-1">
         </div>
         <span style="flex: 1.5;text-align: left">{{ item.title }}</span>
-        <span class="flex-1">{{ item.createTime }}</span>
+        <span class="flex-1">{{ item.updateTime }}</span>
         <span v-if="item.type === 1" class="flex-05">{{ item.size }}</span>
         <span v-if="item.type === 2" class="flex-05">{{ item.fileAmount }}个</span>
         <span v-if="item.type === 1" class="flex-05">{{ item.createUserName }}</span>
@@ -167,8 +167,39 @@ export default {
   },
   created () {
     this.query = this.$route.query
+    this.isHistory()
   },
   methods: {
+    isHistory () {
+      const data = { folderId: this.query.id, projectId: this.query.projectId }
+      const _this = this
+      this.$api.project.isHistory(data).then(res => {
+        if (res.code === 200) {
+          if (res.data) {
+            this.$confirm('系统检测到您有文件可以归档,是否进行归档?', {
+              confirmButtonText: '确定',
+              cancelButtonText: '取消',
+              type: 'warning'
+            }).then((res) => {
+              if (res === 'confirm') {
+                _this.doHistory(data)
+              }
+            })
+          }
+        } else {
+          this.$message.error(res.msg)
+        }
+      })
+    },
+    doHistory (data) {
+      this.$api.project.doneHistory(data).then(res => {
+        if (res.code === 200) {
+          this.$message.success(res.msg)
+        } else {
+          this.$message.error(res.msg)
+        }
+      })
+    },
     View (item) {
       console.log(item)
       if (item.type === 1) {
@@ -215,6 +246,7 @@ export default {
         item.stageId = this.currentFolder.stageId
         item.parentId = this.currentFolder.id
         item.type = 1
+        item.dictKey = this.$route.query.dictKey
         return item
       })
       this.fileList.forEach(sub => {

+ 35 - 5
src/views/home/component/folder_info.vue

@@ -39,18 +39,20 @@
       <div class="flex flex-center mr-5 " style="flex: 1.2">
         <base-button v-if='permissions.permissions.home_folder_authorize' class="mr-20" icon="User" title="批量授权"
                      type="0" @click='authorizeShow = true'/>
-        <base-button class="mr-5" icon="Position"
-                     title="任务下发"
-                     type="0" @click='showClick'/>
         <base-button v-if='permissions.permissions.home_folder_new' icon="Plus" title="添加文件夹" type="0"
                      @click="addShow = true"/>
         <!--        <base-button v-if='permissions.permissions.home_folders_apply' class="ml-10" icon="User" title="批量授权"/>-->
       </div>
     </div>
     <div class="mt-20">
+<!--      <basic-curd-->
+<!--        :data='folderList'-->
+<!--        :option='option'-->
+<!--      />-->
       <folder-list :folder="folderList" :total="total" :project-id='id' :owner-id='data.createUser' :dict-key="dictKey"
                    @delFolder="getFolderList" @change='changePage'/>
     </div>
+<!--    新增文件夹-->
     <el-dialog v-model='addShow' append-to-body width='40%'>
       <div class="flex flex-col">
         <el-form ref="ruleFormRef"
@@ -102,10 +104,11 @@ import baseButton from '../../../components/base-button.vue'
 import folderList from './folder_list.vue'
 import permissionStore from '@/store/permission.js'
 import authorize from '@/views/home/component/authorize.vue'
+import basicCurd from '@/components/basic-curd/index.vue'
 
 export default {
   name: 'right2',
-  components: { baseButton, folderList, authorize },
+  components: { baseButton, folderList, authorize, basicCurd },
   props: {
     data: {
       type: Object,
@@ -159,7 +162,34 @@ export default {
         current: 1,
         size: 10
       },
-      findData: []
+      findData: [],
+      option: {
+        align: 'center',
+        menuAlign: 'center',
+        menuWidth: 380,
+        size: 'mini',
+        addBtn: false,
+        viewBtn: true,
+        editBtn: false,
+        refreshBtn: false,
+        columnBtn: false,
+        labelWidth: 140,
+        border: true,
+        column: [
+          {
+            label: '文件/文件夹名称',
+            prop: 'title'
+          },
+          {
+            label: '更新/上传时间',
+            prop: 'updateTime'
+          },
+          {
+            label: '文件',
+            prop: 'updateTime'
+          }
+        ]
+      }
     }
   },
   created () {

+ 1 - 0
src/views/home/component/folder_list.vue

@@ -281,6 +281,7 @@ export default {
         item.projectId = this.currentRow.projectId
         item.stageId = this.currentRow.stageId
         item.type = 1
+        item.dictKey = this.$route.query.dictKey
         return item
       })
       this.fileList.forEach(sub => {

+ 1 - 0
src/views/home/component/historical.vue

@@ -89,6 +89,7 @@ export default {
         item.fileId = res.response.data.id
         item.url = res.response.data.filePath
         item.fileFolderId = this.id
+        item.dictKey = this.$route.query.dictKey
         item.projectId = this.$route.query.projectId
         return item
       })

+ 2 - 2
src/views/home/component/owner_serach.vue

@@ -4,7 +4,7 @@
       <div class="flex flex-center">
         <el-form-item class="full-width" label="项目名称">
           <el-input
-              v-model="form.name"
+              v-model="form.projectName"
               clearable
               placeholder="输入项目关键字"
               prefix-icon="Search"
@@ -45,7 +45,7 @@ export default {
   data () {
     return {
       form: {
-        name: '', // 项目名称
+        projectName: '', // 项目名称
         projectType: ''// 项目分类
       },
       typeList: []

+ 3 - 2
src/views/home/files.vue

@@ -47,7 +47,7 @@ export default {
   },
   methods: {
     getFileList () {
-      const data = { id: this.id }
+      const data = { id: this.id, isHistory: 0 }
       this.$api.project.fileList(Object.assign(data, this.page)).then(res => {
         if (res.code === 200) {
           this.fileData = res.data
@@ -57,7 +57,8 @@ export default {
       })
     },
     getFolderAll () {
-      this.$api.project.folderListAll({ parentId: this.id, type: 1 }).then(res => {
+      // fixme
+      this.$api.project.fileList({ isHistory: 1, id: this.id }).then(res => {
         if (res.code === 200) {
           this.historyFolder = res.data.records.map(e => {
             e.folderName = e.title

+ 82 - 41
src/views/home/his_files.vue

@@ -6,27 +6,34 @@
         <span style="flex: 2">文件/文件夹名称</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>
       <el-empty v-if="fileData && fileData.length === 0"/>
-      <div v-for="item in fileData" class="flex flex-center border-bottom padding content-sp">
-        <div class="flex-1">
+      <div v-for="item in fileData" :key='item.id' class="flex flex-center  border-bottom padding content-sp">
+        <div class="flex-1" v-if='item.type === 1 '>
           <img v-if="item.suffix === 'docx'" class="icon" src="../../assets/svg/folder/doc.svg">
           <img v-else-if="item.suffix === 'pdf'" class="icon" src="../../assets/svg/folder/pdf.svg">
           <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 class="flex-1" v-if='item.type ===  2 '>
+          <img v-if="item.isAccess === 1" class="icon" src="../../assets/svg/folder/see.svg">
+          <img v-else-if="item.isAccess === 2" class="icon" src="../../assets/svg/folder/edit.svg">
+          <img v-else class="icon" src="../../assets/svg/folder/invisible.svg">
         </div>
         <span style="flex: 2">{{ item.title }}</span>
         <span style="flex: 1">{{ item.updateTime }}</span>
-        <span class="flex-1">{{ item.size }}</span>
-        <span class="flex-1">{{ item.status }}</span>
-        <span class="flex-1">{{ item.author }}</span>
+        <span class="flex-1" >{{ item.type !== 2 ? item.size: '-' }}</span>
+<!--        <span class="flex-1">{{ item.status }}</span>-->
+        <span class="flex-1">{{ item.createUserName }}</span>
         <div class="flex flex-center" style="flex: 3">
           <main-button icon="View" title="详情" width="85" @click="fileView(item)"/>
-          <main-button icon="Download" title="下载" width="85" @click="downFile(item)"/>
-          <main-button icon="UploadFilled" title="同步" width="85"/>
-          <main-button icon="Delete" title="删除" width="85" @click="removeFile(item)"/>
+          <main-button icon="Download" v-if='item.type !== 2' title="下载" width="85" @click="downFile(item)"/>
+          <main-button icon="Download" v-if='item.type !== 2' title="下载" width="85" @click="downFile(item)"/>
+<!--          <main-button icon="UploadFilled" title="同步" width="85"/>-->
+          <main-button icon="Delete" title="删除" v-if='item.isAccess === 2' width="85" @click="removeFile(item)"/>
         </div>
       </div>
     </div>
@@ -36,6 +43,11 @@
       <span class="mr-20">共{{ fileData.total }}条</span>
       <el-pagination :total="fileData.total" background layout="prev, pager, next"/>
     </div>
+    <el-image-viewer
+        v-if='showImage'
+        :url-list="imgList"
+        @close='showImage = false'
+    />
   </div>
 </template>
 
@@ -46,60 +58,89 @@ name: '历史文件',
 </route>
 
 <script>
-import mainButton from "../../components/main-button.vue";
-import {bytesToSize} from "../../utils/tools.js";
+import mainButton from '../../components/main-button.vue'
+import { bytesToSize } from '../../utils/tools.js'
+import api from '@/api/index.js'
 
 export default {
-  name: "his_files",
-  components: {mainButton},
-  data() {
+  name: 'his_files',
+  components: { mainButton },
+  data () {
     return {
+      showImage: false,
+      imgList: [],
       id: '',
-      fileData: [],
+      fileData: []
     }
   },
-  created() {
+  created () {
     this.id = this.$route.query.id
     this.getFileList()
   },
   methods: {
-    getFileList() {
-      this.$api.project.fileList({folderId: this.id}).then(res => {
+    getFileList () {
+      this.$api.project.fileList({ id: this.id, isHistory: 1 }).then(res => {
         if (res.code === 200) {
           this.fileData = res.data.records.map(e => {
             e.size = bytesToSize(e.volume)
             return e
           })
-
         } else {
           this.$message.error(res.msg)
         }
       })
     },
-    fileView(item) {
-      this.$router.push('/home/file_detail?id=' + item.fileId)
+    fileView (item) {
+      if (item.type === 2) {
+        // 文件夹
+        this.$api.project.fileList({ id: item.id, isHistory: 1 }).then(res => {
+          if (res.code === 200) {
+            this.fileData = res.data.records.map(e => {
+              e.size = bytesToSize(e.volume)
+              return e
+            })
+          } else {
+            this.$message.error(res.msg)
+          }
+        })
+      } else {
+        if (api.offices.includes(item.suffix)) {
+          const routeData = this.$router.resolve({ path: '/home/file_detail', query: { id: item.fileId } })
+          window.open(routeData.href, '_blank')
+        } else {
+          this.imgList = [item.url]
+          this.showImage = true
+        }
+      }
     },
-    downFile(item) {
+    downFile (item) {
       window.open('/api/wutong-file/minio/file/downFile/' + item.dowloadFileId, '')
     },
-    removeFile(item) {
-      this.$confirm("确认是否删除该文件?", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-        type: "warning"
+    removeFile (item) {
+      if (item.hasChildren || item.fileAmount > 0) {
+        this.$confirm('该文件夹不为空,请先删除子文件', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        })
+        return
+      }
+      this.$confirm('确认是否删除该文件?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
       })
-          .then(() => {
-                this.$api.project.fileRemove({ids: item.id}).then(res => {
-                  if (res.code === 200) {
-                    this.$message.success(res.msg)
-                    this.getFileList()
-                  } else {
-                    this.$message.error(res.msg)
-                  }
-                })
-              }
-          )
-
+        .then(() => {
+          this.$api.project.fileRemove({ ids: item.id }).then(res => {
+            if (res.code === 200) {
+              this.$message.success(res.msg)
+              this.getFileList()
+            } else {
+              this.$message.error(res.msg)
+            }
+          })
+        }
+        )
     }
   }
 }
@@ -120,7 +161,7 @@ export default {
 }
 
 .icon {
-  width: 80px;
-  height: 66px;
+  width: 43px;
+  height: 45px;
 }
 </style>