ソースを参照

add(新增)
- 创建管理员账号完成

周文健 5 ヶ月 前
コミット
cb3135c359

+ 2 - 0
app/src/main/java/com/grkj/iscs/features/init/activity/InitActivity.kt

@@ -3,10 +3,12 @@ package com.grkj.iscs.features.init.activity
 import com.grkj.iscs.R
 import com.grkj.iscs.databinding.ActivityInitBinding
 import com.grkj.ui_base.base.BaseActivity
+import dagger.hilt.android.AndroidEntryPoint
 
 /**
  * 初始化
  */
+@AndroidEntryPoint
 class InitActivity: BaseActivity<ActivityInitBinding>() {
 
     override fun navHostFragmentId() = R.id.nav_host_fragment

+ 39 - 0
app/src/main/java/com/grkj/iscs/features/init/fragment/InitSetAdminAccountFragment.kt

@@ -5,6 +5,8 @@ import com.grkj.iscs.R
 import com.grkj.iscs.databinding.FragmentInitSetAdminAccountBinding
 import com.grkj.iscs.features.init.viewmodel.InitViewModel
 import com.grkj.ui_base.base.BaseFragment
+import com.kongzue.dialogx.dialogs.PopTip
+import com.sik.sikcore.extension.setDebouncedClickListener
 import dagger.hilt.android.AndroidEntryPoint
 
 /**
@@ -19,6 +21,43 @@ class InitSetAdminAccountFragment : BaseFragment<FragmentInitSetAdminAccountBind
     }
 
     override fun initView() {
+        binding.previousBtn.setDebouncedClickListener {
+            navController.popBackStack()
+        }
+        binding.nextBtn.setDebouncedClickListener {
+            if (checkData()) {
+                viewModel.insertAdminAccount(
+                    binding.adminUsernameEt.text.toString(),
+                    binding.passwordEt.text.toString()
+                ).observe(this) {
+                    navController.navigate(R.id.action_initSetAdminAccountFragment_to_initDeviceRegistrationKeyAndLockFragment)
+                }
+            }
+        }
+    }
+
+    private fun checkData(): Boolean {
+        if (binding.adminUsernameEt.text.toString().isEmpty()) {
+            PopTip.tip(R.string.please_input_admin_username)
+            return false
+        }
+        if (binding.passwordEt.text.toString().isEmpty()) {
+            PopTip.tip(com.grkj.ui_base.R.string.please_input_password)
+            return false
+        }
+        if (binding.repeatPasswordEt.text.toString().isEmpty()) {
+            PopTip.tip(R.string.please_input_repeat_password)
+            return false
+        }
+        if (binding.passwordEt.text.toString() != binding.repeatPasswordEt.text.toString()) {
+            PopTip.tip(R.string.password_and_repeat_password_not_same)
+            return false
+        }
+        return true
+    }
+
+    override fun onResume() {
+        super.onResume()
         viewModel.removeAdminUser().observe(this) { }
     }
 }

+ 8 - 0
app/src/main/java/com/grkj/iscs/features/init/viewmodel/InitViewModel.kt

@@ -2,6 +2,7 @@ package com.grkj.iscs.features.init.viewmodel
 
 import androidx.lifecycle.LiveData
 import androidx.lifecycle.liveData
+import com.grkj.data.model.vo.AddUserDataVo
 import com.grkj.data.repository.IUserRepository
 import com.grkj.ui_base.base.BaseViewModel
 import dagger.hilt.android.lifecycle.HiltViewModel
@@ -22,4 +23,11 @@ class InitViewModel @Inject constructor(val userRepository: IUserRepository) : B
             emit(true)
         }
     }
+
+    fun insertAdminAccount(username: String, password: String): LiveData<Boolean> {
+        return liveData(Dispatchers.IO){
+            userRepository.addAdminUser(username,password)
+            emit(true)
+        }
+    }
 }

+ 185 - 5
app/src/main/res/layout/fragment_init_set_admin_account.xml

@@ -1,13 +1,23 @@
 <?xml version="1.0" encoding="utf-8"?>
-<layout xmlns:android="http://schemas.android.com/apk/res/android">
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
 
-    <RelativeLayout
+    <androidx.constraintlayout.widget.ConstraintLayout
         android:layout_width="match_parent"
-        android:layout_height="match_parent">
+        android:layout_height="match_parent"
+        android:background="@drawable/bg_card_white_r8"
+        android:orientation="vertical">
+
         <LinearLayout
+            android:id="@+id/step_title_layout"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:orientation="horizontal">
+            android:layout_marginLeft="100dp"
+            android:layout_marginTop="100dp"
+            android:gravity="center_vertical"
+            android:orientation="horizontal"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent">
 
             <TextView
                 android:id="@+id/step_tv"
@@ -18,6 +28,176 @@
                 android:text="@string/init_set_admin_account_step"
                 android:textColor="@color/white"
                 android:textSize="@dimen/normal_text_size" />
+
+            <TextView
+                android:id="@+id/step_tip"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="@dimen/common_spacing"
+                android:text="@string/init_set_admin_account_step_tip"
+                android:textColor="@color/black"
+                android:textSize="@dimen/common_text_size_big" />
         </LinearLayout>
-    </RelativeLayout>
+
+        <TextView
+            android:id="@+id/step_hint"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="@dimen/common_spacing"
+            android:layout_marginTop="@dimen/common_spacing_2x"
+            android:text="@string/init_set_admin_account_step_hint"
+            android:textColor="@color/black"
+            android:textSize="@dimen/common_text_size"
+            app:layout_constraintStart_toStartOf="@+id/step_title_layout"
+            app:layout_constraintTop_toBottomOf="@+id/step_title_layout" />
+
+        <TextView
+            android:id="@+id/admin_username_tv"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="@dimen/common_spacing_2x"
+            android:text="@string/admin_username"
+            android:textColor="@color/black"
+            android:textSize="@dimen/common_text_size"
+            app:layout_constraintStart_toStartOf="@+id/step_hint"
+            app:layout_constraintTop_toBottomOf="@+id/step_hint" />
+
+        <EditText
+            android:id="@+id/admin_username_et"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="@dimen/common_spacing"
+            android:layout_marginRight="@dimen/common_spacing_7x"
+            android:background="@drawable/bg_common_input"
+            android:hint="@string/please_input_admin_username"
+            android:maxLines="1"
+            android:paddingHorizontal="@dimen/common_spacing_1_5x"
+            android:paddingVertical="2dp"
+            android:singleLine="true"
+            android:textColor="@color/black"
+            android:textSize="@dimen/common_text_size"
+            app:layout_constraintBottom_toBottomOf="@+id/admin_username_tv"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toEndOf="@+id/admin_username_tv"
+            app:layout_constraintTop_toTopOf="@+id/admin_username_tv" />
+
+        <TextView
+            android:id="@+id/password_tv"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="@dimen/common_spacing"
+            android:text="@string/set_password"
+            android:textColor="@color/black"
+            android:textSize="@dimen/common_text_size"
+            app:layout_constraintEnd_toEndOf="@+id/admin_username_tv"
+            app:layout_constraintTop_toBottomOf="@+id/admin_username_tv" />
+
+        <com.google.android.material.textfield.TextInputLayout
+            android:id="@+id/container_password"
+            android:layout_width="0dp"
+            android:layout_height="30dp"
+            android:layout_marginLeft="@dimen/common_spacing"
+            android:layout_marginRight="@dimen/common_spacing_7x"
+            app:boxBackgroundMode="none"
+            app:endIconMode="password_toggle"
+            app:hintEnabled="false"
+            app:layout_constraintBottom_toBottomOf="@+id/password_tv"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toEndOf="@+id/password_tv"
+            app:layout_constraintTop_toTopOf="@+id/password_tv">
+
+            <androidx.appcompat.widget.AppCompatEditText
+                android:id="@+id/password_et"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:background="@drawable/bg_common_input"
+                android:hint="@string/please_input_password"
+                android:inputType="textPassword"
+                android:maxLines="1"
+                android:minHeight="0dp"
+                android:paddingHorizontal="@dimen/common_spacing"
+                android:paddingVertical="2dp"
+                android:singleLine="true"
+                android:textColor="@color/black"
+                android:textSize="@dimen/common_text_size" />
+        </com.google.android.material.textfield.TextInputLayout>
+
+        <TextView
+            android:id="@+id/repeat_password_tv"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="@dimen/common_spacing"
+            android:text="@string/repeat_password"
+            android:textColor="@color/black"
+            android:textSize="@dimen/common_text_size"
+            app:layout_constraintEnd_toEndOf="@+id/password_tv"
+            app:layout_constraintTop_toBottomOf="@+id/password_tv" />
+
+        <com.google.android.material.textfield.TextInputLayout
+            android:id="@+id/container_repeat_password"
+            android:layout_width="0dp"
+            android:layout_height="30dp"
+            android:layout_marginLeft="@dimen/common_spacing"
+            android:layout_marginRight="@dimen/common_spacing_7x"
+            app:endIconMode="password_toggle"
+            app:hintEnabled="false"
+            app:layout_constraintBottom_toBottomOf="@+id/repeat_password_tv"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toEndOf="@+id/repeat_password_tv"
+            app:layout_constraintTop_toTopOf="@+id/repeat_password_tv">
+
+            <androidx.appcompat.widget.AppCompatEditText
+                android:id="@+id/repeat_password_et"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:background="@drawable/bg_common_input"
+                android:hint="@string/please_input_repeat_password"
+                android:inputType="textPassword"
+                android:maxLines="1"
+                android:minHeight="0dp"
+                android:paddingHorizontal="@dimen/common_spacing"
+                android:paddingVertical="2dp"
+                android:singleLine="true"
+                android:textColor="@color/black"
+                android:textSize="@dimen/common_text_size" />
+        </com.google.android.material.textfield.TextInputLayout>
+
+        <TextView
+            android:id="@+id/previous_btn"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_alignParentBottom="true"
+            android:layout_centerHorizontal="true"
+            android:layout_marginBottom="100dp"
+            android:background="@drawable/common_btn"
+            android:paddingHorizontal="@dimen/common_spacing_2x"
+            android:text="@string/previous"
+            android:textColor="@color/black"
+            android:textSize="@dimen/common_btn_text_size"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toStartOf="@+id/btn_space" />
+
+        <Space
+            android:id="@+id/btn_space"
+            android:layout_width="@dimen/common_spacing_2x"
+            android:layout_height="1dp"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent" />
+
+        <TextView
+            android:id="@+id/next_btn"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_alignParentBottom="true"
+            android:layout_centerHorizontal="true"
+            android:layout_marginBottom="100dp"
+            android:background="@drawable/common_btn"
+            android:paddingHorizontal="@dimen/common_spacing_2x"
+            android:text="@string/next"
+            android:textColor="@color/black"
+            android:textSize="@dimen/common_btn_text_size"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintStart_toEndOf="@+id/btn_space" />
+    </androidx.constraintlayout.widget.ConstraintLayout>
 </layout>

+ 11 - 0
app/src/main/res/values-en/strings.xml

@@ -198,4 +198,15 @@
     <string name="start">Start</string>
     <string name="start_tip">Initialize the system according to the prompts</string>
     <string name="init_set_admin_account_step">1</string>
+    <string name="init_set_admin_account_step_tip">Set up administrator account</string>
+    <string name="init_set_admin_account_step_hint">Please set the administrator account password</string>
+    <string name="admin_username">Admin account</string>
+    <string name="please_input_admin_username">Please input admin account</string>
+    <string name="set_password">Set password</string>
+    <string name="repeat_password">Repeat password</string>
+    <string name="please_input_repeat_password">Please input repeat password</string>
+    <string name="previous">Previous</string>
+    <string name="next">Next</string>
+    <string name="password_and_repeat_password_not_same">Password and repeat password not same</string>
+    <string name="role_key_already_exists">Role manage permission string already exists</string>
 </resources>

+ 11 - 0
app/src/main/res/values-zh/strings.xml

@@ -198,4 +198,15 @@
     <string name="start">开始</string>
     <string name="start_tip">根据提示对系统进⾏初始化</string>
     <string name="init_set_admin_account_step">1</string>
+    <string name="init_set_admin_account_step_tip">设置管理员账号</string>
+    <string name="init_set_admin_account_step_hint">请设置管理员账号密码</string>
+    <string name="admin_username">管理员账号</string>
+    <string name="please_input_admin_username">请输入管理员账号</string>
+    <string name="set_password">设置密码</string>
+    <string name="repeat_password">重复密码</string>
+    <string name="please_input_repeat_password">请输入重复密码</string>
+    <string name="previous">上一步</string>
+    <string name="next">下一步</string>
+    <string name="password_and_repeat_password_not_same">密码与重复密码不一致</string>
+    <string name="role_key_already_exists">该角色权限字符已存在</string>
 </resources>

+ 3 - 0
app/src/main/res/values/dimens.xml

@@ -43,4 +43,7 @@
     <dimen name="normal_margin_left">10dp</dimen>
     <dimen name="normal_layout_margin_top">20dp</dimen>
     <dimen name="common_margin_spacing_big">40dp</dimen>
+    <dimen name="common_spacing_4x">40dp</dimen>
+    <dimen name="common_spacing_7x">70dp</dimen>
+    <dimen name="common_spacing_1_5x">15dp</dimen>
 </resources>

+ 11 - 0
app/src/main/res/values/strings.xml

@@ -197,4 +197,15 @@
     <string name="start">开始</string>
     <string name="start_tip">根据提示对系统进⾏初始化</string>
     <string name="init_set_admin_account_step">1</string>
+    <string name="init_set_admin_account_step_tip">设置管理员账号</string>
+    <string name="init_set_admin_account_step_hint">请设置管理员账号密码</string>
+    <string name="admin_username">管理员账号</string>
+    <string name="please_input_admin_username">请输入管理员账号</string>
+    <string name="set_password">设置密码</string>
+    <string name="repeat_password">重复密码</string>
+    <string name="please_input_repeat_password">请输入重复密码</string>
+    <string name="previous">上一步</string>
+    <string name="next">下一步</string>
+    <string name="password_and_repeat_password_not_same">密码与重复密码不一致</string>
+    <string name="role_key_already_exists">该角色权限字符已存在</string>
 </resources>

+ 6 - 0
data/src/main/java/com/grkj/data/dao/RoleDao.kt

@@ -81,4 +81,10 @@ interface RoleDao {
      */
     @Query("select * from sys_role sr left join sys_user_role sur on sr.role_id = sur.role_id where sur.user_id = :userId")
     fun getRoleDataByUserId(userId: Long): List<SysRole>
+
+    /**
+     * 根据角色关键字获取角色id
+     */
+    @Query("select role_id from sys_role where role_key = :roleKey")
+    fun getRoleDataByRoleKey(roleKey: String): Long
 }

+ 5 - 0
data/src/main/java/com/grkj/data/repository/IUserRepository.kt

@@ -73,4 +73,9 @@ interface IUserRepository {
      * 移除管理员用户
      */
     fun removeAdminUser()
+
+    /**
+     * 添加管理员用户
+     */
+    fun addAdminUser(username: String, password: String)
 }

+ 19 - 4
data/src/main/java/com/grkj/data/repository/impl/UserRepository.kt

@@ -8,6 +8,7 @@ import com.grkj.data.data.MainDomainData
 import com.grkj.data.enums.RoleEnum
 import com.grkj.data.enums.RoleFunctionalPermissionsEnum
 import com.grkj.data.model.dos.SysUserDo
+import com.grkj.data.model.dos.SysUserRole
 import com.grkj.data.model.vo.AddUserDataVo
 import com.grkj.data.model.vo.UpdateUserDataVo
 import com.grkj.data.model.vo.UserManageVo
@@ -45,8 +46,10 @@ class UserRepository @Inject constructor(
             MainDomainData.userInfo = sysUserDo
             val roleDatas = roleDao.getRoleDataByUserId(sysUserDo.userId)
             MainDomainData.roleKeys = roleDatas.joinToString(",") { it.roleKey }
-            MainDomainData.permissions = if (sysUserDo.nickName=="罗成") RoleFunctionalPermissionsEnum.values().map { it.functionalPermission }.toMutableList() else
-                sysMenuDao.getPermissionsByRoleIds(roleDatas.map { it.roleId })
+            MainDomainData.permissions =
+                if (sysUserDo.nickName == "罗成") RoleFunctionalPermissionsEnum.values()
+                    .map { it.functionalPermission }.toMutableList() else
+                    sysMenuDao.getPermissionsByRoleIds(roleDatas.map { it.roleId })
             logger.info("用户信息:{}", MainDomainData.userInfo.toString())
             logger.info("用户角色:{}", MainDomainData.roleKeys)
             logger.info("用户权限:{}", MainDomainData.permissions)
@@ -176,7 +179,6 @@ class UserRepository @Inject constructor(
         val sysUserDo = SysUserDo()
         sysUserDo.userName = Pinyin4jUtil.toInitials(addUserDataVo.nickname)
         sysUserDo.nickName = addUserDataVo.nickname
-        sysUserDo.password = BCryptUtils.encryptPassword(sysUserDo.userName)
         sysUserDo.status = if (addUserDataVo.status) "0" else "2"
         sysUserDo.delFlag = "0"
         return userDao.insert(sysUserDo)
@@ -187,7 +189,6 @@ class UserRepository @Inject constructor(
         sysUserDo.userId = userDataVo.userId
         sysUserDo.userName = Pinyin4jUtil.toInitials(userDataVo.nickname)
         sysUserDo.nickName = userDataVo.nickname
-        sysUserDo.password = BCryptUtils.encryptPassword(sysUserDo.userName)
         sysUserDo.status = if (userDataVo.status) "0" else "2"
         sysUserDo.delFlag = "0"
         userDao.updateUserData(sysUserDo)
@@ -206,4 +207,18 @@ class UserRepository @Inject constructor(
         userDao.deleteUserByIds(adminUserIds)
         roleDao.deleteUserRoleByUserIds(adminUserIds)
     }
+
+    override fun addAdminUser(username: String, password: String) {
+        val sysUserDo = SysUserDo()
+        sysUserDo.userName = username
+        sysUserDo.nickName = "管理员"
+        sysUserDo.password = BCryptUtils.encryptPassword(password)
+        sysUserDo.status = "0"
+        val userId = userDao.insert(sysUserDo)
+        val roleId = roleDao.getRoleDataByRoleKey(RoleEnum.ADMIN.roleKey)
+        val userRole = SysUserRole()
+        userRole.userId = userId
+        userRole.roleId = roleId
+        roleDao.insertUserRole(listOf(userRole))
+    }
 }