From 089bf5d2378b3c4a61d795b2a92bede2c193b771 Mon Sep 17 00:00:00 2001
From: admin <344137771@qq.com>
Date: Tue, 06 Jan 2026 11:22:58 +0800
Subject: [PATCH] 1

---
 src/components/note/NoteAnnexRecycle.vue |  205 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 205 insertions(+), 0 deletions(-)

diff --git a/src/components/note/NoteAnnexRecycle.vue b/src/components/note/NoteAnnexRecycle.vue
new file mode 100644
index 0000000..64343f0
--- /dev/null
+++ b/src/components/note/NoteAnnexRecycle.vue
@@ -0,0 +1,205 @@
+<template>
+  <div class="lum-dialog-mask">
+    <el-container
+      class="lum-dialog-box animated bounceInDown"
+    >
+      <el-header height="60px" class="header no-select">
+        <p>近 30 天删除的附件({{ tableData.length }})</p>
+        <p class="tools">
+          <i class="el-icon-close" @click="close" />
+        </p>
+      </el-header>
+      <el-main class="main lum-scrollbar">
+        <el-table :data="tableData" size="mini">
+          <div slot="empty">暂无相关数据</div>
+          <el-table-column
+            prop="original_name"
+            label="附件名称"
+            width="230"
+            :show-overflow-tooltip="true"
+          >
+            <template slot-scope="scope">
+              <el-button type="text" @click="downloadAnnex(scope.row.id)">{{
+                scope.row.original_name
+              }}</el-button>
+            </template>
+          </el-table-column>
+          <el-table-column
+            prop="title"
+            label="所属笔记"
+            :show-overflow-tooltip="true"
+          >
+          </el-table-column>
+          <el-table-column
+            prop="day"
+            label="剩余天数"
+            align="center"
+            width="80"
+          >
+          </el-table-column>
+          <el-table-column
+            fixed="right"
+            label="操作"
+            width="100"
+            align="center"
+          >
+            <template slot-scope="scope">
+              <el-button
+                type="text"
+                size="small"
+                @click="recoverAnnex(scope.row)"
+                >恢复</el-button
+              >
+              <el-popover
+                placement="top"
+                @hide="lock(false)"
+                @show="lock(true)"
+                :ref="`popover-${scope.$index}`"
+              >
+                <p style="margin-bottom: 10px">
+                  【{{
+                    scope.row.original_name
+                  }}】附件您确定要永久删除吗?<br />
+                </p>
+                <div style="text-align: right; margin: 0">
+                  <el-button
+                    size="mini"
+                    type="text"
+                    @click="
+                      scope._self.$refs[`popover-${scope.$index}`].doClose()
+                    "
+                  >
+                    取消</el-button
+                  >
+                  <el-button
+                    type="primary"
+                    size="mini"
+                    @click="deleteAnnex(scope.row, scope.$index)"
+                    >确定</el-button
+                  >
+                </div>
+                <el-button
+                  slot="reference"
+                  type="text"
+                  size="small"
+                  style="color: #ec5252; margin-left: 5px"
+                  >删除</el-button
+                >
+              </el-popover>
+            </template>
+          </el-table-column>
+        </el-table>
+      </el-main>
+      <el-footer class="footer" height="30px">
+        <p class="footer-tip">移动至回收站的附件和笔记,将在 30 天后自动清除</p>
+      </el-footer>
+    </el-container>
+  </div>
+</template>
+<script>
+import Vue from 'vue'
+import { Table, TableColumn } from 'element-ui'
+Vue.use(Table)
+Vue.use(TableColumn)
+
+import {
+  ServeGetRecoverAnnexList,
+  ServeRecoverArticleAnnex,
+  ServeDownloadAnnex,
+  ServeForeverDeleteAnnex,
+} from '@/api/article'
+
+export default {
+  name: 'NoteAnnexRecycle',
+  data() {
+    return {
+      tableData: [],
+      closeLock: false,
+    }
+  },
+  created() {
+    this.loadList()
+  },
+  methods: {
+    loadList() {
+      ServeGetRecoverAnnexList().then(res => {
+        if (res.code == 200) {
+          this.tableData = res.data.rows
+        }
+      })
+    },
+
+    // 关闭当前窗口
+    close() {
+      if (!this.closeLock) this.$emit('close')
+    },
+
+    // 给遮罩层加锁
+    lock(value) {
+      this.closeLock = value
+    },
+
+    // 恢复附件
+    recoverAnnex(data, index) {
+      ServeRecoverArticleAnnex({
+        annex_id: data.id,
+      }).then(res => {
+        if (res.code == 200) {
+          this.tableData.splice(index, 1)
+        }
+      })
+    },
+
+    //永久删除附件
+    deleteAnnex(data, index) {
+      ServeForeverDeleteAnnex({
+        annex_id: data.id,
+      })
+        .then(res => {
+          this.$refs[`popover-${index}`].doClose()
+          this.lock(false)
+          if (res.code == 200) {
+            this.tableData.splice(index, 1)
+          } else {
+            this.$notify({
+              message: '附件删除失败...',
+            })
+          }
+        })
+        .catch(() => {
+          this.$refs[`popover-${index}`].doClose()
+          this.lock(false)
+        })
+    },
+
+    //下载笔记附件
+    downloadAnnex: ServeDownloadAnnex,
+  },
+}
+</script>
+<style lang="less" scoped>
+.lum-dialog-box {
+  width: 100%;
+  height: 80%;
+  max-width: 800px;
+
+  .main {
+    padding-top: 0;
+  }
+
+  .footer {
+    .footer-tip {
+      color: #a7afbc;
+      font-size: 12px;
+      font-weight: 400;
+      line-height: 1.6;
+    }
+  }
+}
+
+/deep/ .tab-header-row .cell {
+  font-size: 14px;
+  font-weight: 400;
+  color: rgb(172, 167, 167);
+}
+</style>

--
Gitblit v1.9.3