Browse Source

fix:文件共享管理去除上传限制
fix:新增权限控制
fix:新增文件共享小列表
fix:调整页面样式

liziliang 1 month ago
parent
commit
4728ce8409

+ 12 - 0
src/api/message/index.ts

@@ -31,6 +31,18 @@ export function getUserMessageNoPageList(
   });
 }
 
+export function getFileShareNoPageList(
+  fileName: string
+): AxiosPromise {
+  return request({
+    url: `/api/v1/synFileShare/list`,
+    method: "post",
+    data: {
+      fileName: fileName,
+    },
+  });
+}
+
 export function getUserMessagePage(type: string, title?: string): AxiosPromise {
   return request({
     url: "/api/v1/sys/message/user/page",

+ 1 - 0
src/api/user/types.ts

@@ -15,6 +15,7 @@ export interface UserInfo {
   canCreateMessage: boolean; //是否有创建消息的权限
   setRoles: boolean; //是否有设置角色的权限
   canSetMessageOrg: boolean; //是否有设置消息组织的权限
+  canFileShare: boolean; //是否有设置消息组织的权限
 }
 
 /**

+ 3 - 0
src/store/modules/user.ts

@@ -16,6 +16,7 @@ export const useUserStore = defineStore("user", () => {
     canCreateMessage: false,
     setRoles: false,
     canSetMessageOrg: false,
+    canFileShare: false,
   });
 
   const isGetAuth = ref(false); //是否已经请求过auth接口活的role和menus了
@@ -75,6 +76,8 @@ export const useUserStore = defineStore("user", () => {
                 user.value.setRoles = true;
               } else if (menu.id === 11) {
                 user.value.canSetMessageOrg = true;
+              } else if (menu.id === 12) {
+                user.value.canFileShare = true;
               }
             }
           });

+ 145 - 0
src/views/main/fileList.vue

@@ -0,0 +1,145 @@
+<template>
+  <div class="common-box" style="margin-top: 20px">
+    <TopTitle :messageType="messageType" :title="title" icon="laba"/>
+    <div>
+      <el-input
+        v-model="searchText"
+        class="input-with-select"
+        clearable
+        placeholder="输入标题可以搜索..."
+        @clear="getDataList"
+      >
+        <template #append>
+          <el-button :icon="Search" @click="getDataList"/>
+        </template>
+      </el-input>
+    </div>
+    <div class="list-box">
+      <el-scrollbar style="width: 100%; height: 200px">
+        <div
+          v-for="(item, index) in dataList"
+          :key="index"
+          class="line"
+        >
+          <div class="text-ellipsis" :content="item.fileTitle">{{ item.fileTitle }}</div>
+          <div class="text-ellipsis">{{ item.fileName }}</div>
+          <div class="date">{{ item.created }}</div>
+          <div
+            v-show="item.fileUrl != null &&  item.fileUrl != ''"
+            class="message-time download-btn"
+          >
+            <el-button
+              @click="downloadFile(item)"
+              :loading="downloadBtnLoading = false"
+              type="primary"
+              size="small"
+            >下载
+            </el-button>
+          </div>
+        </div>
+      </el-scrollbar>
+    </div>
+    <!--    <MessageDetail ref="messageDetailRef" />-->
+  </div>
+</template>
+
+<script lang="ts" setup>
+import {getFileShareNoPageList, getUserMessageNoPageList} from "@/api/message";
+// import MessageDetail from "@/views/messages/MessageDetail.vue";
+import {Search} from "@element-plus/icons-vue";
+import buttonPermission from "@/common/configs/buttonPermission";
+
+const props = defineProps({
+  // 消息类型 0 系统公告 1 工位消息 2-具体某些人员消息
+  messageType: {
+    type: String,
+    default: "",
+  },
+  title: {
+    type: String,
+    default: "个人消息",
+  },
+});
+
+const searchText = ref(null);
+const dataList = ref<any[]>();
+
+onMounted(() => {
+  getDataList();
+});
+const downloadBtnLoading = ref(false);
+const downloadFile = async (row: any) => {
+  downloadBtnLoading.value = true;
+  let url = import.meta.env.VITE_APP_UPLOAD_URL + row.fileUrl;
+  // 1. 获取资源并转为Blob
+  const response = await fetch(url);
+  const blob = await response.blob();
+
+  // 2. 创建临时对象URL
+  const tempUrl = URL.createObjectURL(blob);
+
+  // 3. 创建隐藏a标签触发下载
+  const link = document.createElement("a");
+  link.href = tempUrl;
+  link.download = row.fileName;
+  link.style.display = "none";
+  document.body.appendChild(link);
+  link.click();
+
+  // 4. 清理内存
+  URL.revokeObjectURL(tempUrl);
+  document.body.removeChild(link);
+  downloadBtnLoading.value = false;
+};
+// const messageDetailRef = ref<InstanceType<typeof MessageDetail>>();
+// const showDetail = (item: any) => {
+//   messageDetailRef.value?.handleOpenDrawer(item.id);
+// };
+
+const getDataList = () => {
+  getFileShareNoPageList(searchText.value).then((res) => {
+    console.log(res.data);
+    dataList.value = res.data ?? [];
+  });
+};
+</script>
+
+<style lang="scss" scoped>
+.text-ellipsis {
+  white-space: nowrap; /* 禁止换行 */
+  overflow: hidden; /* 超出部分隐藏 */
+  text-overflow: ellipsis; /* 超出显示省略号 */
+  max-width: 30%; /* 可选:限制最大宽度 */
+}
+
+.list-box {
+  margin-top: 5px;
+  height: calc(100vh - 780px);
+  padding: 0 20px;
+
+  .line {
+    border-bottom: 1px solid #eee;
+    line-height: 40px;
+    display: flex;
+    justify-content: space-between;
+
+    .title {
+      font-size: 16px;
+      color: #1a1a1a;
+      text-align: left;
+      white-space: nowrap;
+      width: 73%;
+      overflow: hidden; /*超出宽度部分隐藏*/
+      text-overflow: ellipsis; /*超出部分以点号代替*/
+    }
+
+    .date {
+      font-size: 14px;
+      color: #888888;
+      text-align: right;
+      width: 35%;
+      flex-shrink: 0;
+    }
+  }
+}
+</style>

+ 9 - 8
src/views/main/main.vue

@@ -2,16 +2,16 @@
   <div>
     <el-row :gutter="20">
       <el-col :span="24">
-        <Systems />
+        <Systems/>
         <el-row :gutter="20">
           <el-col :span="20">
-            <ScreenEntry />
+            <ScreenEntry/>
           </el-col>
           <el-col
             v-if="userStore.user.canSetIP || userStore.user.canSetPermission"
             :span="4"
           >
-            <Set />
+            <Set/>
           </el-col>
         </el-row>
       </el-col>
@@ -21,13 +21,13 @@
     </el-row>
     <el-row :gutter="20">
       <el-col :span="8">
-        <!--        <Message />-->
+        <FileList title="文件共享"/>
       </el-col>
       <el-col :span="8">
-        <Message message-type="2" title="系统公告" />
+        <Message message-type="2" title="系统公告"/>
       </el-col>
       <el-col :span="8">
-        <Message message-type="0" title="个人公告" />
+        <Message message-type="0" title="个人公告"/>
       </el-col>
     </el-row>
   </div>
@@ -38,12 +38,13 @@ import Systems from "@/views/systems/systems.vue";
 import ScreenEntry from "@/views/main/screenEntry.vue";
 import Set from "@/views/main/set.vue";
 import Message from "@/views/main/message.vue";
-import { useUserStore } from "@/store";
+import FileList from "@/views/main/fileList.vue";
+import {useUserStore} from "@/store";
 
 const userStore = useUserStore();
 const router = useRouter();
 const gotoZHDP = () => {
-  router.push({ name: "totalScreen" });
+  router.push({name: "totalScreen"});
 };
 </script>
 

+ 1 - 1
src/views/main/set.vue

@@ -55,7 +55,7 @@
           </el-col>
           <el-col :span="12">
             <h3
-              v-if="userStore.user.canSetIP"
+              v-if="userStore.user.canFileShare"
               class="sys-item-title"
               @click="gotoFilesPage"
             >

+ 1 - 35
src/views/sets/files.vue

@@ -20,46 +20,12 @@
         <FilesUpload
           v-model:src="form.fileUrl"
           v-model:file-name-list="filesNamesList"
+          :showTip="false"
           :limit="1"
           @finished="onUploadFinish"
         />
       </template>
     </avue-crud>
-
-    <!-- 分配菜单弹窗  -->
-    <el-dialog v-model="menuDialogVisible" title="权限分配" width="700px">
-      <el-scrollbar v-loading="loading" max-height="600px">
-        <el-button type="primary" @click="toggleCheckAll">全选</el-button>
-        <el-button @click="resetChecked">清空</el-button>
-        <el-tree
-          ref="treeRef"
-          :data="menuList"
-          :default-expand-all="false"
-          :props="{
-            children: 'childs',
-            label: 'menuName',
-            value: 'id',
-            disabled: '',
-          }"
-          node-key="id"
-          show-checkbox
-          style="margin-top: 20px"
-        >
-          <template #default="{ data }">
-            {{ data.menuName }}
-          </template>
-        </el-tree>
-      </el-scrollbar>
-
-      <template #footer>
-        <div class="dialog-footer">
-          <el-button type="primary" @click="handleRoleMenuSubmit"
-            >确 定
-          </el-button>
-          <el-button @click="menuDialogVisible = false">取 消</el-button>
-        </div>
-      </template>
-    </el-dialog>
   </div>
 </template>
 <script setup>