scorpio 2 lat temu
rodzic
commit
95fa9bd886

+ 23 - 21
src/api/index.js

@@ -13,27 +13,29 @@ import search from './search/index.js'
 import dispatch from './dispatch/index.js'
 import store from './store/index.js'
 import msg from './msg/index.js'
-import contract from "@/api/contract/index.js";
-import role from "@/api/role/index.js";
+import contract from '@/api/contract/index.js'
+import role from '@/api/role/index.js'
+import resource from '@/api/resource/index.js'
 
 export default {
-    offices: ['pdf', 'doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', 'PDF'],
-    uploadPath: '/api/wutong-file/minio/file/upload', // 上传
-    login,
-    system,
-    project,
-    common,
-    recycle,
-    database,
-    task,
-    company,
-    inspect,
-    params,
-    invest,
-    search,
-    dispatch,
-    store,
-    msg,
-    contract,
-    role
+  offices: ['pdf', 'doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', 'PDF'],
+  uploadPath: '/api/wutong-file/minio/file/upload', // 上传
+  login,
+  system,
+  project,
+  common,
+  recycle,
+  database,
+  task,
+  company,
+  inspect,
+  params,
+  invest,
+  search,
+  dispatch,
+  store,
+  msg,
+  contract,
+  role,
+  resource
 }

+ 341 - 332
src/api/project/index.js

@@ -2,339 +2,348 @@ import fetch from '../fetch.js'
 import request from '@/api/axios'
 
 export default {
-    /**
-     * 项目相关借口
-     * @returns {Promise<unknown>}
-     */
-    projectList(current, size, params) {
-        // 项目列表
-        return fetch(
-            '/blade-project-manage-v2/project/v2/page',
-            {
-                ...params,
-                current,
-                size
-            },
-            'post',
-            'json'
-        )
-    },
-    projectAdd(params) {
-        // 新增项目
-        return fetch(
-            '/blade-project-manage-v2/project/v2/save',
-            params,
-            'post',
-            'json'
-        )
-    },
-    projectRemove(params) {
-        // 删除项目
-        return fetch('/blade-project-manage-v2/project/v2/remove', params, 'post')
-    },
-    proContact(params) {
-        // 关联子项目
-        return fetch(
-            '/blade-project-manage-v2/project/v2/connect',
-            params,
-            'post',
-            'json'
-        )
-    },
-    removeContact(params) {
-        return fetch(
-            '/blade-project-manage-v2/project/v2/removeConnect',
-            params,
-            'post'
-        )
-    },
-    childrenList(params) {
-        // 已关联子项目列表
-        return fetch('/blade-project-manage-v2/project/v2/childrenList', params)
-    },
-    typeList(params) {
-        // 项目分类列表
-        return fetch('/blade-project-manage-v2/typeAndStage/v2/page', params)
-    },
-    projectInfo(id) {
-        // 项目详细信息
-        return fetch('/blade-project-manage-v2/project/v2/detail/?id=' + id)
-    },
-    projectMapInfo(id) {
-        // 项目详细信息
-        return fetch('/blade-project-manage-v2/project/v2/newDetail/?id=' + id)
-    },
-    proUpdate(params) {
-        // 项目信息更新
-        return fetch(
-            '/blade-project-manage-v2/project/v2/newUpdate',
-            params,
-            'post',
-            'json'
-        )
-    },
-    issuanceDetail(params) {
-        // 项目发行明细
-        return fetch('/blade-project-manage-v2/projectdetail/v2/list', params)
-    },
-    issueAdd(params) {
-        // 新增发行明细
-        return fetch(
-            '/blade-project-manage-v2/projectdetail/v2/save',
-            params,
-            'post',
-            'json'
-        )
-    },
-    userStageList() {
-        // 统计用户阶段项目数
-        return fetch('/blade-project-manage-v2/stage/v2/projectCount')
-    },
-    userNunList(params) {
-        // 统计用户各类型项目数
-        return fetch(
-            '/blade-project-manage-v2/project/v2/projectStageNumber',
-            params,
-            'post',
-            'json'
-        )
-    },
-    updateStage(params) {
-        // 修改项目情况
-        return fetch(
-            '/blade-project-manage-v2/project/v2/updateProjectStage',
-            params,
-            'post'
-        )
-    },
-    includeStage(params) {
-        // 单个项目包含阶段
-        return fetch('/blade-project-manage-v2/stage/v2/projectStages', params,)
-    },
-    folderList(params) {
-        // 阶段包含文件夹列表
-        return fetch('/blade-project-manage-v2/folder/v2/listByStageId', params,)
-    },
-    sqRecord(params) {
-        // 文件夹授权记录
-        return fetch('/blade-project-manage-v2/qrcode/v2/grantLog', params)
-    },
-    findFiles(params) {
-        // 文件搜索
-        return fetch('/blade-project-manage-v2/folder/v2/findFile', params)
-    },
-    folderListAll(params) {
-        // 历史数据文件夹列表
-        return fetch('/blade-project-manage-v2/folder/v2/history', params)
-    },
-    folderRemove(params) {
-        // 删除文件夹
-        return fetch('/blade-project-manage-v2/folder/v2/remove', params, 'post')
-    },
-    folderAdd(params) {
-        // 添加文件夹
-        return fetch(
-            '/blade-project-manage-v2/folder/v2/submit',
-            params,
-            'post',
-            'json'
-        )
-    },
-    folderUpdate(params) {
-        // 文件夹更新
-        return fetch(
-            '/blade-project-manage-v2/folder/v2/submit',
-            params,
-            'post',
-            'json'
-        )
-    },
-    fileList(params) {
-        // 文件夹里包含文件列表
-        return fetch('/blade-project-manage-v2/folder/v2/getListByFolderId', params)
-    },
-    fileDetail(id) {
-        return fetch('/wutong-library/library/detail/' + id)
-    },
-    articleDetailByFile(id) {
-        return fetch('/wutong-library/library/detail/file/' + id)
-    },
-    fileAdd(params) {
-        // 上传(新增)文件
-        return fetch(
-            '/blade-project-manage-v2/folder/v2/saveFile',
-            params,
-            'post',
-            'json'
-        )
-    },
-    fileRemove(params) {
-        // 删除文件
-        return fetch('/blade-project-manage-v2/folder/v2/remove', params, 'post')
-    },
-    /**
-     * 业主主动授权
-     * @param params
-     * @returns {Promise | Promise<unknown>}
-     */
-    initCode(params) {
-        return fetch(
-            '/blade-project-manage-v2/qrcode/v2/getGrantQrcode',
-            params,
-            'post',
-            'json'
-        )
-    },
-    /**
-     * 服务商触发消息发送
-     * @param params
-     * @returns {Promise | Promise<unknown>}
-     */
-    send(params) {
-        return fetch('/blade-project-manage-v2/frontMessage/v2/sendMessage', params)
-    },
-    /**
-     * 服务商主动申请文件授权
-     * @param params
-     * @returns {Promise<unknown>}
-     */
-    apply(params) {
-        return fetch(
-            '/blade-project-manage-v2/grant/v2/applyGrant',
-            params,
-            'post',
-            'json'
-        )
-    },
-    folderType(params) {
-        return fetch('/blade-project-manage-v2/dict/v2/getDictList', params)
-    },
-    /**
-     * 全站搜索
-     * @param params
-     * @returns {Promise<unknown>}
-     */
-    totalSearch(params) {
-        return fetch(
-            '/blade-project-manage-v2/searcher/v2/getListByKeyword',
-            params,
-            'post',
-            'json'
-        )
-    },
-    /**
-     * 搜索详情
-     */
-    searchDetail(params) {
-        return fetch(
-            '/blade-project-manage-v2/searcher/v2/searchFileDetails',
-            params,
-            'post',
-            'json'
-        )
-    },
-    total(params) {
-        return fetch(
-            '/blade-project-manage-v2/searcher/v2/getTotalByKeyword',
-            params,
-            'post'
-        )
-    },
-    totalAmount(params) {
-        return fetch(
-            '/blade-project-manage-v2/project/v2/getTotalAmount',
-            params,
-            'post',
-            'json'
-        )
-    },
-    /**
-     * 是否需要归档
-     */
-    isHistory(params) {
-        return fetch('/blade-project-manage-v2/folder/v2/isHistory', params)
-    },
-    /**
-     * 归档
-     */
-    doneHistory(params) {
-        return fetch('/blade-project-manage-v2/folder/v2/history', params)
-    },
-    /**
-     * 是否有权限创建文件夹
-     */
-    queryCreateFolder(params) {
-        return fetch('/blade-project-manage-v2/folder/v2/queryFolderGrant', params)
-    },
-    /**
-     * 股室上报项目到管理员
-     */
-    upReportType(params) {
-        return fetch(
-            '/blade-project-manage-v2/project/v2/upReportType',
-            params,
-            'post'
-        )
-    },
-    /**
-     * 管理员审批项目
-     */
-    approvalProject(params) {
-        return fetch(
-            '/blade-project-manage-v2/project/v2/approvalReportType',
-            params,
-            'post'
-        )
-    },
-    /**
-     * 项目上报, 股室的正式项目,上报到固定资产
-     */
-    reportToAssets(params) {
-        return fetch(
-            '/blade-project-manage-v2/project-asset/v2/report-to-asset',
-            params,
-            'post'
-        )
-    },
-    /**
-     * 项目结转
-     */
-    projectCarry(parmas) {
-        return fetch(
-            '/blade-project-manage-v2/project/v2/projectCarryOver',
-            parmas,
-            'post'
-        )
-    },
-    /**
-     * 项目退库
-     * @param params
-     * @returns {Promise<unknown>}
-     */
-    projectCancel(params) {
-        return fetch('/blade-project-manage-v2/project/v2/isExit', params, 'post')
-    },
-    /**
-     * 项目入库预审
-     * @param params
-     * @returns {Promise | Promise<unknown>}
-     */
-    projectStore(params) {
-        return fetch(
-            '/blade-project-manage-v2/project-dispatch/v2/select-pre-storage',
-            params,
-            'post'
-        )
-    }
+  /**
+   * 项目相关借口
+   * @returns {Promise<unknown>}
+   */
+  projectList(current, size, params) {
+    // 项目列表
+    return fetch(
+      '/blade-project-manage-v2/project/v2/page',
+      {
+        ...params,
+        current,
+        size
+      },
+      'post',
+      'json'
+    )
+  },
+  projectAdd(params) {
+    // 新增项目
+    return fetch(
+      '/blade-project-manage-v2/project/v2/save',
+      params,
+      'post',
+      'json'
+    )
+  },
+  projectRemove(params) {
+    // 删除项目
+    return fetch('/blade-project-manage-v2/project/v2/remove', params, 'post')
+  },
+  proContact(params) {
+    // 关联子项目
+    return fetch(
+      '/blade-project-manage-v2/project/v2/connect',
+      params,
+      'post',
+      'json'
+    )
+  },
+  removeContact(params) {
+    return fetch(
+      '/blade-project-manage-v2/project/v2/removeConnect',
+      params,
+      'post'
+    )
+  },
+  childrenList(params) {
+    // 已关联子项目列表
+    return fetch('/blade-project-manage-v2/project/v2/childrenList', params)
+  },
+  typeList(params) {
+    // 项目分类列表
+    return fetch('/blade-project-manage-v2/typeAndStage/v2/page', params)
+  },
+  projectInfo(id) {
+    // 项目详细信息
+    return fetch('/blade-project-manage-v2/project/v2/detail/?id=' + id)
+  },
+  projectMapInfo(id) {
+    // 项目详细信息
+    return fetch('/blade-project-manage-v2/project/v2/newDetail/?id=' + id)
+  },
+  proUpdate(params) {
+    // 项目信息更新
+    return fetch(
+      '/blade-project-manage-v2/project/v2/newUpdate',
+      params,
+      'post',
+      'json'
+    )
+  },
+  issuanceDetail(params) {
+    // 项目发行明细
+    return fetch('/blade-project-manage-v2/projectdetail/v2/list', params)
+  },
+  issueAdd(params) {
+    // 新增发行明细
+    return fetch(
+      '/blade-project-manage-v2/projectdetail/v2/save',
+      params,
+      'post',
+      'json'
+    )
+  },
+  userStageList() {
+    // 统计用户阶段项目数
+    return fetch('/blade-project-manage-v2/stage/v2/projectCount')
+  },
+  userNunList(params) {
+    // 统计用户各类型项目数
+    return fetch(
+      '/blade-project-manage-v2/project/v2/projectStageNumber',
+      params,
+      'post',
+      'json'
+    )
+  },
+  updateStage(params) {
+    // 修改项目情况
+    return fetch(
+      '/blade-project-manage-v2/project/v2/updateProjectStage',
+      params,
+      'post'
+    )
+  },
+  includeStage(params) {
+    // 单个项目包含阶段
+    return fetch('/blade-project-manage-v2/stage/v2/projectStages', params)
+  },
+  folderList(params) {
+    // 阶段包含文件夹列表
+    return fetch(
+      '/blade-project-manage-v2/folder/v2/listByStageId',
+      params,
+      'post'
+    )
+  },
+  sqRecord(params) {
+    // 文件夹授权记录
+    return fetch('/blade-project-manage-v2/qrcode/v2/grantLog', params)
+  },
+  findFiles(params) {
+    // 文件搜索
+    return fetch('/blade-project-manage-v2/folder/v2/findFile', params)
+  },
+  folderListAll(params) {
+    // 历史数据文件夹列表
+    return fetch('/blade-project-manage-v2/folder/v2/history', params)
+  },
+  folderRemove(params) {
+    // 删除文件夹
+    return fetch('/blade-project-manage-v2/folder/v2/remove', params, 'post')
+  },
+  /**
+   * 新增文件夹
+   * @param params
+   * @returns {Promise | Promise<unknown>}
+   */
+  folderAdd(params) {
+    // 添加文件夹
+    return fetch(
+      '/blade-project-manage-v2/folder/v2/submit',
+      params,
+      'post',
+      'json'
+    )
+  },
+  folderUpdate(params) {
+    // 文件夹更新
+    return fetch(
+      '/blade-project-manage-v2/folder/v2/submit',
+      params,
+      'post',
+      'json'
+    )
+  },
+  fileList(params) {
+    // 文件夹里包含文件列表
+    return fetch('/blade-project-manage-v2/folder/v2/getListByFolderId', params)
+  },
+  fileDetail(id) {
+    return fetch('/wutong-library/library/detail/' + id)
+  },
+  articleDetailByFile(id) {
+    return fetch('/wutong-library/library/detail/file/' + id)
+  },
+  fileAdd(params) {
+    // 上传(新增)文件
+    return fetch(
+      '/blade-project-manage-v2/folder/v2/saveFile',
+      params,
+      'post',
+      'json'
+    )
+  },
+  fileRemove(params) {
+    // 删除文件
+    return fetch('/blade-project-manage-v2/folder/v2/remove', params, 'post')
+  },
+  /**
+   * 业主主动授权
+   * @param params
+   * @returns {Promise | Promise<unknown>}
+   */
+  initCode(params) {
+    return fetch(
+      '/blade-project-manage-v2/qrcode/v2/getGrantQrcode',
+      params,
+      'post',
+      'json'
+    )
+  },
+  /**
+   * 服务商触发消息发送
+   * @param params
+   * @returns {Promise | Promise<unknown>}
+   */
+  send(params) {
+    return fetch('/blade-project-manage-v2/frontMessage/v2/sendMessage', params)
+  },
+  /**
+   * 服务商主动申请文件授权
+   * @param params
+   * @returns {Promise<unknown>}
+   */
+  apply(params) {
+    return fetch(
+      '/blade-project-manage-v2/grant/v2/applyGrant',
+      params,
+      'post',
+      'json'
+    )
+  },
+  folderType(params) {
+    return fetch('/blade-project-manage-v2/dict/v2/getDictList', params)
+  },
+  /**
+   * 全站搜索
+   * @param params
+   * @returns {Promise<unknown>}
+   */
+  totalSearch(params) {
+    return fetch(
+      '/blade-project-manage-v2/searcher/v2/getListByKeyword',
+      params,
+      'post',
+      'json'
+    )
+  },
+  /**
+   * 搜索详情
+   */
+  searchDetail(params) {
+    return fetch(
+      '/blade-project-manage-v2/searcher/v2/searchFileDetails',
+      params,
+      'post',
+      'json'
+    )
+  },
+  total(params) {
+    return fetch(
+      '/blade-project-manage-v2/searcher/v2/getTotalByKeyword',
+      params,
+      'post'
+    )
+  },
+  totalAmount(params) {
+    return fetch(
+      '/blade-project-manage-v2/project/v2/getTotalAmount',
+      params,
+      'post',
+      'json'
+    )
+  },
+  /**
+   * 是否需要归档
+   */
+  isHistory(params) {
+    return fetch('/blade-project-manage-v2/folder/v2/isHistory', params)
+  },
+  /**
+   * 归档
+   */
+  doneHistory(params) {
+    return fetch('/blade-project-manage-v2/folder/v2/history', params)
+  },
+  /**
+   * 是否有权限创建文件夹
+   */
+  queryCreateFolder(params) {
+    return fetch('/blade-project-manage-v2/folder/v2/queryFolderGrant', params)
+  },
+  /**
+   * 股室上报项目到管理员
+   */
+  upReportType(params) {
+    return fetch(
+      '/blade-project-manage-v2/project/v2/upReportType',
+      params,
+      'post'
+    )
+  },
+  /**
+   * 管理员审批项目
+   */
+  approvalProject(params) {
+    return fetch(
+      '/blade-project-manage-v2/project/v2/approvalReportType',
+      params,
+      'post'
+    )
+  },
+  /**
+   * 项目上报, 股室的正式项目,上报到固定资产
+   */
+  reportToAssets(params) {
+    return fetch(
+      '/blade-project-manage-v2/project-asset/v2/report-to-asset',
+      params,
+      'post'
+    )
+  },
+  /**
+   * 项目结转
+   */
+  projectCarry(parmas) {
+    return fetch(
+      '/blade-project-manage-v2/project/v2/projectCarryOver',
+      parmas,
+      'post'
+    )
+  },
+  /**
+   * 项目退库
+   * @param params
+   * @returns {Promise<unknown>}
+   */
+  projectCancel(params) {
+    return fetch('/blade-project-manage-v2/project/v2/isExit', params, 'post')
+  },
+  /**
+   * 项目入库预审
+   * @param params
+   * @returns {Promise | Promise<unknown>}
+   */
+  projectStore(params) {
+    return fetch(
+      '/blade-project-manage-v2/project-dispatch/v2/select-pre-storage',
+      params,
+      'post'
+    )
+  }
 }
 
 export const getLazyList = (parentId, params) => {
-    return request({
-        url: '/api/blade-project-manage-v2/project/v2/childrenList',
-        method: 'get',
-        params: {
-            ...params,
-            parentId
-        }
-    })
+  return request({
+    url: '/api/blade-project-manage-v2/project/v2/childrenList',
+    method: 'get',
+    params: {
+      ...params,
+      parentId
+    }
+  })
 }

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

@@ -0,0 +1,54 @@
+import fetch from '../fetch.js'
+
+export default {
+  /**
+   * 文件夹创建、修改
+   * @param params
+   * @returns {Promise | Promise<unknown>}
+   */
+  folderAddUpdate(params) {
+    // 添加文件夹
+    return fetch(
+      '/blade-project-manage-v2/folder/v2/submit',
+      params,
+      'post',
+      'json'
+    )
+  },
+  /**
+   * 获取阶段下的文件夹
+   * @param params
+   * @returns {Promise | Promise<unknown>}
+   */
+  folderList(params) {
+    // 阶段包含文件夹列表
+    return fetch(
+      '/blade-project-manage-v2/folder/v2/listByStageId',
+      params,
+      'post'
+    )
+  },
+  /**
+   * 文件上传接口
+   * @param params
+   * @returns {Promise<unknown>}
+   */
+  fileSave(params) {
+    // 上传(新增)文件
+    return fetch(
+      '/blade-project-manage-v2/folder/v2/saveFile',
+      params,
+      'post',
+      'json'
+    )
+  },
+  /**
+   * 获取文件夹下面的文件及文件夹
+   * @param params
+   * @returns {Promise | Promise<unknown>}
+   */
+  fileList(params) {
+    // 文件夹里包含文件列表
+    return fetch('/blade-project-manage-v2/folder/v2/getListByFolderId', params)
+  }
+}

+ 111 - 0
src/components/upload-file/index.vue

@@ -0,0 +1,111 @@
+<template>
+  <div>
+    <div>
+      <el-upload
+        :action="action"
+        v-model:file-list="fileList"
+        :headers="headers"
+        :data="data"
+        :accept="accept"
+        :multiple="multiple"
+        :on-success="success"
+        :show-file-list="false"
+      >
+        <el-button type="primary" icon="Plus">文件上传</el-button>
+      </el-upload>
+    </div>
+    <div class="upload" v-if="drawer">
+      <div>
+        <div class="full-width flex flex-justify-end">
+          <el-icon @click="drawer = false"><CircleClose /></el-icon>
+        </div>
+        <div class="mt-20 file-content">
+          <div v-for="file in fileList" :key="file.name" class="mb-20">
+            <div class="flex flex-align-center">
+              <div>{{ file.name }} , ({{ bytesToSize(file.size) }})</div>
+              <div></div>
+            </div>
+            <el-progress :percentage="file.percentage" />
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { bytesToSize } from '@/utils/tools.js'
+import api from '@/api/index.js'
+import { getToken } from '@/utils/auth.js'
+import website from '@/config/website.js'
+import { Base64 } from 'js-base64'
+
+export default {
+  props: {
+    accept: {
+      type: String,
+      default: ''
+    },
+    multiple: {
+      type: Boolean,
+      default: true
+    },
+    data: Object,
+    action: {
+      type: String,
+      default: api.uploadPath
+    }
+  },
+  watch: {
+    fileList: {
+      handler(val) {
+        this.drawer = val.length !== 0
+      },
+      immediate: true
+    }
+  },
+  data() {
+    return {
+      headers: {
+        Authorization: `Basic ${Base64.encode(
+          `${website.clientId}:${website.clientSecret}`
+        )}`,
+        'Blade-Auth': 'bearer ' + getToken()
+      },
+      drawer: false,
+      fileList: [],
+      resultList: []
+    }
+  },
+  methods: {
+    bytesToSize,
+    success(res) {
+      if (res.code === 200) {
+        this.resultList.push(res.data)
+      }
+      if (this.resultList.length === this.fileList.length) {
+        this.$emit('on-success', this.resultList)
+      }
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.upload {
+  position: fixed;
+  bottom: 0;
+  right: 0;
+  background-color: white;
+  height: 300px;
+  width: 480px;
+  border-top-left-radius: 10px;
+  border: #eeeeee solid 1px;
+  box-shadow: -2px 2px 20px rgba(0, 0, 0, 0.1);
+  padding: 20px;
+}
+.file-content {
+  height: 280px;
+  overflow-y: scroll;
+}
+</style>

+ 11 - 13
src/views/resource/component/floder.vue

@@ -1,14 +1,13 @@
 <template>
   <div class="flex flex-center flex-col">
-    <img src="../../../assets/svg/folder.svg" style="margin-top: -20px">
+    <img src="@/assets/svg/folder.svg" style="margin-top: -20px" />
     <el-input
-        v-model="title"
-        placeholder="请输入文件夹名称"
-        prefix-icon="EditPen"
+      v-model="title"
+      placeholder="请输入文件夹名称"
+      prefix-icon="EditPen"
     />
-    <div class="mt-20 flex flex-justify-between full-width">
-      <div></div>
-      <el-button type="primary" @click="folderAdd">确定</el-button>
+    <div class="mt-20 flex flex-justify-end full-width">
+      <el-button type="primary" @click="folderAdd">确 定</el-button>
     </div>
   </div>
 </template>
@@ -19,31 +18,30 @@ export default {
     info: {
       type: Object,
       default: null
-    },
+    }
   },
   data() {
     return {
       title: ''
     }
-
   },
 
   created() {
     this.folderInfo = this.info
-    console.log(this.folderInfo)
   },
   methods: {
     folderAdd() {
       const data = {
         projectId: this.info.projectId,
         stageId: this.info.stageId,
-        title: this.title
+        title: this.title,
+        parentId: this.info.id
       }
       if (this.info.stageId === '') {
         this.$message.error('请先选择相关项目阶段!')
         this.$emit('close')
       }
-      this.$api.project.folderAdd(data).then(res => {
+      this.$api.resource.folderAddUpdate(data).then(res => {
         if (res.code === 200) {
           this.$message.success(res.msg)
           this.$emit('close')
@@ -51,7 +49,7 @@ export default {
           this.$message.error(res.msg)
         }
       })
-    },
+    }
   }
 }
 </script>

+ 45 - 0
src/views/resource/component/row1.vue

@@ -0,0 +1,45 @@
+<template>
+  <div class="row full-width">
+    <div
+      v-if="index === 0"
+      class="flex flex-align-center flex-justify-start full-height"
+    >
+      <img src="../../../assets/svg/folder/invisible.svg" />
+      {{ row[column.prop] }}
+    </div>
+    <div v-else class="flex flex-align-center flex-center full-height">
+      {{ row[column.prop] }}
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  props: {
+    row: {
+      type: Object,
+      default: null
+    },
+    column: {
+      type: Object,
+      default: null
+    },
+    index: {
+      type: Number,
+      default: 0
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.row {
+  height: 45px;
+  border-bottom: #f7f8fa solid 1px;
+  img {
+    width: 40px;
+    height: auto;
+    margin-right: 10px;
+  }
+}
+</style>

+ 48 - 27
src/views/resource/component/xtable.vue

@@ -1,50 +1,70 @@
 <template>
   <div>
-    <div class="flex flex-center flex-justify-between">
+    <div class="flex flex-center flex-justify-between border-bottom">
       <div v-for="header in headers" :key="header.id" class="mt-20 full-width">
         <div
           v-if="header.label !== '操作'"
-          class="padding-top padding-bottom border-bottom"
+          class="padding-top padding-bottom"
           :style="`min-width:` + header.width + `px`"
         >
-          {{ header.label }}{{ header.width }}
+          {{ header.label }}
         </div>
-        <div v-else class="border-bottom menu flex flex-center">
+        <div v-else class="menu flex flex-center">
           {{ header.label }}{{ header.width }}
         </div>
       </div>
     </div>
     <div class="full-width">
-      <div
-        v-for="row in data"
-        :key="row.id"
-        class="flex flex-center row pointer"
-        @click="rowClick(row)"
-      >
+      <div v-if="data.length !== 0">
         <div
-          v-for="(prop, cell) in headers"
-          :key="prop.id"
-          class="flex-child-average flex"
+          v-for="row in data"
+          :key="row.id"
+          class="flex flex-center row pointer"
         >
           <div
-            v-if="prop.label === '操作'"
-            class="nowrap menu flex flex-center"
+            v-for="(prop, index) in headers"
+            :key="prop.id"
+            class="flex-child-average flex"
           >
-            <el-button type="primary" size="small" text>查看</el-button>
-            <el-button type="primary" size="small" text>归档</el-button>
-            <el-button type="primary" size="small" text>重命名</el-button>
-          </div>
-          <div v-else class="row" :style="`min-width:` + prop.width + `px`">
-            <slot name="row" class="row" :index="cell" :row="row" :ele="prop" />
+            <div
+              v-if="prop.label === '操作'"
+              class="nowrap menu flex flex-center"
+            >
+              <el-button type="primary" size="small" text>查看</el-button>
+              <el-button type="primary" size="small" text>归档</el-button>
+              <el-button type="primary" size="small" text>重命名</el-button>
+            </div>
+            <div
+              v-else
+              class="row full-width"
+              :style="`min-width:` + prop.width + `px`"
+            >
+              <div class="cell flex flex-center full-width">
+                <row1
+                  :row="row"
+                  :column="prop"
+                  :index="index"
+                  @click="rowClick(row)"
+                ></row1>
+              </div>
+            </div>
           </div>
         </div>
       </div>
+      <div v-else class="mt-20">
+        <el-empty v-if="loading === false" description="暂无数据"></el-empty>
+        <el-skeleton v-else :rows="20" animated />
+      </div>
     </div>
   </div>
 </template>
 
 <script>
+import row1 from '@/views/resource/component/row1.vue'
 export default {
+  components: {
+    row1
+  },
   props: {
     data: {
       type: Array,
@@ -53,6 +73,10 @@ export default {
     option: {
       type: Object,
       default: null
+    },
+    loading: {
+      type: Boolean,
+      default: false
     }
   },
   watch: {
@@ -85,24 +109,21 @@ export default {
 
 <style lang="scss" scoped>
 .row {
-  margin: 1px;
   min-height: 40px;
 }
 
 .row:hover {
   min-height: 40px;
-  margin: 1px;
-  background-color: #eeeeee;
+  background-color: #f7f9fc;
 }
 
 .cell {
-  min-height: 40px;
-  border-bottom: #dcdfe6 solid 1px;
+  min-height: 45px;
 }
 
 .menu {
   width: 280px;
   height: 45px;
-  background-color: wheat;
+  border-bottom: #f7f8fa solid 1px;
 }
 </style>

+ 89 - 68
src/views/resource/index.vue

@@ -10,7 +10,6 @@
             filterable
             clearable
             placeholder="筛选项目阶段"
-            :remote-method="remoteMethod"
             style="width: 100%"
             @change="folderResult"
           >
@@ -27,15 +26,19 @@
     </tips-custom>
     <!--    content-->
     <el-card shadow="hover" class="content">
-      <div v-if="top">
+      <div>
         <div class="full-width flex flex-center flex-justify-between">
-          <div class="full-width flex flex-justify-start flex-align-center">
-            <base-button
-              title="新建文件夹"
-              icon="Plus"
+          <div class="full-width flex flex-justify-start flex-center">
+            <upload-file v-if="!top" @on-success="uploadSuccess" />
+            <el-button
+              class="ml-10"
+              type="primary"
+              icon="Folder"
+              :plain="!top"
               @click="showDialog(1)"
-            />
-            <base-button title="批量授权" icon="User" />
+              >新建文件夹
+            </el-button>
+            <el-button type="primary" plain icon="User">批量授权</el-button>
           </div>
           <div class="flex flex-center">
             <span class="nowrap mr-10">文件搜索</span>
@@ -46,50 +49,17 @@
             />
           </div>
         </div>
-        <el-breadcrumb
-          separator-icon="ArrowRight"
-          class="mt-20 main-color pointer"
-        >
-          <el-breadcrumb-item>提示说明</el-breadcrumb-item>
-        </el-breadcrumb>
-        <xtable :data="data" :option="option" @row-click="folderOpen">
-          <template #row="{ row, ele }">
-            <div class="flex">
-              {{ row[ele.prop] }}
-            </div>
-          </template>
-        </xtable>
-      </div>
-      <!--      下级目录-->
-      <div v-else>
-        <div class="full-width flex flex-center flex-justify-between">
-          <div class="full-width flex flex-justify-start flex-align-center">
-            <el-button type="primary">上传</el-button>
-            <el-button type="primary" plain>新建文件夹</el-button>
-            <el-button type="primary" plain>批量授权</el-button>
-          </div>
-          <el-button round icon="el-icon-search" />
-        </div>
-        <el-breadcrumb
-          separator-icon="ArrowRight"
-          class="mt-20 main-color pointer"
-        >
-          <el-breadcrumb-item @click="top = true"
-            >返回上一层
+        <el-breadcrumb separator-icon="ArrowRight" class="mt-20 main-color">
+          <el-breadcrumb-item>
+            <div class="pointer" @click="getFolderList">全部文件</div>
           </el-breadcrumb-item>
-          <el-breadcrumb-item>全部文件</el-breadcrumb-item>
-          <el-breadcrumb-item>{{ data.title }}</el-breadcrumb-item>
         </el-breadcrumb>
-        <xtable :data="data" :option="option">
-          <template #row="{ index, row, ele }">
-            <div v-if="index === 0" class="light-purple-bg flex flex-center">
-              <img src="@/assets/svg/folder/edit.svg" style="width: 40px" />
-              <div>
-                {{ row[ele.prop] }}
-              </div>
-            </div>
-            <el-empty v-else />
-          </template>
+        <xtable
+          :data="data"
+          :option="top ? option : option2"
+          :loading="loading"
+          @row-click="getFileList"
+        >
         </xtable>
       </div>
     </el-card>
@@ -98,7 +68,7 @@
       <floder
         v-if="showType === 1"
         :info="folderInfo"
-        @close="colseDialog"
+        @close="closeDialog"
       ></floder>
     </el-dialog>
   </div>
@@ -115,14 +85,14 @@ meta: { 'show': false }
 import tipsCustom from '@/components/tips-custom/index.vue'
 import xtable from '@/views/resource/component/xtable.vue'
 import floder from '@/views/resource/component/floder.vue'
-import baseButton from '@/components/base-button.vue'
+import uploadFile from '@/components/upload-file/index.vue'
 
 export default {
   components: {
     tipsCustom,
     xtable,
     floder,
-    baseButton
+    uploadFile
   },
 
   data() {
@@ -132,7 +102,9 @@ export default {
       width: 380,
       title: '新建文件夹',
       top: true,
-      data: [{ title: '@2' }, { title: '@3333', status: '555' }],
+      loading: false,
+      currentFolder: null,
+      data: [],
       option: {
         column: [
           {
@@ -155,7 +127,20 @@ export default {
           },
           {
             label: '创建人',
-            prop: 'createUser'
+            prop: 'createUserName'
+          }
+        ]
+      },
+      option2: {
+        column: [
+          {
+            label: '名称2',
+            prop: 'title',
+            display: false
+          },
+          {
+            label: '创建人',
+            prop: 'createUserName'
           }
         ]
       },
@@ -173,7 +158,6 @@ export default {
   },
   created() {
     this.folderInfo.projectId = this.$route.query.id
-    this.getFolderList()
     this.getStage()
   },
   methods: {
@@ -181,28 +165,47 @@ export default {
       this.showType = type
       this.show = true
     },
-    colseDialog() {
+    folderAdd() {
+      this.$api.resource.folderAddUpdate().then(res => {
+        if (res.code === 200) {
+          console.log(res)
+        }
+      })
+    },
+    closeDialog() {
       this.show = false
+      if (this.top) {
+        this.getFolderList()
+      } else {
+        this.getFileList()
+      }
     },
     getFolderList() {
       const data = {
         stageId: this.folderInfo.stageId,
         dictKey: 1
       }
-      this.$api.project.folderList(Object.assign(data, this.page)).then(res => {
-        if (res.code === 200) {
-          this.data = res.data.records
-          this.total = res.data.total
-        }
-      })
+      this.loading = true
+      this.top = true
+      this.$api.resource
+        .folderList(Object.assign(data, this.page))
+        .then(res => {
+          this.loading = false
+          if (res.code === 200) {
+            this.data = res.data.records
+            this.total = res.data.total
+          }
+        })
     },
-    folderOpen(row) {
-      console.log(row)
+    getFileList(row) {
+      this.folderInfo = Object.assign(this.folderInfo, row)
       this.top = !this.top
-      const data = { id: row.id, isHistory: 0 }
-      this.$api.project.fileList(Object.assign(data, this.page)).then(res => {
+      const data = { id: row.id }
+      this.loading = true
+      this.$api.resource.fileList(Object.assign(data, this.page)).then(res => {
+        this.loading = false
         if (res.code === 200) {
-          this.data = res.data
+          this.data = res.data.records
         } else {
           this.$message.error(res.msg)
         }
@@ -217,12 +220,30 @@ export default {
         .then(res => {
           if (res.code === 200) {
             this.stage = res.data
+            this.folderInfo.stageId = this.stage[0].id
+            this.getFolderList()
           }
         })
     },
     folderResult(res) {
       this.stageId = res
       this.getFolderList()
+    },
+    uploadSuccess(files) {
+      const data = files.map(e => {
+        const data = {
+          fileId: e.id,
+          parentId: this.folderInfo.id,
+          projectId: this.folderInfo.projectId,
+          stageId: this.folderInfo.stageId
+        }
+        return Object.assign(e, data)
+      })
+      this.$api.resource.fileSave(data).then(res => {
+        if (res.code === 200) {
+          console.log(res)
+        }
+      })
     }
   }
 }

+ 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/, '')