瀏覽代碼

调整分享为仅生效一次,增加user/list的按用户id筛选,调整/device/unshare添加按用户id筛选

zii 1 月之前
父節點
當前提交
6870846571
共有 2 個文件被更改,包括 19 次插入5 次删除
  1. 11 2
      src/api/device.rs
  2. 8 3
      src/api/user.rs

+ 11 - 2
src/api/device.rs

@@ -86,6 +86,8 @@ pub async fn d_edit(
 pub struct Dshare{ 
     token: String,
     id: u64,
+    #[serde(skip_serializing_if = "Option::is_none")]
+    ids: Option<Vec<i64>>,
     // ids: Vec<u64>,
 }
 
@@ -99,10 +101,17 @@ pub async fn d_cancel_share(
             return token_fail();
         }
     };
+    let mut params: SqliteParams = vec![];
     let mut sqls = Vec::new();
     let mut users = if let Ok(users) = state.db_lite.query_rows(
-            "select u.mqid from map_user_device m left join user u on m.uid=u.id where did in (select id from device where belongto=?) and did=?", 
-            (uid,d.id), |r|{r.get::<usize,String>(0)}).await{
+        format!(
+            "select u.mqid from map_user_device m left join user u on m.uid=u.id where {} did in (select id from device where belongto=?) and did=?",
+            if let Some(ref filter) = d.ids {
+                if filter.is_empty(){String::new()}
+                else{let mut uids=Vec::new();for i in filter{ uids.push("?");params.push(Box::new(*i));};format!( " u.id in ({})",uids.join(","))}
+            } else {String::new()}).as_str(), 
+            {params.push(Box::new(uid));params.push(Box::new(d.id));rusqlite::params_from_iter(params)}, 
+            |r|{r.get::<usize,String>(0)}).await{
                 sqls.push("?");
                 users
             }else{

+ 8 - 3
src/api/user.rs

@@ -213,15 +213,20 @@ pub async fn u_list(
         Ok(uid) => uid,
         Err(_) => return Json(DataBack { errcode: 2000, errmsg: Some("鉴权失败: token失效".to_string()), data: None })
     };
-    
+    // if (u.ids.as_ref()).is_none_or(|d|{d.is_empty()}){
+    //     return Json(DataBack { errcode: 2000, errmsg: Some("请选择用户".to_string()), data: None });
+    // }
     let (page,size) = if let Some(p)=u.page {(p.page,p.size)} else {(1,20)};
     let mut params: SqliteParams = vec![];
     
     match state.db_lite.query_rows(
-        format!("select u.id, u.uname, u.nickname, strftime('%s',  u.lastlogin)*1000, strftime('%s', u.createtime)*1000 from user u where isdelete=0{}{} limit ? offset ?",
+        format!("select u.id, u.uname, u.nickname, strftime('%s',  u.lastlogin)*1000, strftime('%s', u.createtime)*1000 from user u where isdelete=0{}{}{} limit ? offset ?",
         if let Some(ref filter) = u.nickname {params.push(Box::new(filter.clone())); " and u.nickname like ?"} else {""},
         if let Some(ref filter) = u.group {params.push(Box::new(filter.clone())); " and u.group like ?"} else {""},
-        // if let Some(ref filter) = u.ids {params.extend(filter.clone()); " and u.group like ?"} else {""}
+        if let Some(ref filter) = u.ids {
+            if filter.is_empty(){String::new()}
+            else{let mut uids=Vec::new();for i in filter{ uids.push("?");params.push(Box::new(*i));};format!( " and u.id in ({})",uids.join(","))}
+        } else {String::new()}
     ).as_str(),
      rusqlite::params_from_iter({params.push(Box::new(size));params.push(Box::new(size*(page-1)));params}) , |r| {
             Ok(Uedit{