star7th 6 年 前
コミット
e185e17695

BIN
Sqlite/showdoc.db.php


+ 49 - 0
server/Application/Api/Controller/RecycleController.class.php

@@ -0,0 +1,49 @@
+<?php
+namespace Api\Controller;
+use Think\Controller;
+class RecycleController extends BaseController {
+
+
+
+    //获取被删除的页面列表
+    public function getList(){
+        $item_id = I("item_id/d");  
+        $login_user = $this->checkLogin();
+        $uid = $login_user['uid'] ;
+        if(!$this->checkItemCreator($uid , $item_id)){
+            $this->sendError(10303);
+            return ;
+        } 
+        if ($item_id > 0 ) {
+            $ret = D("Recycle")->where(" item_id = '$item_id' ")->order(" del_time desc  ")->select();
+        }
+        if ($ret) {
+            foreach ($ret as $key => &$value) {
+                $value['del_time'] = date("Y-m-d H:i:s",$value['del_time']);
+            }
+        }
+        $this->sendResult($ret);
+    }
+
+
+    //恢复页面
+    public function recover(){
+        $item_id = I("item_id/d");  
+        $page_id = I("page_id/d");  
+        $login_user = $this->checkLogin();
+        $uid = $login_user['uid'] ;
+        if(!$this->checkItemCreator($uid , $item_id)){
+            $this->sendError(10303);
+            return ;
+        } 
+        if ($item_id > 0 ) {
+            M("Page")->where(" page_id = '$page_id' ")->save(array("is_del"=>0));
+            D("Page")->where(" page_id = '$page_id' ")->save(array("is_del"=>0 ,"cat_id"=>0));
+            $ret = D("Recycle")->where(" item_id = '$item_id' and page_id = '$page_id' ")->delete();
+        }
+        $this->sendResult();
+    }
+
+
+
+}

+ 9 - 0
server/Application/Api/Controller/ScriptCronController.class.php

@@ -36,6 +36,15 @@ class ScriptCronController extends BaseController {
             }
         }
 
+        $pages = D("Recycle")->where(" del_time < ".(time() - 3*24*60*60))->select();
+        if ($pages) {
+            foreach ($pages as $key => $value) {
+                $ret = D("Page")->deletePage($value['page_id']);
+                D("Recycle")->where(" id = '$value[id]' ")->delete();
+            }
+        }
+
+
     }
 
 

+ 11 - 0
server/Application/Api/Model/PageModel.class.php

@@ -126,6 +126,17 @@ class PageModel extends BaseModel {
 
    //软删除页面
    public function softDeletePage($page_id){
+      //放入回收站
+      $login_user = session('login_user');
+      $page = D("Page")->field("item_id,page_title")->where(" page_id = '$page_id' ")->find() ;
+      D("Recycle")->add(array(
+        "item_id" =>$page['item_id'],
+        "page_id" =>$page_id,
+        "page_title" =>$page['page_title'],
+        "del_by_uid" =>$login_user['uid'],
+        "del_by_username" =>$login_user['username'],
+        "del_time" =>time()
+        ));
       $ret = M("Page")->where(" page_id = '$page_id' ")->save(array("is_del"=>1 ,"addtime"=>time()));
       return $ret;
    }

+ 11 - 0
server/Application/Home/Controller/UpdateController.class.php

@@ -226,6 +226,17 @@ class UpdateController extends BaseController {
         )";
         D("User")->execute($sql);
 
+        //创建recycle表
+        $sql = "CREATE TABLE IF NOT EXISTS `recycle` (
+        `id`  INTEGER PRIMARY KEY ,
+        `item_id` int(11) NOT NULL DEFAULT '0',
+        `page_id` int(11) NOT NULL DEFAULT '0',
+        `page_title` CHAR(200) NOT NULL DEFAULT '',
+        `del_by_uid` int(11) NOT NULL DEFAULT '0',
+        `del_by_username` CHAR(200) NOT NULL DEFAULT '',
+        `del_time` int(11) NOT NULL DEFAULT '0'
+        )";
+        D("User")->execute($sql);
 
         echo "OK!\n";
     }

+ 5 - 0
web_src/src/components/item/Index.vue

@@ -366,6 +366,10 @@ export default {
         };
         this.sort_item(data);
       })
+    },
+    script_cron(){
+      var url = DocConfig.server+'/api/ScriptCron/run';
+      this.axios.get(url);
     }
 
   },
@@ -374,6 +378,7 @@ export default {
     this.user_info();
     this.dragging();
     this.lang = DocConfig.lang ;
+    this.script_cron();
   },
   beforeDestroy(){
     this.$message.closeAll();

+ 13 - 1
web_src/src/components/item/setting/Index.vue

@@ -34,6 +34,15 @@
 
             </el-tab-pane>
 
+            <el-tab-pane :label="$t('recycle')" name="five">
+
+                  <Recycle > </Recycle >
+                  
+                </el-form>
+
+            </el-tab-pane>
+
+
             </el-tabs>
           </template>
           </el-card>
@@ -50,13 +59,16 @@ import Info from '@/components/item/setting/Info'
 import Member from '@/components/item/setting/Member'
 import Advanced from '@/components/item/setting/Advanced'
 import OpenApi from '@/components/item/setting/OpenApi'
+import Recycle from '@/components/item/setting/Recycle'
+
 export default {
   name: 'Login',
   components : {
     Info,
     Member,
     Advanced,
-    OpenApi
+    OpenApi,
+    Recycle
   },
   data () {
     return {

+ 122 - 0
web_src/src/components/item/setting/Recycle.vue

@@ -0,0 +1,122 @@
+<template>
+  <div class="hello">
+    <p class="tips">{{$t("recycle_tips")}}</p>
+    <!-- 页面列表 -->
+     <el-table align="left"
+          v-if="lists.length>0"
+          :data="lists"
+          style="width: 100%">
+          <el-table-column
+            prop="page_title"
+            :label="$t('page_title')"
+            >
+          </el-table-column>
+          <el-table-column
+            prop="del_by_username"
+            :label="$t('deleter')"
+            >
+          </el-table-column>
+          <el-table-column
+            prop="del_time"
+            :label="$t('del_time')"
+            >
+          </el-table-column>
+          <el-table-column
+            prop=""
+            :label="$t('operation')">
+            <template slot-scope="scope">
+              <el-button @click="recover(scope.row.page_id)" type="text" size="small">{{$t("recover")}}</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+
+
+
+
+  </div>
+</template>
+
+<script>
+
+
+export default {
+  name: 'Login',
+  components : {
+
+  },
+  data () {
+    return {
+      MyForm:{
+        username:'',
+        is_readonly:false
+      },
+      MyForm2:{
+        team_id:'',
+      },
+      lists:[],
+    }
+
+  },
+  methods: {
+
+      get_list(){
+        var that = this ;
+        var url = DocConfig.server+'/api/recycle/getList';
+        var params = new URLSearchParams();
+        params.append('item_id',  that.$route.params.item_id);
+        that.axios.post(url, params)
+          .then(function (response) {
+            if (response.data.error_code === 0 ) {
+              var Info = response.data.data
+              that.lists =  Info;
+            }else{
+              that.$alert(response.data.error_message);
+            }
+            
+          });
+      },
+      recover(page_id){
+          var that = this ;
+          var url = DocConfig.server+'/api/recycle/recover';
+
+          this.$confirm(this.$t("recover_tips"), ' ', {
+            confirmButtonText: that.$t('confirm'),
+            cancelButtonText: that.$t('cancel'),
+            type: 'warning'
+          }).then(() => {
+            var params = new URLSearchParams();
+            params.append('item_id',  that.$route.params.item_id);
+            params.append('page_id', page_id);
+
+            that.axios.post(url, params)
+            .then(function (response) {
+              if (response.data.error_code === 0 ) {
+                that.get_list() ;
+              }else{
+                that.$alert(response.data.error_message);
+              }
+            }); 
+          })
+      }
+
+  },
+
+  mounted(){
+    this.get_list();
+  }
+}
+</script>
+
+<!-- Add "scoped" attribute to limit CSS to this component only -->
+<style scoped>
+
+.hello{
+  text-align: left;
+}
+.tips{
+  margin-left: 10px;
+  color: #9ea1a6;
+
+}
+
+</style>

+ 9 - 1
web_src/static/lang/en.js

@@ -174,7 +174,6 @@ exports.default = {
     'cancel':'Cancel',
     'update_time':'Update time',
     'update_by_who':'Update by ',
-    'operation':'Operation',
     'recover_to_this_version':'Recover',
     'close':'Close',
     'finish':'Finish',
@@ -294,4 +293,13 @@ exports.default = {
     "jump_to_an_item":"jump to an item",
     "jump_to_item":"choose item",
 
+    "recycle":"recycle",
+    "recycle_tips":"The deleted page will go to the recycle bin. The content in the recycle bin for more than 3 days will be automatically selected by the system and cleaned up when appropriate",
+    "page_title":"Page title",
+    "deleter":"Delete Account",
+    "del_time":"Delete time",
+    "recover":"recover",
+    "recover_tips":"Are you sure to recover? The recovered page will appear in the item root",
+
+
 };

+ 9 - 1
web_src/static/lang/zh-CN.js

@@ -179,7 +179,6 @@ exports.default = {
     'cancel':'取消',
     'update_time':'修改时间',
     'update_by_who':'修改人',
-    'operation':'操作',
     'recover_to_this_version':'恢复到此版本',
     'close':'关闭',
     'finish':'完成',
@@ -300,4 +299,13 @@ exports.default = {
     "login_page":"跳转到登录页面",
     "jump_to_an_item":"跳转到某个项目",
     "jump_to_item":"跳转到项目",
+
+    "recycle":"回收站",
+    "recycle_tips":"被删除的页面会进入回收站。在回收站超过3天的内容将被系统自动选择合适时候清理掉",
+    "page_title":"页面标题",
+    "deleter":"删除账号",
+    "del_time":"删除时间",
+    "recover":"恢复",
+    "recover_tips":"确认恢复吗?恢复的页面将出现在项目根目录",
+
 };