scorpio преди 2 години
родител
ревизия
b0114bbc30

+ 21 - 0
src/api/resource/index.js

@@ -136,5 +136,26 @@ export default {
    */
   fileDel(params) {
     return fetch('/blade-project-manage-v2/folder/v2/remove', params, 'post')
+  },
+  /**
+   * 服务商主动申请文件授权
+   * @param params
+   * @returns {Promise<unknown>}
+   */
+  apply(params) {
+    return fetch(
+      '/blade-project-manage-v2/grant/v2/applyGrant',
+      params,
+      'post',
+      'json'
+    )
+  },
+  /**
+   * 是否能创建文件夹
+   * @param params
+   * @returns {Promise | Promise<unknown>}
+   */
+  queryCreateFolder(params) {
+    return fetch('/blade-project-manage-v2/folder/v2/queryFolderGrant', params)
   }
 }

+ 2 - 2
src/components/filepicker/index.vue

@@ -227,11 +227,11 @@ export default {
             display: false
           },
           {
-            label: '上传人',
+            label: '创建人',
             prop: 'createUserName'
           },
           {
-            label: '上传时间',
+            label: '创建时间',
             prop: 'createTime'
           }
         ]

+ 79 - 0
src/views/resource/component/apply.vue

@@ -0,0 +1,79 @@
+<template>
+  <div>
+    <el-button type="primary" text @click="show = true">申请授权</el-button>
+    <el-dialog v-model="show" title="申请授权" width="400px">
+      <div class="flex flex-center flex-col">
+        <el-icon color="#409eff" :size="70">
+          <WarningFilled />
+        </el-icon>
+        <span class="mt-20"
+          >每次申请授权期限为15天。<br />
+          确定向项目所属机构申请授权?
+        </span>
+        <div class="mt-20 padding-top">
+          <el-button type="primary" plain @click="show = false"
+            >取 消
+          </el-button>
+          <el-button type="primary" @click="apply">确 定</el-button>
+        </div>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  props: {
+    row: {
+      type: Object,
+      default: null
+    }
+  },
+  data() {
+    return {
+      show: false
+    }
+  },
+
+  methods: {
+    apply() {
+      const today = new Date()
+      const startTime =
+        today.getFullYear() +
+        '-' +
+        (today.getMonth() + 1) +
+        '-' +
+        today.getDate()
+      const endTime =
+        today.getFullYear() +
+        '-' +
+        (today.getMonth() + 1) +
+        '-' +
+        (today.getDate() + 15)
+      const data = {
+        folders: [
+          {
+            folderId: this.row.id,
+            status: 2,
+            startTime,
+            endTime
+          }
+        ],
+        projectId: this.row.projectId
+      }
+      this.$api.resource.apply(data).then(res => {
+        this.show = false
+        if (res.code === 200) {
+          this.$confirm(res.data, {
+            type: 'warning'
+          })
+        } else {
+          this.$message.error(res.msg)
+        }
+      })
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped></style>

+ 4 - 1
src/views/resource/component/preview.vue

@@ -26,7 +26,10 @@
             <img :src="item.filePath" style="width: 1100px" />
           </div>
         </div>
-        <div class="bottom flex flex-center flex-justify-center">
+        <div
+          class="bottom flex flex-center flex-justify-center"
+          v-if="info.isAccess === 2"
+        >
           <el-button type="primary" icon="Download" @click="downloadClick"
             >下 载</el-button
           >

+ 40 - 22
src/views/resource/component/xtable.vue

@@ -9,7 +9,7 @@
         <div
           v-if="header.label === '操作'"
           class="padding-top padding-bottom"
-          style="width: 280px"
+          style="width: 315px"
         >
           {{ header.label }}
         </div>
@@ -45,27 +45,39 @@
             <div
               v-if="prop.label === '操作'"
               class="nowrap menu flex flex-center"
-              style="width: 280px"
             >
-              <preview :info="row" v-if="row.type === 1" ref="preview" />
-              <archives
-                v-if="row.type === 2 && row.parentId === '0'"
-                :folder-id="row.id"
-                :row="row"
-                @refresh="refresh"
-              />
-              <move
-                v-if="row.type === 1 && row.fileStatus !== 1"
-                :project-id="row.projectId"
-                :file-id="row.id"
-                @on-success="refresh"
-              />
-              <slot name="menu" :row="row"></slot>
-              <defile
-                :row="row"
-                @row-del="refresh"
-                v-if="row.isAccess === 2 && row.fileStatus !== 1"
-              />
+              <div
+                v-if="[1, 2].includes(row.isAccess)"
+                class="flex flex-center"
+              >
+                <div>
+                  <preview :info="row" v-if="row.type === 1" ref="preview" />
+                </div>
+                <div v-if="row.isAccess === 2" class="flex flex-center">
+                  <div v-if="row.type === 2 && row.parentId === '0'">
+                    <archives
+                      :folder-id="row.id"
+                      :row="row"
+                      @refresh="refresh"
+                    />
+                  </div>
+                  <move
+                    v-if="row.type === 1 && row.fileStatus !== 1"
+                    :project-id="row.projectId"
+                    :file-id="row.id"
+                    @on-success="refresh"
+                  />
+                  <slot name="menu" :row="row"></slot>
+                  <defile
+                    :row="row"
+                    @row-del="refresh"
+                    v-if="row.isAccess === 2 && row.fileStatus !== 1"
+                  />
+                </div>
+              </div>
+              <div v-else>
+                <apply :row="row" />
+              </div>
             </div>
             <div
               v-else
@@ -110,13 +122,15 @@ import move from '@/views/resource/component/move.vue'
 import archives from '@/views/resource/component/archives.vue'
 import preview from '@/views/resource/component/preview.vue'
 import defile from '@/views/resource/component/defile.vue'
+import apply from '@/views/resource/component/apply.vue'
 export default {
   components: {
     row1,
     move,
     archives,
     preview,
-    defile
+    defile,
+    apply
   },
   props: {
     page: {
@@ -208,6 +222,10 @@ export default {
       this.$emit('refresh')
     },
     rowClick(row) {
+      if (row.isAccess === 3) {
+        this.$message.error('暂无权限')
+        return
+      }
       // filePicker 文件选择
       if (this.selectedList.length === this.max) {
         this.$message.error('可选择文件数量最大为' + this.max)

+ 25 - 4
src/views/resource/index.vue

@@ -44,10 +44,17 @@
               icon="Folder"
               :plain="!top"
               @click="showDialog(1)"
-              v-if="currentFolder ? currentFolder.fileStatus !== 1 : true"
+              v-if="
+                canCreateFolder &&
+                (currentFolder ? currentFolder.fileStatus !== 1 : true)
+              "
               >新建文件夹
             </el-button>
-            <authorize class="ml-10" :list="selectedList" />
+            <authorize
+              class="ml-10"
+              :list="selectedList"
+              v-if="canCreateFolder"
+            />
           </div>
           <div class="flex flex-center main-color mr-10">
             <search
@@ -144,6 +151,7 @@ export default {
       currentFolder: null,
       selectedList: [],
       data: [],
+      canCreateFolder: false,
       option: {
         showCheckBox: false,
         folderChecked: true,
@@ -155,11 +163,11 @@ export default {
             width: 270
           },
           {
-            label: '上传人',
+            label: '创建人',
             prop: 'createUserName'
           },
           {
-            label: '上传时间',
+            label: '创建时间',
             prop: 'createTime'
           }
         ]
@@ -193,8 +201,20 @@ export default {
   created() {
     this.folderInfo.projectId = this.$route.query.id
     this.getStage()
+    this.queryCreateFolder()
   },
   methods: {
+    queryCreateFolder() {
+      this.$api.project
+        .queryCreateFolder({ projectId: this.folderInfo.projectId })
+        .then(res => {
+          if (res.code === 200) {
+            this.canCreateFolder = res.data.status === 2
+          } else {
+            console.log(res)
+          }
+        })
+    },
     showDialog(type) {
       this.showType = type
       this.show = true
@@ -220,6 +240,7 @@ export default {
      */
     getFolderList() {
       const data = {
+        projectId: this.folderInfo.projectId,
         stageId: this.folderInfo.stageId,
         dictKey: 1,
         current: this.page.current,

+ 2 - 2
vite.config.js

@@ -57,8 +57,8 @@ export default defineConfig({
     proxy: {
       '/api': {
         // 正式环境地址
-        // target: 'https://dev.wutongresearch.club/api',
-        target: 'https://prod.wutongshucloud.com/api',
+        target: 'https://dev.wutongresearch.club/api',
+        // target: 'https://prod.wutongshucloud.com/api',
         // target: 'http://192.168.31.181:8110',
         changeOrigin: true,
         rewrite: path => path.replace(/^\/api/, '')