Bläddra i källkod

Item members may withdraw from the item by themselves.
项目成员可以自行退出项目

star7th 6 år sedan
förälder
incheckning
a7be5a093b

+ 28 - 2
server/Application/Api/Controller/ItemController.class.php

@@ -181,14 +181,19 @@ class ItemController extends BaseController {
                 $member_item_ids[] = $value['item_id'] ;
             }
         }
-        $items  = D("Item")->field("item_id,item_name,item_domain,item_type,last_update_time,item_description,is_del")->where("uid = '$login_user[uid]' or item_id in ( ".implode(",", $member_item_ids)." ) ")->order("item_id asc")->select();
+        $items  = D("Item")->field("item_id,uid,item_name,item_domain,item_type,last_update_time,item_description,is_del")->where("uid = '$login_user[uid]' or item_id in ( ".implode(",", $member_item_ids)." ) ")->order("item_id asc")->select();
         
         
-        foreach ($items as $key => $value) {
+        foreach ($items as $key => &$value) {
             //如果项目已标识为删除
             if ($value['is_del'] == 1) {
                 unset($items[$key]);
             }
+            if ($value['uid'] == $login_user['uid']) {
+               $value['creator'] = 1 ;
+            }else{
+                $value['creator'] = 0 ;
+            }
         }
         $items = array_values($items);
         //读取需要置顶的项目
@@ -596,5 +601,26 @@ class ItemController extends BaseController {
         }
     }
 
+    public function exitItem(){
+
+        $login_user = $this->checkLogin();
+
+        $item_id = I("item_id/d");
+
+        //判断,如果是处于团队中,则提示他去请团队管理者把ta从团队中删除
+        $row = D("TeamItemMember")->join(" left join team on team.id = team_item_member.team_id ")->where("item_id = '$item_id' and member_uid ='$login_user[uid]' ")->find();
+        if ($row) {
+           $this->sendError(10101,"你目前处于团队'{$row[team_name]}'中。你可以请'{$row[username]}'把你从团队成员中删除");
+           return ;
+        }
+        //如果不是处于团队中,仅仅是项目成员,则直接删除
+        $ret = D("ItemMember")->where("item_id = '$item_id' and uid ='$login_user[uid]' ")->delete();
 
+        if ($ret) {
+           $this->sendResult(array());
+        }else{
+            $this->sendError(10101);
+        }
+    }
+    
 }

+ 1 - 1
web/index.html

@@ -4,4 +4,4 @@
       "server": window.location.protocol +'//'+ window.location.host + window.location.pathname+ '../server/index.php?s=',
       //"lang" :'en'
       "lang" :'zh-cn'
-  }</script><link href=./static/css/app.ba70aba5ac6d6743750aea933497349a.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.1702224c9c97581b7a84.js></script><script type=text/javascript src=./static/js/vendor.3015ff35497f22398e85.js></script><script type=text/javascript src=./static/js/app.ff31bd4e52af02fbc562.js></script></body></html>
+  }</script><link href=./static/css/app.b08bab6045462304d30c482062815358.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.4ce7c991653448cd52d7.js></script><script type=text/javascript src=./static/js/vendor.3015ff35497f22398e85.js></script><script type=text/javascript src=./static/js/app.1ecfc4aee58cb448d9a6.js></script></body></html>

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
web/static/css/app.b08bab6045462304d30c482062815358.css


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
web/static/css/app.ba70aba5ac6d6743750aea933497349a.css


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
web/static/js/app.1ecfc4aee58cb448d9a6.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
web/static/js/app.ff31bd4e52af02fbc562.js


+ 1 - 1
web/static/js/manifest.1702224c9c97581b7a84.js → web/static/js/manifest.4ce7c991653448cd52d7.js

@@ -1 +1 @@
-!function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}var r=window.webpackJsonp;window.webpackJsonp=function(t,c,a){for(var i,u,f,s=0,l=[];s<t.length;s++)u=t[s],o[u]&&l.push(o[u][0]),o[u]=0;for(i in c)Object.prototype.hasOwnProperty.call(c,i)&&(e[i]=c[i]);for(r&&r(t,c,a);l.length;)l.shift()();if(a)for(s=0;s<a.length;s++)f=n(n.s=a[s]);return f};var t={},o={2:0};n.e=function(e){function r(){i.onerror=i.onload=null,clearTimeout(u);var n=o[e];0!==n&&(n&&n[1](new Error("Loading chunk "+e+" failed.")),o[e]=void 0)}var t=o[e];if(0===t)return new Promise(function(e){e()});if(t)return t[2];var c=new Promise(function(n,r){t=o[e]=[n,r]});t[2]=c;var a=document.getElementsByTagName("head")[0],i=document.createElement("script");i.type="text/javascript",i.charset="utf-8",i.async=!0,i.timeout=12e4,n.nc&&i.setAttribute("nonce",n.nc),i.src=n.p+"static/js/"+e+"."+{0:"3015ff35497f22398e85",1:"ff31bd4e52af02fbc562"}[e]+".js";var u=setTimeout(r,12e4);return i.onerror=i.onload=r,a.appendChild(i),c},n.m=e,n.c=t,n.d=function(e,r,t){n.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:t})},n.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(r,"a",r),r},n.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},n.p="./",n.oe=function(e){throw console.error(e),e}}([]);
+!function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}var r=window.webpackJsonp;window.webpackJsonp=function(t,c,a){for(var i,u,f,s=0,l=[];s<t.length;s++)u=t[s],o[u]&&l.push(o[u][0]),o[u]=0;for(i in c)Object.prototype.hasOwnProperty.call(c,i)&&(e[i]=c[i]);for(r&&r(t,c,a);l.length;)l.shift()();if(a)for(s=0;s<a.length;s++)f=n(n.s=a[s]);return f};var t={},o={2:0};n.e=function(e){function r(){i.onerror=i.onload=null,clearTimeout(u);var n=o[e];0!==n&&(n&&n[1](new Error("Loading chunk "+e+" failed.")),o[e]=void 0)}var t=o[e];if(0===t)return new Promise(function(e){e()});if(t)return t[2];var c=new Promise(function(n,r){t=o[e]=[n,r]});t[2]=c;var a=document.getElementsByTagName("head")[0],i=document.createElement("script");i.type="text/javascript",i.charset="utf-8",i.async=!0,i.timeout=12e4,n.nc&&i.setAttribute("nonce",n.nc),i.src=n.p+"static/js/"+e+"."+{0:"3015ff35497f22398e85",1:"1ecfc4aee58cb448d9a6"}[e]+".js";var u=setTimeout(r,12e4);return i.onerror=i.onload=r,a.appendChild(i),c},n.m=e,n.c=t,n.d=function(e,r,t){n.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:t})},n.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(r,"a",r),r},n.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},n.p="./",n.oe=function(e){throw console.error(e),e}}([]);

+ 4 - 1
web/static/lang/en.js

@@ -274,5 +274,8 @@ exports.default = {
     "register_open":"Open registration",
     "long_page_tips":'The content of this page was detected to be more, and showdoc temporarily shut down the HTML real-time preview function to prevent the page from getting stuck due to too much content. You can find the preview button in the edit bar and open it manually.',
 
-    
+    "item_exit":"Exit item",
+    "confirm_exit_item":"Are you sure to exit this item?",
+
+       
 };

+ 3 - 1
web/static/lang/zh-CN.js

@@ -280,5 +280,7 @@ exports.default = {
     "register_open":"开放用户注册",
     "long_page_tips":"检测到本页面内容比较多,showdoc暂时关闭了html实时预览功能,以防止过多内容造成页面卡顿。你可以在编辑栏中找到预览按钮进行手动打开。",
 
-    
+
+    "item_exit":"退出项目",
+    "confirm_exit_item":"你确定要退出该项目吗?",   
 };

+ 32 - 25
web_src/src/components/item/Index.vue

@@ -39,11 +39,11 @@
                  v-dragging="{ item: item, list: itemList, group: 'item' }"
               >
                 <router-link class="thumbnail item-thumbnail"  :to="'/' +  (item.item_domain ? item.item_domain:item.item_id )" title="">
-                  <span class="item-setting " @click.prevent="click_item_setting(item.item_id)" :title="$t('item_setting')" >
+                  <span class="item-setting " @click.prevent="click_item_setting(item.item_id)" :title="$t('item_setting')" v-if="item.creator" >
                     <i class="el-icon-setting"></i>
                   </span>
-                  <span class="item-top " @click.prevent="click_item_top(item.item_id,item.top)" :title="item.top ? $t('cancel_item_top'):$t('item_top')" >
-                    <i :class="item_top_class(item.top)"></i>
+                  <span class="item-exit" @click.prevent="click_item_exit(item.item_id)" :title="$t('item_exit')" v-if="! item.creator">
+                    <i class="el-icon-close"></i>
                   </span>
                   <p class="my-item">{{item.item_name}}</p>
                 </router-link>
@@ -142,11 +142,11 @@
     display: none;
   }
 
-  .item-top{
+  .item-exit{
     float:right;
     margin-right:5px;
     margin-top:5px;
-   display: none;
+    display: none;
   }
 
   .thumbnails li a i{
@@ -155,6 +155,14 @@
     margin-left: 5px;
   }
 
+  .item-thumbnail:hover .item-setting {
+    display: block;
+  }
+  .item-thumbnail:hover .item-exit {
+    display: block;
+  }
+
+
 </style>
 
 <script>
@@ -182,7 +190,7 @@ export default {
               //that.$message.success("加载成功");
               var json = response.data.data ;
               that.itemList = json ;
-              that.bind_item_even();
+              //that.bind_item_even();
             }else{
               that.$alert(response.data.error_message);
             }
@@ -234,26 +242,25 @@ export default {
     click_item_setting(item_id){
        this.$router.push({path:'/item/setting/'+item_id});
     },
-    click_item_top(item_id ,old_top){
-      if (old_top) {
-        var action = 'cancel'; 
-      }else{
-        var action = 'top'; 
-      }
+    click_item_exit(item_id){
       var that = this ;
-      var url = DocConfig.server+'/api/item/top';
-      var params = new URLSearchParams();
-      params.append('action', action);
-      params.append('item_id', item_id);
-      that.axios.post(url, params)
-        .then(function (response) {
-          if (response.data.error_code === 0 ) {
-            that.get_item_list();
-          }else{
-            that.$alert(response.data.error_message);
-          }
-          
-        });
+      this.$confirm(that.$t('confirm_exit_item'), ' ', {
+        confirmButtonText: that.$t('confirm'),
+        cancelButtonText: that.$t('cancel'),
+        type: 'warning'
+      }).then(() => {
+        var url = DocConfig.server+'/api/item/exitItem';
+        var params = new URLSearchParams();
+        params.append('item_id', item_id);
+        that.axios.post(url, params)
+          .then(function (response) {
+            if (response.data.error_code === 0 ) {
+              window.location.reload();
+            }else{
+              that.$alert(response.data.error_message);
+            }
+          });
+      })
     },
     logout(){
         var that = this ;

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

@@ -274,5 +274,8 @@ exports.default = {
     "register_open":"Open registration",
     "long_page_tips":'The content of this page was detected to be more, and showdoc temporarily shut down the HTML real-time preview function to prevent the page from getting stuck due to too much content. You can find the preview button in the edit bar and open it manually.',
 
-    
+    "item_exit":"Exit item",
+    "confirm_exit_item":"Are you sure to exit this item?",
+
+       
 };

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

@@ -280,5 +280,7 @@ exports.default = {
     "register_open":"开放用户注册",
     "long_page_tips":"检测到本页面内容比较多,showdoc暂时关闭了html实时预览功能,以防止过多内容造成页面卡顿。你可以在编辑栏中找到预览按钮进行手动打开。",
 
-    
+
+    "item_exit":"退出项目",
+    "confirm_exit_item":"你确定要退出该项目吗?",   
 };

Vissa filer visades inte eftersom för många filer har ändrats