Jelajahi Sumber

update views/disk

reghao 1 Minggu lalu
induk
melakukan
50d307f0de

+ 1 - 26
src/api/disk.js

@@ -9,12 +9,6 @@ const diskApi = {
   moveFileApi: '/api/disk/file/move',
   diskFileApi: '/api/disk/file/list',
   filePreviewApi: '/api/disk/file/preview',
-  createAlbumApi: '/api/disk/album/create',
-  editAlbumApi: '/api/disk/album/edit',
-  getAlbumKeyValueApi: '/api/disk/album/kv',
-  getAlbumListApi: '/api/disk/album/list',
-  getAlbumExcludeFilesApi: '/api/disk/album/exclude',
-  getAlbumDetailApi: '/api/disk/album/detail',
   getCamApi: '/api/disk/cam',
   createShareApi: '/api/disk/share/create',
   deleteShareApi: '/api/disk/share/delete',
@@ -24,6 +18,7 @@ const diskApi = {
   getCamRecordByMonthAPi: '/api/disk/cam/record/month',
   getRecordUrlAPi: '/api/disk/cam/record/url',
   getAlbumApi: '/api/disk/album',
+  getAlbumListApi: '/api/disk/album/list',
   getDiskChannelInfoApi: '/api/file/oss/serverinfo/file'
 }
 
@@ -67,30 +62,10 @@ export function getDiskChannelInfo() {
   return post(diskApi.getDiskChannelInfoApi)
 }
 
-export function createAlbum(payload) {
-  return post(diskApi.createAlbumApi, payload)
-}
-
-export function editAlbum(payload) {
-  return post(diskApi.editAlbumApi, payload)
-}
-
-export function getAlbumKeyValues() {
-  return get(diskApi.getAlbumKeyValueApi)
-}
-
 export function getAlbumList(pn) {
   return get(diskApi.getAlbumListApi + '?pn=' + pn)
 }
 
-export function getAlbumExcludeFiles(fileType, pn) {
-  return get(diskApi.getAlbumExcludeFilesApi + '?fileType=' + fileType + '&pn=' + pn)
-}
-
-export function getAlbumDetail(albumId, pn) {
-  return get(diskApi.getAlbumDetailApi + '/' + albumId + '?pn=' + pn)
-}
-
 export function createShare(payload) {
   return post(diskApi.createShareApi, payload)
 }

+ 5 - 27
src/views/disk/DiskFile.vue

@@ -209,7 +209,6 @@
 import {
   addFile,
   createFolder, deleteFile,
-  editAlbum,
   getAlbumList,
   getDiskChannelInfo,
   getDiskFile,
@@ -442,13 +441,11 @@ export default {
             fileParameterName: 'file',
             testChunks: true,
             // 服务器分片校验函数, 秒传及断点续传基础
-            checkChunkUploadedByResponse: function(chunk, message) {
-              const objMessage = JSON.parse(message)
-              const respData = objMessage.data
-              if (respData.skipUpload) {
-                return true
-              }
-              return (respData.uploaded || []).indexOf(chunk.offset + 1) >= 0
+            checkChunkUploadedByResponse: (chunk, message) => {
+              // 上传文件到 oss 后的响应
+              const obj = JSON.parse(message)
+              return obj.data.uploaded
+              // return (obj.data.uploaded || []).indexOf(chunk.offset + 1) >= 0
             },
             query: (file, chunk) => {
               return {
@@ -563,25 +560,6 @@ export default {
         }
       })
     },
-    onAddToAlbum(row) {
-      const albumId = row.albumId
-      const fileIds = []
-      for (const item of this.selectedTable) {
-        fileIds.push(item.fileId)
-      }
-      const jsonData = {}
-      jsonData.albumId = albumId
-      jsonData.operation = 1
-      jsonData.fileIds = fileIds
-      editAlbum(jsonData).then(resp => {
-        this.$message.info(resp.msg)
-      }).catch(error => {
-        this.$message.error(error.message)
-      })
-
-      this.showAddToAlbumUploadDialog = false
-      this.toggleSelection()
-    },
     moveToFolder() {
       for (const item of this.selectedTable) {
         this.moveFileForm.fileIds.push(item.fileId)

+ 8 - 31
src/views/diskm/Disk.vue

@@ -25,7 +25,7 @@
         :class="['tabbar-item', { 'is-active': isTabActive(item.path) }]"
         @click="handleTabClick(item.path)"
       >
-        <i :class="item.icon" class="tabbar-icon"></i>
+        <i :class="item.icon" class="tabbar-icon" />
         <span class="tabbar-text">{{ item.title }}</span>
       </div>
     </footer>
@@ -48,27 +48,11 @@
               @change="handleNotifyChange"
             />
           </el-form-item>
-          <el-form-item label="外观设置">
-            <el-radio-group v-model="settingForm.theme" size="mini">
-              <el-radio-button label="light">浅色</el-radio-button>
-              <el-radio-button label="dark">深色</el-radio-button>
-            </el-radio-group>
-          </el-form-item>
           <el-form-item label="默认视图">
-            <el-select v-model="settingForm.defaultView" placeholder="请选择" style="width: 100%">
-              <el-option label="列表视图" value="list" />
-              <el-option label="网格视图" value="grid" />
-            </el-select>
-          </el-form-item>
-          <el-form-item label="语言">
-            <el-select v-model="settingForm.lang" style="width: 100%">
-              <el-option label="简体中文" value="zh" />
-              <el-option label="English" value="en" />
-            </el-select>
-          </el-form-item>
-          <el-form-item label="存储空间" class="quota-form-item">
-            <div class="quota-text">已用 1.2GB / 6TB</div>
-            <el-progress :percentage="2" :show-text="false" :stroke-width="4" />
+            <el-radio-group v-model="settingForm.defaultView" size="mini">
+              <el-radio-button label="list">列表</el-radio-button>
+              <el-radio-button label="grid">网格</el-radio-button>
+            </el-radio-group>
           </el-form-item>
         </el-form>
 
@@ -77,8 +61,7 @@
         </div>
       </div>
       <span slot="footer" class="dialog-footer">
-        <el-button @click="showSettingDialog = false" style="width: 45%">取 消</el-button>
-        <el-button type="primary" @click="saveSettings" style="width: 45%">保 存</el-button>
+        <el-button style="width: 45%" @click="showSettingDialog = false">关 闭</el-button>
       </span>
     </el-dialog>
   </div>
@@ -98,9 +81,7 @@ export default {
       showSettingDialog: false,
       settingForm: {
         enableNotify: false,
-        theme: 'light',
-        defaultView: 'list',
-        lang: 'zh'
+        defaultView: 'list'
       },
       menuItems: [
         { path: '/disk/file', title: '文件', icon: 'el-icon-folder' },
@@ -126,14 +107,10 @@ export default {
     },
     handleNotifyChange(val) {
       submitActivity({ enabled: val }).then(resp => {
-        if(resp && resp.msg) this.$message.info(resp.msg)
+        if (resp && resp.msg) this.$message.info(resp.msg)
       }).catch(error => {
         this.$message.error(error.message)
       })
-    },
-    saveSettings() {
-      this.$message.success('设置已保存')
-      this.showSettingDialog = false
     }
   }
 }

+ 10 - 7
src/views/diskm/DiskFile.vue

@@ -269,7 +269,7 @@ export default {
       this.showCreateFolderDialog = true
     },
     createFolder() {
-      if(!this.createFolderForm.folderName.trim()) return
+      if (!this.createFolderForm.folderName.trim()) return
       this.createFolderForm.pid = this.currentPid
       this.loading = true
       createFolder(this.createFolderForm).then(resp => {
@@ -299,13 +299,16 @@ export default {
           this.uploadForm.channelCode = resp.data.channelCode
           this.options = {
             target: resp.data.ossUrl,
-            chunkSize: 1024 * 1024 * 5, // 手机端改为 5M 切片更稳定
+            chunkSize: 1024 * 1024 * 10, // 手机端改为 5M 切片更稳定
             maxChunkRetries: 2,
             fileParameterName: 'file',
-            testChunks: true,
-            checkChunkUploadedByResponse: (chunk, msg) => {
-              const res = JSON.parse(msg).data
-              return res.skipUpload || (res.uploaded || []).indexOf(chunk.offset + 1) >= 0
+            testChunks: false, // 不发送 GET 请求获取已上传的分片
+            // 服务器分片校验函数, 秒传及断点续传基础
+            checkChunkUploadedByResponse: (chunk, message) => {
+              // 上传文件到 oss 后的响应
+              const obj = JSON.parse(message)
+              return obj.data.uploaded
+              // return (obj.data.uploaded || []).indexOf(chunk.offset + 1) >= 0
             },
             query: () => ({ channelCode: resp.data.channelCode, multiparts: '' }),
             headers: { Authorization: 'Bearer ' + resp.data.token }
@@ -329,7 +332,7 @@ export default {
       this.$message.success('上传处理完成')
       setTimeout(() => { this.showUploadDialog = false; this.changeDirectory(this.queryForm.path) }, 800)
     },
-    handleDownload(file) { if(file && file.url) window.open(file.url, '_blank') },
+    handleDownload(file) { if (file && file.url) window.open(file.url, '_blank') },
     onSearchFile() { this.$message.info('搜索触发') },
     addToAlbum() {}, moveToFolder() {} // 后续逻辑类似
   }

+ 22 - 59
src/views/diskm/DiskMe.vue

@@ -5,13 +5,11 @@
         <el-avatar :size="64" :src="user ? user.avatarUrl : ''" class="m-avatar" />
         <div class="m-user-meta">
           <div class="m-username-row">
-            <span class="m-name">{{ user ? user.name : '未登录用户' }}</span>
-            <span class="m-vip-badge">黄金VIP</span>
+            <span class="m-name">{{ user ? user.screenName : '未登录用户' }}</span>
           </div>
           <span class="m-uid">ID: {{ user ? user.userId : '-' }}</span>
         </div>
       </div>
-      <el-button type="text" size="mini" class="m-edit-profile-btn" icon="el-icon-edit">修改资料</el-button>
     </div>
 
     <div class="mobile-storage-card">
@@ -20,24 +18,25 @@
           <i class="el-icon-cloudy" />
           <span class="s-title">云存储空间</span>
         </div>
-        <span class="s-action" @click="$message.info('前往扩容')">扩容套餐</span>
       </div>
 
       <div class="s-usage-display">
-        <span class="num-used">{{ usedSpaceGB }} GB</span>
-        <span class="num-total">/ {{ totalSpaceGB }} GB</span>
+        <span class="num-used">{{ diskSpace.used }} GB</span>
+        <span class="num-total">/ {{ diskSpace.total }} GB</span>
       </div>
 
       <div class="m-multi-progress">
-        <div class="m-seg video" :style="{ width: videoPercent + '%' }" />
-        <div class="m-seg photo" :style="{ width: photoPercent + '%' }" />
-        <div class="m-seg other" :style="{ width: otherPercent + '%' }" />
+        <div class="m-seg video" :style="{ width: diskSpace.videoPercent + '%' }" />
+        <div class="m-seg photo" :style="{ width: diskSpace.photoPercent + '%' }" />
+        <div class="m-seg audio" :style="{ width: diskSpace.audioPercent + '%' }" />
+        <div class="m-seg other" :style="{ width: diskSpace.otherPercent + '%' }" />
       </div>
 
       <div class="m-legend-grid">
-        <div class="l-item"><i class="dot-indicator is-video" />视频 ({{ videoPercent }}%)</div>
-        <div class="l-item"><i class="dot-indicator is-photo" />照片 ({{ photoPercent }}%)</div>
-        <div class="l-item"><i class="dot-indicator is-other" />其他 ({{ otherPercent }}%)</div>
+        <div class="l-item"><i class="dot-indicator is-video" />视频 ({{ diskSpace.videoPercent }}%)</div>
+        <div class="l-item"><i class="dot-indicator is-photo" />照片 ({{ diskSpace.photoPercent }}%)</div>
+        <div class="l-item"><i class="dot-indicator is-photo" />音频 ({{ diskSpace.audioPercent }}%)</div>
+        <div class="l-item"><i class="dot-indicator is-other" />其他 ({{ diskSpace.otherPercent }}%)</div>
       </div>
     </div>
 
@@ -60,34 +59,6 @@
         <i class="el-icon-arrow-right item-right-arrow" />
       </div>
     </div>
-
-    <el-dialog
-      title="账号设置"
-      :visible.sync="showSettings"
-      width="90%"
-      custom-class="mobile-popup-settings"
-      append-to-body
-    >
-      <div class="mobile-form-list">
-        <div class="form-row">
-          <span class="f-label">离线下载通知</span>
-          <el-switch v-model="switchEnabled" @change="onSwitchChange" />
-        </div>
-        <el-divider class="m-divider" />
-        <div class="form-row">
-          <span class="f-label">隐私保护模式</span>
-          <el-switch v-model="privacyEnabled" />
-        </div>
-        <el-divider class="m-divider" />
-        <div class="form-row">
-          <span class="f-label">客户端版本</span>
-          <span class="v-tag">v1.2.0 (Stable)</span>
-        </div>
-      </div>
-      <div slot="footer" class="dialog-footer-full">
-        <el-button type="primary" round style="width: 100%" @click="showSettings = false">关闭窗口</el-button>
-      </div>
-    </el-dialog>
   </div>
 </template>
 
@@ -99,20 +70,17 @@ export default {
   data() {
     return {
       user: null,
-      usedSpaceGB: 120,
-      totalSpaceGB: 6144,
-      videoPercent: 45,
-      photoPercent: 15,
-      otherPercent: 10,
-      showSettings: false,
-      switchEnabled: false,
-      privacyEnabled: true,
+      diskSpace: {
+        total: 6144,
+        used: 120,
+        videoPercent: 35,
+        photoPercent: 25,
+        audioPercent: 30,
+        otherPercent: 10
+      },
       actionList: [
-        { title: '离线下载', desc: '支持磁力链接与 BT 种子', icon: 'el-icon-link', color: '#1989fa' },
         { title: '回收站', desc: '已删除文件保留 30 天', icon: 'el-icon-delete', color: '#f56c6c' },
-        { title: '传输中心', desc: '查看当前上传与下载任务', icon: 'el-icon-sort', color: '#67c23a' },
-        { title: '个人设置', desc: '修改头像、密码与偏好', icon: 'el-icon-setting', color: '#64748b', action: 'settings' },
-        { title: '帮助反馈', desc: '遇到问题?联系客服', icon: 'el-icon-chat-dot-round', color: '#e6a23c' }
+        { title: '个人设置', desc: '修改头像、密码与偏好', icon: 'el-icon-setting', color: '#64748b', action: 'settings' }
       ]
     }
   },
@@ -121,13 +89,7 @@ export default {
   },
   methods: {
     handleAction(item) {
-      if (item.action === 'settings') {
-        this.showSettings = true
-      } else {
-        this.$message.info(`导航至: ${item.title}`)
-      }
-    },
-    onSwitchChange(val) {
+      this.$message.info(`导航至: ${item.title}`)
     }
   }
 }
@@ -199,6 +161,7 @@ export default {
 .m-seg { height: 100%; }
 .m-seg.video { background: #1989fa; }
 .m-seg.photo { background: #67c23a; }
+.m-seg.audio { background: #3ac2a7; }
 .m-seg.other { background: #ff976a; }
 
 .m-legend-grid {