Эх сурвалжийг харах

学院的CRD完成,等待接口对接

bfzgs 2 жил өмнө
parent
commit
9ca17863fb

+ 114 - 7
app/src/main/java/org/brynhild/graduation/activity/admin/AdminMainPageActivity.kt

@@ -19,8 +19,6 @@ import androidx.recyclerview.widget.GridLayoutManager
 import com.bumptech.glide.Glide
 import com.example.devicemanager.view.ConfirmPopupWindow
 import com.google.gson.Gson
-import com.goyourfly.multiple.adapter.MultipleSelect
-import com.goyourfly.multiple.adapter.StateChangeListener
 import org.brynhild.graduation.R
 import org.brynhild.graduation.activity.common.AccountInfoActivity
 import org.brynhild.graduation.activity.common.BaseActivity
@@ -33,16 +31,16 @@ import org.brynhild.graduation.common.constant.FileStorageConstant
 import org.brynhild.graduation.common.transfer.Result
 import org.brynhild.graduation.common.transfer.handler.ResponseHandler
 import org.brynhild.graduation.common.transfer.utils.ServiceCreator
-import org.brynhild.graduation.common.transfer.vo.AdminAddUser
-import org.brynhild.graduation.common.transfer.vo.AdminDeleteUser
-import org.brynhild.graduation.common.transfer.vo.QueryAcademyRequest
-import org.brynhild.graduation.common.transfer.vo.QueryUserRequest
+import org.brynhild.graduation.common.transfer.vo.*
 import org.brynhild.graduation.common.utils.JsonUtils
 import org.brynhild.graduation.common.utils.MultipleSelectHandler
 import org.brynhild.graduation.databinding.ActivityMainPageBinding
+import org.brynhild.graduation.databinding.AdminCreateAcademyDialogBinding
 import org.brynhild.graduation.databinding.AdminCreateUserDialogBinding
 import org.brynhild.graduation.databinding.NavHeaderBinding
+import org.brynhild.graduation.network.adapter.AcademyAdapter
 import org.brynhild.graduation.network.adapter.UserAdapter
+import org.brynhild.graduation.network.entiity.Academy
 import org.brynhild.graduation.network.entiity.User
 import org.brynhild.graduation.service.http.AccountService
 import org.brynhild.graduation.service.http.AdminService
@@ -57,6 +55,8 @@ class AdminMainPageActivity : BaseActivity() {
     private var currentPage = 0
     private val loadUserList=0
     private val refreshUserList=1
+    private val loadAcademyList=2
+    private val refreshAcademyList=3;
 
     private var lastBack = 0L
     private lateinit var activityMainPageBinding: ActivityMainPageBinding
@@ -88,6 +88,15 @@ class AdminMainPageActivity : BaseActivity() {
                     Toast.makeText(this, "数据更新完成", Toast.LENGTH_SHORT).show()
                 }
             }
+            loadAcademyList->{
+                switchToAcademy{}
+            }
+            refreshAcademyList->{
+                switchToAcademy{
+                    activityMainPageBinding.swipeRefresh.isRefreshing=false
+                    Toast.makeText(this, "数据更新完成", Toast.LENGTH_SHORT).show()
+                }
+            }
         }
         false
     }
@@ -190,6 +199,67 @@ class AdminMainPageActivity : BaseActivity() {
                         "AddDeviceActivity",
                         "flag is ${result.flag},message is ${result.message},data is ${result.data}"
                     )
+                    val academyArrayList=ArrayList<Academy>()
+                    val gson=Gson()
+                    for(item in result.data as ArrayList<*>){
+                        val json=gson.toJson(item)
+                        val academy=JsonUtils.fromJson<Academy>(json)
+                        if(academy!=null){
+                            academyArrayList.add(academy)
+                        }
+                    }
+                    val adapter=AcademyAdapter(this@AdminMainPageActivity,academyArrayList)
+
+                    activityMainPageBinding.recyclerView.adapter=MultipleSelectHandler.createHandler(this@AdminMainPageActivity,adapter,object :RecyclerViewCallback{
+                        override fun execute(selected: List<Int>) {
+                            val builder=StringBuilder()
+                            println(selected)
+                            var first=true
+
+                            val rmList=ArrayList<Long>()
+                            for (index in selected){
+                                rmList.add(academyArrayList[index].id)
+                                if(!first){
+                                    builder.append("、")
+                                }else{
+                                    first=false
+                                }
+                                builder.append(academyArrayList[index].name)
+                            }
+                            ConfirmPopupWindow.ConfirmPopupWindowBuilder.init(this@AdminMainPageActivity)
+                                .setContent("以下学院将被删除:${builder}")
+                                .setCancelText("取消删除")
+                                .setEnsureText("确定删除")
+                                .setEnsureListener {
+
+                                    val service=ServiceCreator.create(AdminService::class.java)
+                                    val rmData=AdminDeleteAcademy(rmList)
+                                    println("send data with:${Gson().toJson(rmData)}")
+                                    service.deleteAcademy(LoginConfiguration.userInfo!!.token,rmData).enqueue(object:Callback<Result>{
+                                        override fun onResponse(
+                                            call: Call<Result>,
+                                            response: Response<Result>
+                                        ) {
+                                            ResponseHandler.handle(response,{
+                                                handler.sendEmptyMessage(refreshAcademyList)
+                                            },{
+                                                ResponseHandler.showMessage(it)
+                                            })
+                                        }
+
+                                        override fun onFailure(call: Call<Result>, t: Throwable) {
+                                            t.printStackTrace()
+                                        }
+                                    })
+
+                                }
+                                .build()
+                                .show()
+                        }
+                    })
+                    supportActionBar?.let { bar->
+                        bar.title="AcademyList"
+                    }
                     callback.execute()
                 }, {
                     ResponseHandler.showMessage(it)
@@ -328,7 +398,7 @@ class AdminMainPageActivity : BaseActivity() {
                 val dialogLayout=AdminCreateUserDialogBinding.inflate(LayoutInflater.from(this))
 
                 AlertDialog.Builder(this)
-                    .setTitle("添加用户")
+                    .setTitle("添加学院")
                     .setView(dialogLayout.root)
                     .setPositiveButton("确认添加"){_,_->
                         val service=ServiceCreator.create(AdminService::class.java)
@@ -362,6 +432,43 @@ class AdminMainPageActivity : BaseActivity() {
                     }
                     .show()
             }
+
+            R.id.admin_academy_add->{
+                val dialogLayout=AdminCreateAcademyDialogBinding.inflate(LayoutInflater.from(this))
+
+                AlertDialog.Builder(this)
+                    .setTitle("添加学院")
+                    .setView(dialogLayout.root)
+                    .setPositiveButton("确认添加"){_,_->
+                        val service=ServiceCreator.create(AdminService::class.java)
+                        val data=AdminAddAcademy(
+                            dialogLayout.no.text.toString(),
+                            dialogLayout.name.text.toString(),
+                            dialogLayout.liable.text.toString().toLongOrNull()
+                        )
+                        service.addAcademy(LoginConfiguration.userInfo!!.token,data).enqueue(object :Callback<Result>{
+                            override fun onResponse(
+                                call: Call<Result>,
+                                response: Response<Result>
+                            ) {
+                                ResponseHandler.handle(response,{
+                                    handler.sendEmptyMessage(refreshAcademyList)
+                                },{
+                                    ResponseHandler.showMessage(it)
+                                })
+                            }
+
+                            override fun onFailure(call: Call<Result>, t: Throwable) {
+                                t.printStackTrace()
+                            }
+                        })
+                    }
+                    .setNegativeButton("取消添加"){_,_->
+
+                    }
+                    .show()
+            }
+
             R.id.delete -> Toast.makeText(this, "You clicked Delete", Toast.LENGTH_SHORT).show()
             R.id.settings -> Toast.makeText(this, "You clicked Settings", Toast.LENGTH_SHORT).show()
         }

+ 3 - 0
app/src/main/java/org/brynhild/graduation/common/transfer/vo/AdminAddAcademy.kt

@@ -0,0 +1,3 @@
+package org.brynhild.graduation.common.transfer.vo
+
+data class AdminAddAcademy(val no:String,val name:String,val liable:Long?)

+ 4 - 0
app/src/main/java/org/brynhild/graduation/common/transfer/vo/AdminDeleteAcademy.kt

@@ -0,0 +1,4 @@
+package org.brynhild.graduation.common.transfer.vo
+
+data class AdminDeleteAcademy(val id:List<Long>) {
+}

+ 50 - 0
app/src/main/java/org/brynhild/graduation/network/adapter/AcademyAdapter.kt

@@ -0,0 +1,50 @@
+package org.brynhild.graduation.network.adapter
+
+import android.content.Context
+import android.content.Intent
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.bumptech.glide.Glide
+import com.google.gson.Gson
+import org.brynhild.graduation.R
+import org.brynhild.graduation.activity.admin.UserDetailInfoActivity
+import org.brynhild.graduation.common.config.MyApplication
+import org.brynhild.graduation.network.entiity.Academy
+
+class AcademyAdapter(private val context: Context, private val academyList: List<Academy>) :
+    RecyclerView.Adapter<AcademyAdapter.ViewHolder>() {
+
+    inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+        val avatar:ImageView=view.findViewById(R.id.avatar)
+        val name:TextView=view.findViewById(R.id.name)
+        val no:TextView=view.findViewById(R.id.no)
+    }
+
+    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+        val view=LayoutInflater.from(context).inflate(R.layout.academy_item,parent,false)
+        val holder=ViewHolder(view)
+        holder.itemView.setOnClickListener{
+            val position = holder.adapterPosition
+            val academy = academyList[position]
+//            val intent = Intent(MyApplication.context, UserDetailInfoActivity::class.java)
+//            intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
+//            val gson = Gson()
+//            intent.putExtra("user", gson.toJson(academy))
+//            MyApplication.context.startActivity(intent)
+        }
+        return holder
+    }
+
+    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+        val user=academyList[position]
+        holder.name.text=user.name
+        holder.no.text=user.no
+        Glide.with(context).load(user.avatar?:R.drawable.nav_user).into(holder.avatar)
+    }
+
+    override fun getItemCount() = academyList.size
+}

+ 54 - 0
app/src/main/java/org/brynhild/graduation/network/entiity/Academy.java

@@ -0,0 +1,54 @@
+package org.brynhild.graduation.network.entiity;
+
+import org.brynhild.graduation.common.entity.BaseEntity;
+
+import java.io.Serializable;
+
+public class Academy extends BaseEntity implements Serializable {
+    private String name;
+    private Long liable;
+    private String avatar;
+    private String no;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Long getLiable() {
+        return liable;
+    }
+
+    public void setLiable(Long liable) {
+        this.liable = liable;
+    }
+
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
+
+    public String getNo() {
+        return no;
+    }
+
+    public void setNo(String no) {
+        this.no = no;
+    }
+
+    @Override
+    public String toString() {
+        return "Academy{" +
+                "name='" + name + '\'' +
+                ", liable=" + liable +
+                ", avatar='" + avatar + '\'' +
+                ", no='" + no + '\'' +
+                '}';
+    }
+}

+ 8 - 0
app/src/main/java/org/brynhild/graduation/service/http/AdminService.kt

@@ -25,9 +25,17 @@ interface AdminService {
     @PUT("user/admin/user")
     fun modifyUser(@Header(AccountConstant.ACCOUNT_HEADER)token: String,@Body info:AdminModifyUser):Call<Result>
 
+
+
     @POST("user/admin/academy")
     fun queryAcademy(@Header(AccountConstant.ACCOUNT_HEADER)token:String,@Body info:QueryAcademyRequest):Call<Result>
 
+    @HTTP(method = "DELETE",path="user/admin/academy",hasBody = true)
+    fun deleteAcademy(@Header(AccountConstant.ACCOUNT_HEADER)token:String,@Body info:AdminDeleteAcademy):Call<Result>
+
+    @POST("user/admin/academy/add")
+    fun addAcademy(@Header(AccountConstant.ACCOUNT_HEADER)token:String,@Body info:AdminAddAcademy):Call<Result>
+
 
 
 }

+ 32 - 0
app/src/main/res/layout/academy_item.xml

@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<com.google.android.material.card.MaterialCardView xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:layout_margin="5dp"
+    app:cardCornerRadius="4dp">
+
+    <LinearLayout
+        android:orientation="vertical"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content">
+
+        <ImageView
+            android:id="@+id/avatar"
+            android:layout_width="match_parent"
+            android:layout_height="120dp"
+            android:scaleType="centerCrop" />
+
+        <TextView
+            android:id="@+id/name"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content" />
+        <TextView
+            android:id="@+id/no"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content" />
+
+    </LinearLayout>
+
+
+</com.google.android.material.card.MaterialCardView>

+ 68 - 0
app/src/main/res/layout/admin_create_academy_dialog.xml

@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical"
+    android:id="@+id/layout_category_add">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:orientation="horizontal"
+        android:layout_height="wrap_content">
+
+        <TextView
+            android:layout_width="0dp"
+            android:layout_weight="1"
+            android:layout_height="wrap_content"
+            android:text="学院编号"
+            android:textAlignment="center" />
+
+        <EditText
+            android:id="@+id/no"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="3" />
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:orientation="horizontal"
+        android:layout_height="wrap_content">
+
+        <TextView
+            android:layout_width="0dp"
+            android:layout_weight="1"
+            android:layout_height="wrap_content"
+            android:text="学院名称"
+            android:textAlignment="center" />
+
+        <EditText
+            android:id="@+id/name"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="3" />
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:orientation="horizontal"
+        android:layout_height="wrap_content">
+
+        <TextView
+            android:layout_width="0dp"
+            android:layout_weight="1"
+            android:layout_height="wrap_content"
+            android:text="负责人"
+            android:textAlignment="center" />
+
+        <EditText
+            android:id="@+id/liable"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="3" />
+    </LinearLayout>
+
+
+
+
+</LinearLayout>

+ 0 - 10
app/src/main/res/menu/admin_academy_nav_bar.xml

@@ -6,14 +6,4 @@
         android:icon="@drawable/ic_add"
         android:title="Backup"
         app:showAsAction="always" />
-    <item
-        android:id="@+id/delete"
-        android:icon="@drawable/ic_delete"
-        android:title="Delete"
-        app:showAsAction="never" />
-    <item
-        android:id="@+id/settings"
-        android:icon="@drawable/ic_settings"
-        android:title="Settings"
-        app:showAsAction="never" />
 </menu>

+ 0 - 10
app/src/main/res/menu/admin_user_nav_bar.xml

@@ -6,14 +6,4 @@
         android:icon="@drawable/ic_add"
         android:title="添加用户"
         app:showAsAction="always" />
-    <item
-        android:id="@+id/delete"
-        android:icon="@drawable/ic_delete"
-        android:title="NULL"
-        app:showAsAction="never" />
-    <item
-        android:id="@+id/settings"
-        android:icon="@drawable/ic_settings"
-        android:title="Settings"
-        app:showAsAction="never" />
 </menu>