diff --git a/.idea/misc.xml b/.idea/misc.xml
index 1dc7814..cae34ec 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -23,15 +23,20 @@
+
+
+
+
+
diff --git a/app/build.gradle b/app/build.gradle
index 0c58add..cd6adfd 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -19,8 +19,8 @@ android {
// minSdkVersion 26
minSdkVersion 21
targetSdkVersion 25
- versionCode 11
- versionName "2.0.9"
+ versionCode 14
+ versionName "2.1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
// ndk {
@@ -192,4 +192,6 @@ dependencies {
implementation 'com.github.HuanTanSheng:EasyPhotos:3.1.5'
implementation("org.greenrobot:eventbus:3.3.1")
+
+ implementation 'com.github.chrisbanes:PhotoView:2.0.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 47a0d3e..763e0c8 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -70,7 +70,7 @@
+ android:process=":dexopt"/>
(), NetworkUtils.OnNetworkStatus
val tabData = arrayListOf()
tabData.add(TabEntity("学生请假", R.mipmap.leave_select, R.mipmap.leave_unselect))
tabData.add(TabEntity("学籍异动", R.mipmap.change_select, R.mipmap.change_unselect))
+ tabData.add(TabEntity("访客管理", R.mipmap.visitor_select, R.mipmap.visitor_unselect))
tabData.add(TabEntity("我的", R.mipmap.my_select, R.mipmap.my_unselect))
tabLayout.setTabData(tabData)
viewPager2.adapter = HomePagerAdapter(this)
- viewPager2.offscreenPageLimit = 2
+ viewPager2.offscreenPageLimit = 3
viewPager2.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
super.onPageSelected(position)
@@ -219,6 +219,46 @@ class MainActivity : BaseActivity(), NetworkUtils.OnNetworkStatus
dialogList.add(dialog)
}
+ //接收访客消息
+ @Subscribe(threadMode = ThreadMode.MAIN)
+ fun onMessageEvent(detail: Visitor) {
+ removeOld(detail.id,2)
+ val dialog = VisitorDialog(this)
+ dialog.layoutParams = ViewGroup.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.MATCH_PARENT
+ )
+ dialog.setData(detail)
+ dialog.setTag(R.id.tag_dialog_name,detail.id)
+ dialog.setTag(R.id.tag_dialog_type,2)
+ dialog.onCloseClick = {
+ dialogLayout.removeView(it)
+ dialogList.remove(it)
+ }
+ dialogLayout.addView(dialog,0) //请假权限更高,访客插入到最底层
+ dialogList.add(dialog)
+ }
+
+ //接收访客消息
+ @Subscribe(threadMode = ThreadMode.MAIN)
+ fun onMessageEvent(detail: ViewImage) {
+ removeOld(detail.id,3)
+ val dialog = ViewImageDialog(this)
+ dialog.layoutParams = ViewGroup.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.MATCH_PARENT
+ )
+ dialog.setData(detail)
+ dialog.setTag(R.id.tag_dialog_name,detail.id)
+ dialog.setTag(R.id.tag_dialog_type,3)
+ dialog.onCloseClick = {
+ dialogLayout.removeView(it)
+ dialogList.remove(it)
+ }
+ dialogLayout.addView(dialog)
+ dialogList.add(dialog)
+ }
+
private fun removeOld(id:Int, type:Int){
val view = dialogList.find {
val tagId: Int = it.getTag(R.id.tag_dialog_name) as Int
@@ -458,7 +498,7 @@ class MainActivity : BaseActivity(), NetworkUtils.OnNetworkStatus
}
class HomePagerAdapter(act: AppCompatActivity) : FragmentStateAdapter(act) {
- override fun getItemCount(): Int = 3
+ override fun getItemCount(): Int = 4
override fun createFragment(position: Int): Fragment {
when (position) {
@@ -469,6 +509,9 @@ class HomePagerAdapter(act: AppCompatActivity) : FragmentStateAdapter(act) {
return ChangeFragment.getNewInstance()
}
2 -> {
+ return VisitorFragment.getNewInstance()
+ }
+ 3 -> {
return MyFragment.getNewInstance()
}
}
diff --git a/app/src/main/java/com/yzx/escreen/adapter/VisitorDialogStepAdapter.kt b/app/src/main/java/com/yzx/escreen/adapter/VisitorDialogStepAdapter.kt
new file mode 100644
index 0000000..ad8dba5
--- /dev/null
+++ b/app/src/main/java/com/yzx/escreen/adapter/VisitorDialogStepAdapter.kt
@@ -0,0 +1,49 @@
+package com.yzx.escreen.adapter
+
+import android.annotation.SuppressLint
+import android.graphics.Color
+import android.view.View
+import com.chad.library.adapter.base.BaseQuickAdapter
+import com.chad.library.adapter.base.viewholder.BaseViewHolder
+import com.yzx.escreen.R
+import com.yzx.escreen.model.AuditRecordOut
+import com.yzx.escreen.utils.toTime
+import kotlinx.android.synthetic.main.layout_visitor_step.view.*
+import org.jetbrains.anko.dip
+import org.jetbrains.anko.textColor
+
+class VisitorDialogStepAdapter(list: MutableList) :
+ BaseQuickAdapter(R.layout.layout_visitor_step, list) {
+
+ @SuppressLint("SetTextI18n")
+ override fun convert(holder: BaseViewHolder, item: AuditRecordOut) {
+
+ holder.itemView.visibility = View.VISIBLE
+ holder.itemView.addUserName.text = item.getTitle()
+ holder.itemView.approvalComments.visibility = if(item.audit_user_name.isNotEmpty()){
+ holder.itemView.approvalComments.text = "审批人:${item.audit_user_name}。${item.audit_remark}"
+ holder.itemView.approvalComments.textColor = when (item.audit_status) {
+ 0 -> Color.parseColor("#ff4040")
+ 1 -> Color.parseColor("#3c7ef6")
+ 2 -> Color.parseColor("#ff4040")
+ -1 -> Color.parseColor("#999999")
+ else -> Color.parseColor("#333333")
+ }
+ View.VISIBLE
+ }else{
+ View.GONE
+ }
+ holder.itemView.approvalTime.text = item.add_time.toTime()
+ if (holder.adapterPosition == 0) {
+ holder.itemView.line1.setBackgroundResource(R.color.transparent)
+ } else {
+ holder.itemView.line1.setBackgroundResource(R.color.gray_1)
+ }
+
+ if (holder.adapterPosition == data.size - 1) {
+ holder.itemView.contentLayout.setPadding(0, 0, 0, 0)
+ } else {
+ holder.itemView.contentLayout.setPadding(0, 0, 0, holder.itemView.contentLayout.dip(20))
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/yzx/escreen/adapter/VisitorListAdapter.kt b/app/src/main/java/com/yzx/escreen/adapter/VisitorListAdapter.kt
new file mode 100644
index 0000000..547a47c
--- /dev/null
+++ b/app/src/main/java/com/yzx/escreen/adapter/VisitorListAdapter.kt
@@ -0,0 +1,78 @@
+package com.yzx.escreen.adapter
+
+import android.annotation.SuppressLint
+import android.graphics.Color
+import android.view.View
+import com.chad.library.adapter.base.BaseQuickAdapter
+import com.chad.library.adapter.base.viewholder.BaseViewHolder
+import com.yzx.escreen.R
+import com.yzx.escreen.model.Visitor
+import com.yzx.escreen.utils.setSrc
+import com.yzx.escreen.utils.toTime
+import kotlinx.android.synthetic.main.layout_visitor_table.view.*
+import org.jetbrains.anko.textColor
+
+class VisitorListAdapter(list: MutableList) :
+ BaseQuickAdapter(R.layout.layout_visitor_table, list) {
+
+ init {
+ addChildClickViewIds(R.id.cancelBtn)
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun convert(holder: BaseViewHolder, item: Visitor) {
+ holder.itemView.userName.text = item.user_name
+ if (item.face_key.isNullOrBlank()) {
+ holder.itemView.faceEmpty.visibility = View.VISIBLE
+ holder.itemView.faceImg.visibility = View.GONE
+ } else {
+ holder.itemView.faceImg.visibility = View.VISIBLE
+ holder.itemView.faceEmpty.visibility = View.GONE
+ holder.itemView.faceImg.setSrc(item.face_identity, item.face_key)
+ }
+ if (item.health_code_key.isNullOrBlank()) {
+ holder.itemView.healthCodeEmpty.visibility = View.VISIBLE
+ holder.itemView.healthCodeImg.visibility = View.GONE
+ } else {
+ holder.itemView.healthCodeImg.visibility = View.VISIBLE
+ holder.itemView.healthCodeEmpty.visibility = View.GONE
+ holder.itemView.healthCodeImg.setSrc(item.health_code_identity, item.health_code_key)
+ }
+ if (item.trip_code_key.isNullOrBlank()) {
+ holder.itemView.tripCodeEmpty.visibility = View.VISIBLE
+ holder.itemView.tripCodeImg.visibility = View.GONE
+ } else {
+ holder.itemView.tripCodeImg.visibility = View.VISIBLE
+ holder.itemView.tripCodeEmpty.visibility = View.GONE
+ holder.itemView.tripCodeImg.setSrc(item.trip_code_identity, item.trip_code_key)
+ }
+ holder.itemView.isDrive.text = if (item.is_drive == 1) {
+ "是"
+ } else {
+ "否"
+ }
+ holder.itemView.receptionUser.text = item.reception_user
+ holder.itemView.statusName.text = when (item.audit_status) {
+ 0 -> "待审核"
+ 1 -> "可通行"
+ 2 -> "审核拒绝"
+ -1 -> "已失效"
+ else -> "--"
+ }
+ holder.itemView.statusName.textColor = when (item.audit_status) {
+ 0 -> Color.parseColor("#333333")
+ 1 -> Color.parseColor("#3c7ef6")
+ 2 -> Color.parseColor("#ff4040")
+ -1 -> Color.parseColor("#999999")
+ else -> Color.parseColor("#333333")
+ }
+
+ holder.itemView.applyTime.text = item.add_time.toTime()
+
+ holder.itemView.bottomLine.visibility = if (holder.adapterPosition == data.size - 1) {
+ View.GONE
+ } else {
+ View.VISIBLE
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/yzx/escreen/config/YzxInterface.kt b/app/src/main/java/com/yzx/escreen/config/YzxInterface.kt
index c92f3e3..9f0f12c 100644
--- a/app/src/main/java/com/yzx/escreen/config/YzxInterface.kt
+++ b/app/src/main/java/com/yzx/escreen/config/YzxInterface.kt
@@ -20,4 +20,9 @@ object YzxInterface {
const val INTERFACE_STUDENT_GET_CHANGE_LIST= "/edu/attendance/teacher/listStudentStatusChange"//学籍异动列表
const val INTERFACE_STUDENT_GET_CHANGE_DETAIL= "/edu/attendance/getStudentStatusChangeDetail"//学籍异动详情
+ /**
+ * 访客管理
+ */
+ const val INTERFACE_ACCESS_CONTROL_GET_FACE_LIST= "/parent/entranceGuard/getEntranceGuardFaceList" // 获取访客人脸信息列表
+ const val INTERFACE_ACCESS_CONTROL_GET_FACE_INFO_DETAIL= "/parent/entranceGuard/getEntranceGuardFaceById" // 访客信息
}
diff --git a/app/src/main/java/com/yzx/escreen/fragment/ChangeFragment.kt b/app/src/main/java/com/yzx/escreen/fragment/ChangeFragment.kt
index 1c439ef..dc0bc7e 100644
--- a/app/src/main/java/com/yzx/escreen/fragment/ChangeFragment.kt
+++ b/app/src/main/java/com/yzx/escreen/fragment/ChangeFragment.kt
@@ -9,32 +9,24 @@ import android.text.Editable
import android.text.TextWatcher
import android.view.KeyEvent
import android.view.View
-import android.widget.ImageView
-import android.widget.TextView
import androidx.recyclerview.widget.LinearLayoutManager
-import androidx.recyclerview.widget.RecyclerView
import com.blankj.utilcode.util.*
import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
import com.yzx.escreen.R
-import com.yzx.escreen.adapter.ChangeDialogStepAdapter
import com.yzx.escreen.adapter.ChangeListAdapter
import com.yzx.escreen.fragment.base.BaseFragment
import com.yzx.escreen.model.*
import com.yzx.escreen.presenter.ChangePresenter
import com.yzx.escreen.presenter.ChangeView
import com.yzx.escreen.utils.FileUploadCallBack
-import com.yzx.escreen.utils.hideNavigationBar
-import com.yzx.escreen.utils.setSrc
-import com.yzx.escreen.utils.toDay
import com.yzx.escreen.widget.BaseDialog
import kotlinx.android.synthetic.main.fragment_change.*
import kotlinx.android.synthetic.main.layout_loading.view.*
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
-import org.jetbrains.anko.find
-import org.jetbrains.anko.support.v4.act
import org.jetbrains.anko.support.v4.ctx
+import org.jetbrains.anko.support.v4.toast
import org.jetbrains.anko.textColor
@@ -63,6 +55,7 @@ class ChangeFragment : BaseFragment(), ChangeView,
private var isLoading = false
private val mShowList = mutableListOf()
private val mShowDialogList = mutableListOf()
+ private var isRefresh = false
private val refreshRun = Runnable {
refreshData()
@@ -155,6 +148,10 @@ class ChangeFragment : BaseFragment(), ChangeView,
filterLayout.setOnClickListener {
KeyboardUtils.hideSoftInput(keywordInput)
}
+ btnRefresh.setOnClickListener {
+ isRefresh = true
+ initData()
+ }
}
@@ -169,91 +166,6 @@ class ChangeFragment : BaseFragment(), ChangeView,
@SuppressLint("SetTextI18n")
private fun showLeaveDialog(detail: StuChange) {
EventBus.getDefault().post(detail)
- return
- val adapter = ChangeDialogStepAdapter(mutableListOf())
- val dialog = BaseDialog(act, R.style.BaseDialog, R.layout.dialog_change)
- //处理弹窗显示
- dialog.find(R.id.leave_student_name).text = detail.status_change_student_name
- if (detail.face_key.isNotEmpty()) {
- val img = dialog.find(R.id.face_img)
- img.setSrc(detail.face_identity, detail.face_key)
- img.visibility = View.VISIBLE
- dialog.find(R.id.face_empty).visibility = View.GONE
- } else {
- dialog.find(R.id.face_empty).visibility = View.VISIBLE
- dialog.find(R.id.face_img).visibility = View.GONE
- }
- dialog.find(R.id.class_name).text = "${detail.grade_name}${detail.class_name}"
- dialog.find(R.id.leave_request_type_name).text = detail.status_change_type_name
- dialog.find(R.id.statusName).text = when (detail.status) {
- 1 -> "待处理"
- 2 -> "已确认"
- 3 -> "已拒绝"
- else -> "--"
- }
- dialog.find(R.id.statusName).textColor = when (detail.status) {
- 1 -> Color.parseColor("#333333")
- 2 -> Color.parseColor("#3c7ef6")
- 3 -> Color.parseColor("#ff4040")
- else -> Color.parseColor("#333333")
- }
- if (detail.getSubStatusName().isNotEmpty()) {
- dialog.find(R.id.subStatusName).text = "(${detail.getSubStatusName()})"
- dialog.find(R.id.subStatusName).textColor = when (detail.sub_status) {
- 0, 2 -> Color.parseColor("#ff4040")
- 1, 3 -> Color.parseColor("#07c160")
- else -> Color.parseColor("#333333")
- }
- } else {
- dialog.find(R.id.subStatusName).text = ""
- }
- var time = "--"
- if (detail.start_time > 0) {
- time = detail.start_time.toDay()
- }
- if (detail.end_time > 0) {
- time = "$time -- ${detail.end_time.toDay()}"
- }
- dialog.find(R.id.add_time).text = time
- if (detail.status_change_reason.isNotEmpty()) {
- dialog.find(R.id.remarkLayout).visibility = View.VISIBLE
- dialog.find(R.id.leave_request_reason).text = detail.status_change_reason
- } else {
- dialog.find(R.id.remarkLayout).visibility = View.GONE
- }
- dialog.find(R.id.statusImg).setSrc(detail.getStatusImg())
-
- dialog.find(R.id.stepRecycler)
- val recyclerView = dialog.find(R.id.stepRecycler)
- recyclerView.layoutManager =
- LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
- recyclerView.adapter = adapter
- adapter.setList(detail.getStep())
-
- dialog.find(R.id.closeBtn).setOnClickListener {
- dialog.hide()
- val index = mShowList.indexOfFirst { it.id == detail.id }
- if (index >= 0) {
- mShowList.removeAt(index)
- }
- val dialogIndex = mShowDialogList.indexOfFirst { it.getLeaveId() == detail.id }
- if (index >= 0) {
- mShowDialogList.removeAt(dialogIndex)
- }
- val showItem = mShowDialogList.find { !it.showed }
- showItem?.apply {
- show()
- }
-
- }
- val showList = mShowDialogList.filter { it.showed }
- if (showList.isEmpty()) {
- dialog.show()
- dialog.showed = true
- }
- dialog.hideNavigationBar()
- dialog.setLeaveId(detail.id)
- mShowDialogList.add(dialog)
}
private fun changeStatusBtn(idx: Int) {
@@ -361,6 +273,10 @@ class ChangeFragment : BaseFragment(), ChangeView,
@SuppressLint("SetTextI18n")
override fun onListSuccess(list: MutableList, pager: Pager) {
pageTv?.apply {
+ if(isRefresh){
+ toast("刷新成功!")
+ isRefresh = false
+ }
mAdapter.setList(list)
mPager = pager
pageTv.text = "${pager.page_no} / ${pager.total_pages}"
@@ -401,6 +317,10 @@ class ChangeFragment : BaseFragment(), ChangeView,
override fun onListError(error: String) {
isLoading = false
+ if(isRefresh){
+ toast("刷新失败,请重试!")
+ isRefresh = false
+ }
showEmpty(3)
}
diff --git a/app/src/main/java/com/yzx/escreen/fragment/HomeFragment.kt b/app/src/main/java/com/yzx/escreen/fragment/HomeFragment.kt
index 9003052..6da58f7 100644
--- a/app/src/main/java/com/yzx/escreen/fragment/HomeFragment.kt
+++ b/app/src/main/java/com/yzx/escreen/fragment/HomeFragment.kt
@@ -14,7 +14,6 @@ import android.widget.EditText
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.LinearLayoutManager
-import androidx.recyclerview.widget.RecyclerView
import com.blankj.utilcode.util.*
import com.huantansheng.easyphotos.EasyPhotos
import com.huantansheng.easyphotos.models.album.entity.Photo
@@ -22,7 +21,6 @@ import com.qmuiteam.qmui.widget.dialog.QMUIDialog
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
import com.yzx.escreen.R
-import com.yzx.escreen.adapter.HomeDialogStepAdapter
import com.yzx.escreen.adapter.HomeListAdapter
import com.yzx.escreen.fragment.base.BaseFragment
import com.yzx.escreen.model.*
@@ -38,6 +36,7 @@ import org.greenrobot.eventbus.ThreadMode
import org.jetbrains.anko.find
import org.jetbrains.anko.support.v4.act
import org.jetbrains.anko.support.v4.ctx
+import org.jetbrains.anko.support.v4.toast
import org.jetbrains.anko.textColor
@@ -71,7 +70,7 @@ class HomeFragment : BaseFragment(), HomeView,
private var mDialogVacation: BaseDialog? = null
private val mVacation = Vacation()
private val mVacationAttachment = Attachment("", "", "")
-
+ private var isRefresh = false
private val refreshRun = Runnable {
refreshData()
@@ -176,7 +175,10 @@ class HomeFragment : BaseFragment(), HomeView,
KeyboardUtils.hideSoftInput(keywordInput)
}
-
+ btnRefresh.setOnClickListener {
+ isRefresh = true
+ initData()
+ }
}
@SuppressLint("SetTextI18n")
@@ -264,71 +266,6 @@ class HomeFragment : BaseFragment(), HomeView,
@SuppressLint("SetTextI18n")
private fun showLeaveDialog(detail: StuLeave) {
EventBus.getDefault().post(detail)
- return
- val adapter = HomeDialogStepAdapter(mutableListOf())
- val dialog = BaseDialog(act, R.style.BaseDialog, R.layout.dialog_leave)
- //处理弹窗显示
- dialog.find(R.id.leave_student_name).text = detail.leave_student_name
- if (detail.face_key.isNotEmpty()) {
- val img = dialog.find(R.id.face_img)
- img.setSrc(detail.face_identity, detail.face_key)
- img.visibility = View.VISIBLE
- dialog.find(R.id.face_empty).visibility = View.GONE
- } else {
- dialog.find(R.id.face_empty).visibility = View.VISIBLE
- dialog.find(R.id.face_img).visibility = View.GONE
- }
- dialog.find(R.id.class_name).text = "${detail.grade_name}${detail.class_name}"
- dialog.find(R.id.leave_request_type_name).text = detail.leave_request_type_name
- dialog.find(R.id.leave_duration_str).text =
- (detail.end_time - detail.start_time).durationStr()
- dialog.find(R.id.add_time).text =
- "${detail.start_time.toTime()} - ${detail.end_time.toTime()}"
- dialog.find(R.id.leave_request_reason).text = detail.leave_request_reason
- dialog.find(R.id.statusImg).setSrc(
- when (detail.status) {
- 1 -> "https://oa-edu-1259243469.cos.ap-chengdu.myqcloud.com/public/mini/stutakeleave_wait.png"
- 2 -> "https://oa-edu-1259243469.cos.ap-chengdu.myqcloud.com/public/mini/stutakeleave_pass.png"
- 3 -> "https://oa-edu-1259243469.cos.ap-chengdu.myqcloud.com/public/mini/stutakeleave_nopass.png"
- 4 -> "https://oa-edu-1259243469.cos.ap-chengdu.myqcloud.com/public/mini/cancellation.png"
- 5 -> "https://oa-edu-1259243469.cos.ap-chengdu.myqcloud.com/public/mini/cancellation_overtime.png"
- else -> ""
- }
- )
-
- dialog.find(R.id.stepRecycler)
- val recyclerView = dialog.find(R.id.stepRecycler)
- val layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
-// layoutManager.stackFromEnd = true
- recyclerView.layoutManager = layoutManager
-
- recyclerView.adapter = adapter
- adapter.setList(detail.getStep())
- recyclerView.scrollToPosition(adapter.itemCount - 1)
- dialog.find(R.id.closeBtn).setOnClickListener {
- dialog.hide()
- val index = mShowList.indexOfFirst { it.id == detail.id }
- if (index >= 0) {
- mShowList.removeAt(index)
- }
- val dialogIndex = mShowDialogList.indexOfFirst { it.getLeaveId() == detail.id }
- if (index >= 0) {
- mShowDialogList.removeAt(dialogIndex)
- }
- val showItem = mShowDialogList.find { !it.showed }
- showItem?.apply {
- show()
- }
-
- }
- dialog.hideNavigationBar()
- val showList = mShowDialogList.filter { it.showed }
- if (showList.isEmpty()) {
- dialog.show()
- dialog.showed = true
- }
- dialog.setLeaveId(detail.id)
- mShowDialogList.add(dialog)
}
private fun changeStatusBtn(idx: Int) {
@@ -436,6 +373,10 @@ class HomeFragment : BaseFragment(), HomeView,
@SuppressLint("SetTextI18n")
override fun onLeaveListSuccess(list: MutableList, pager: Pager) {
pageTv?.apply {
+ if(isRefresh){
+ toast("刷新成功!")
+ isRefresh = false
+ }
mAdapter.setList(list)
mPager = pager
pageTv.text = "${pager.page_no} / ${pager.total_pages}"
@@ -470,6 +411,10 @@ class HomeFragment : BaseFragment(), HomeView,
override fun onLeaveListError(error: String) {
isLoading = false
+ if(isRefresh){
+ toast("刷新失败,请重试!")
+ isRefresh = false
+ }
showEmpty(3)
}
diff --git a/app/src/main/java/com/yzx/escreen/fragment/VisitorFragment.kt b/app/src/main/java/com/yzx/escreen/fragment/VisitorFragment.kt
new file mode 100644
index 0000000..70a811f
--- /dev/null
+++ b/app/src/main/java/com/yzx/escreen/fragment/VisitorFragment.kt
@@ -0,0 +1,404 @@
+package com.yzx.escreen.fragment
+
+import android.annotation.SuppressLint
+import android.app.Activity
+import android.content.Intent
+import android.content.res.ColorStateList
+import android.graphics.Color
+import android.text.Editable
+import android.text.TextWatcher
+import android.view.KeyEvent
+import android.view.View
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.blankj.utilcode.util.*
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
+import com.yzx.escreen.R
+import com.yzx.escreen.adapter.VisitorListAdapter
+import com.yzx.escreen.fragment.base.BaseFragment
+import com.yzx.escreen.model.*
+import com.yzx.escreen.presenter.VisitorPresenter
+import com.yzx.escreen.presenter.VisitorView
+import com.yzx.escreen.utils.FileUploadCallBack
+import com.yzx.escreen.widget.BaseDialog
+import kotlinx.android.synthetic.main.fragment_visitor.*
+import kotlinx.android.synthetic.main.layout_loading.view.*
+import org.greenrobot.eventbus.EventBus
+import org.greenrobot.eventbus.Subscribe
+import org.greenrobot.eventbus.ThreadMode
+import org.jetbrains.anko.support.v4.ctx
+import org.jetbrains.anko.support.v4.toast
+import org.jetbrains.anko.textColor
+
+
+class VisitorFragment : BaseFragment(), VisitorView,
+ NetworkUtils.OnNetworkStatusChangedListener, FileUploadCallBack {
+
+ companion object {
+
+ val CAMER_REQUEST_CODE = 0x01
+
+ @JvmStatic
+ fun getNewInstance() =
+ VisitorFragment()
+ }
+
+ private val mAdapter: VisitorListAdapter by lazy {
+ val list = mutableListOf()
+ VisitorListAdapter(list)
+ }
+
+ private var mPager = Pager()
+ var list = mutableListOf()
+ private val statusBtnList = mutableListOf()
+ var keyword: String = ""
+ var status: String = "10"
+ private var isLoading = false
+ private val mShowList = mutableListOf()
+ private val mShowDialogList = mutableListOf()
+ private var isRefresh = false
+
+ private val refreshRun = Runnable {
+ refreshData()
+ }
+
+ override val inflateId: Int
+ get() = R.layout.fragment_visitor
+
+ override fun initView() {
+ NetworkUtils.registerNetworkStatusChangedListener(this)
+ recyclerView.layoutManager =
+ LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
+ recyclerView.adapter = mAdapter
+
+ preTxtBtn.setOnClickListener { pre() }
+ nextTxtBtn.setOnClickListener { next() }
+ allBtn.setOnClickListener { changeStatus(10,0) }
+ status1Btn.setOnClickListener { changeStatus(0,1) }
+ status2Btn.setOnClickListener { changeStatus(1,2) }
+ status3Btn.setOnClickListener { changeStatus(2,3) }
+ status4Btn.setOnClickListener { changeStatus(-1,4) }
+ statusBtnList.add(allBtn)
+ statusBtnList.add(status1Btn)
+ statusBtnList.add(status2Btn)
+ statusBtnList.add(status3Btn)
+ statusBtnList.add(status4Btn)
+ keywordInput.setOnKeyListener { _, keyCode, _ ->
+ if (!isLoading) {
+ if (keyCode == KeyEvent.KEYCODE_ENTER) {
+ keyword = keywordInput.text.toString()
+ initData()
+ KeyboardUtils.hideSoftInput(keywordInput)
+ }
+ }
+ false
+ }
+ clearBtn.setOnClickListener {
+ keyword = ""
+ keywordInput.setText("")
+ KeyboardUtils.hideSoftInput(keywordInput)
+ initData()
+ }
+ var lastClickTime = TimeUtils.getNowMills()
+ mAdapter.setOnItemClickListener { adapter, view, position ->
+ val curr = TimeUtils.getNowMills()
+ if(curr - lastClickTime > 500){
+ lastClickTime = curr
+ mPresenter?.getDetail(mAdapter.getItem(position).id)
+ }
+ }
+
+ mAdapter.setOnItemChildClickListener { adapter, view, position ->
+ LogUtils.d("setOnItemChildClickListener", position)
+ when (view.id) {
+ R.id.cancelBtn -> {
+
+ }
+ }
+ }
+ btnRefresh.setOnClickListener {
+ isRefresh = true
+ initData()
+ }
+
+
+ switchBtn.setOnCheckedChangeListener { buttonView, isChecked ->
+ SPUtils.getInstance().put("auto_show_visitor", isChecked)
+ changeSwitchBtnTxt(isChecked)
+ EventBus.getDefault().post(AutoSwitchChange(2))
+ }
+ val isAutoShowLeave = SPUtils.getInstance().getBoolean("auto_show_visitor", false)
+ switchBtn.isChecked = isAutoShowLeave
+ changeSwitchBtnTxt(isAutoShowLeave)
+
+ switchBtnTxt.setOnClickListener {
+ switchBtn.isChecked = !switchBtn.isChecked
+ }
+
+ keywordInput.addTextChangedListener(object : TextWatcher {
+ override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
+
+ }
+
+ override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
+ if (s != null && s.isNotEmpty()) {
+ clearBtn.visibility = View.VISIBLE
+ } else {
+ clearBtn.visibility = View.INVISIBLE
+ }
+ }
+
+ override fun afterTextChanged(s: Editable?) {
+
+ }
+
+ })
+ filterLayout.setOnClickListener {
+ KeyboardUtils.hideSoftInput(keywordInput)
+ }
+ }
+
+
+ private fun changeSwitchBtnTxt(isChecked: Boolean) {
+ if (isChecked) {
+ switchBtnTxt.setTextColor(ctx.resources.getColor(R.color.green2))
+ } else {
+ switchBtnTxt.setTextColor(ctx.resources.getColor(R.color.black_3))
+ }
+ }
+
+ @SuppressLint("SetTextI18n")
+ private fun showLeaveDialog(detail: Visitor) {
+ EventBus.getDefault().post(detail)
+ }
+
+ private fun changeStatusBtn(idx: Int) {
+ statusBtnList.forEachIndexed { index, button ->
+ if (index == idx) {
+ button.textColor = Color.parseColor("#ffffff")
+ button.setBackgroundColor(Color.parseColor("#3ca0e9"))
+ button.setStrokeColors(ColorStateList.valueOf(Color.parseColor("#3ca0e9")))
+ } else {
+ button.textColor = Color.parseColor("#808080")
+ button.setBackgroundColor(Color.parseColor("#ffffff"))
+ button.setStrokeColors(ColorStateList.valueOf(Color.parseColor("#dcdee0")))
+ }
+ }
+ }
+
+ private fun changeStatus(status: Int,index:Int) {
+ KeyboardUtils.hideSoftInput(keywordInput)
+ if (isLoading) {
+ return
+ }
+ changeStatusBtn(index)
+ this.status = "${status}"
+ initData()
+ }
+
+ override fun initData() {
+
+ mPager.page_no = 1
+ if (NetworkUtils.isConnected()) {
+ showEmpty(1)
+ isLoading = true
+ mPresenter?.getList(mPager.page_no, keyword, status)
+ } else {
+ showEmpty(2)
+ }
+
+ }
+
+ /**
+ * type 1 loading 2 neterror 3 empty
+ */
+ private fun showEmpty(type: Int) {
+ when (type) {
+ 1 -> {
+ mAdapter.setEmptyView(R.layout.layout_loading)
+ mAdapter.emptyLayout?.apply {
+ this.QMUIEmptyView.setLoadingShowing(true)
+ this.QMUIEmptyView.setTitleText("数据加载中")
+ }
+ }
+ 2 -> {
+ mAdapter.setEmptyView(R.layout.layout_loading)
+ mAdapter.emptyLayout?.apply {
+ this.QMUIEmptyView.show(false, null, "网络连接异常,请检查", "去设置") {
+ NetworkUtils.openWirelessSettings()
+ }
+ }
+ }
+ 3 -> {
+ mAdapter.setEmptyView(R.layout.layout_empty)
+ }
+ }
+
+ }
+
+ private fun refreshData() {
+ if (isLoading) {
+ return
+ }
+ isLoading = true
+ mPresenter?.getList(mPager.page_no, keyword, status)
+ }
+
+ private fun pre() {
+ KeyboardUtils.hideSoftInput(keywordInput)
+ if (isLoading) {
+ return
+ }
+ if (mPager.page_no <= 1) {
+ } else {
+ isLoading = true
+ mPresenter?.getList(mPager.page_no - 1, keyword, status)
+ }
+ }
+
+ private fun next() {
+ KeyboardUtils.hideSoftInput(keywordInput)
+ if (isLoading) {
+ return
+ }
+ if (mPager.page_no >= mPager.total_pages) {
+ } else {
+ isLoading = true
+ mPresenter?.getList(mPager.page_no + 1, keyword, status)
+ }
+ }
+
+ override fun initPresenter(): VisitorPresenter = VisitorPresenter(this)
+
+ @SuppressLint("SetTextI18n")
+ override fun onListSuccess(list: MutableList, pager: Pager) {
+ pageTv?.apply {
+ if(isRefresh){
+ toast("刷新成功!")
+ isRefresh = false
+ }
+ mAdapter.setList(list)
+ mPager = pager
+ pageTv.text = "${pager.page_no} / ${pager.total_pages}"
+ totalTv.text = "共${pager.total_count}条"
+
+ val disabledColor = Color.parseColor("#666666")
+ val color = Color.parseColor("#3ca0e9")
+ if (pager.page_no <= 1) {
+ preTxtBtn.textColor = disabledColor
+ } else {
+ preTxtBtn.textColor = color
+ }
+
+ if (pager.page_no >= pager.total_pages) {
+ nextTxtBtn.textColor = disabledColor
+ } else {
+ nextTxtBtn.textColor = color
+ }
+ isLoading = false
+ showEmpty(3)
+ pageTv.postDelayed({
+ refreshData()
+ }, 30 * 1000)
+ }
+ }
+
+ override fun onStop() {
+ pageTv.removeCallbacks(refreshRun)
+ super.onStop()
+ EventBus.getDefault().unregister(this)
+ }
+
+
+ override fun onStart() {
+ super.onStart()
+ EventBus.getDefault().register(this)
+ }
+
+ override fun onListError(error: String) {
+ isLoading = false
+ if(isRefresh){
+ toast("刷新失败,请重试!")
+ isRefresh = false
+ }
+ showEmpty(3)
+ }
+
+ override fun onDetailSuccess(detail: Visitor) {
+ pageTv?.apply {
+ val item = mShowList.find { it.id == detail.id }
+ if (item != null) {
+ //替换新的数据
+ val index = mShowList.indexOf(item)
+ mShowList[index] = detail
+
+ //移除原本的dialog
+ val dialogIndex = mShowDialogList.indexOfFirst { it.getLeaveId() == item.id }
+ if (dialogIndex > -1) {
+ mShowDialogList[dialogIndex].hide()
+ mShowDialogList.removeAt(dialogIndex)
+ }
+
+ } else {
+ mShowList.add(detail)
+ }
+ showLeaveDialog(detail)
+ }
+ }
+
+ override fun onDetailError(error: String) {
+
+ }
+
+ override fun onDisconnected() {
+
+ }
+
+ override fun onConnected(networkType: NetworkUtils.NetworkType?) {
+ refreshData()
+ }
+
+ override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
+ if (resultCode == Activity.RESULT_OK) {
+
+
+ }
+ super.onActivityResult(requestCode, resultCode, data)
+ }
+
+ override fun onSuccess(identity: String, key: String) {
+ LogUtils.d(identity, key)
+
+ }
+
+ override fun onError(msg: String) {
+ LogUtils.d(msg)
+
+
+ }
+
+ //接收消息
+ @Subscribe(threadMode = ThreadMode.MAIN)
+ fun onMessageEvent(event: MessageEventAuto) {
+ val list = event.list.filter { it.type == 1 }.toMutableList()
+ if (list.isNotEmpty() && switchBtn.isChecked) {
+ list.forEachIndexed { index, leaveID ->
+ pageTv.postDelayed({
+ mPresenter?.getDetail(leaveID.id)
+ }, 500L * index)
+ }
+ }
+ }
+
+ //接收消息
+ @Subscribe(threadMode = ThreadMode.MAIN)
+ fun onMessageRefreshEvent(event: RefreshTokenEvent) {
+ refreshData()
+ }
+
+ //接收消息
+ @Subscribe(threadMode = ThreadMode.MAIN)
+ fun onMessageEvent(event: TimeShow) {
+ timeView.setTime(event)
+ }
+}
+
diff --git a/app/src/main/java/com/yzx/escreen/model/ViewImage.kt b/app/src/main/java/com/yzx/escreen/model/ViewImage.kt
new file mode 100644
index 0000000..1f357d7
--- /dev/null
+++ b/app/src/main/java/com/yzx/escreen/model/ViewImage.kt
@@ -0,0 +1,7 @@
+package com.yzx.escreen.model
+
+data class ViewImage(
+ val id: Int = 0,
+ val identity: String = "",
+ val key: String = ""
+)
\ No newline at end of file
diff --git a/app/src/main/java/com/yzx/escreen/model/Visitor.kt b/app/src/main/java/com/yzx/escreen/model/Visitor.kt
new file mode 100644
index 0000000..f147792
--- /dev/null
+++ b/app/src/main/java/com/yzx/escreen/model/Visitor.kt
@@ -0,0 +1,71 @@
+package com.yzx.escreen.model
+
+data class Visitor(
+ val add_time: Int = 0,
+ val auditRecordOuts: MutableList = mutableListOf(),
+ val audit_status: Int = 0,
+ val car_in_time: Int = 0,
+ val car_out_time: Int = 0,
+ val card_no: String = "",
+ val end_time: Int = 0,
+ val face_identity: String = "",
+ val face_key: String = "",
+ val health_code_identity: String = "",
+ val health_code_key: String = "",
+ val history_num: Int = 0,
+ val id: Int = 0,
+ val in_out_num: Int = 0,
+ val is_drive: Int = 0,
+ val license_plate: String = "",
+ val positionNums: List = mutableListOf(),
+ val position_id: Int = 0,
+ val reception_user: String = "",
+ val reception_user_id: Int = 0,
+ val start_time: Int = 0,
+ val trip_code_identity: String = "",
+ val trip_code_key: String = "",
+ val user_id: Int = 0,
+ val user_name: String = "",
+ val user_phone: String = "",
+ val user_type: Int = 0,
+ val visit_reason: String = ""
+){
+ fun getStatusImg(): String {
+ return when (audit_status) {
+ 0 -> "https://oa-edu-1259243469.cos.ap-chengdu.myqcloud.com/public/v_status_0.png"
+ 1 -> "https://oa-edu-1259243469.cos.ap-chengdu.myqcloud.com/public/v_status_1.png"
+ 2 -> "https://oa-edu-1259243469.cos.ap-chengdu.myqcloud.com/public/v_status_2.png"
+ -1 -> "https://oa-edu-1259243469.cos.ap-chengdu.myqcloud.com/public/v_status_-1.png"
+ else -> "--"
+ }
+ }
+
+ fun getStep():MutableList{
+ val list = mutableListOf()
+ list.add(AuditRecordOut(add_time=add_time, typeTxt = "发起申请"))
+ auditRecordOuts.forEach {
+ list.add(it.getCopyItem())
+ }
+ return list
+ }
+}
+
+data class AuditRecordOut(
+ val add_time: Int = 0,
+ val audit_remark: String = "",
+ val audit_status: Int = 0,
+ val audit_user_name: String = "",
+ val typeTxt: String = "",
+ val id: Int = 0
+){
+ fun getTitle():String{
+ if(typeTxt.isNotEmpty()){
+ return typeTxt
+ }
+ return "接待人审批"
+ }
+
+ fun getCopyItem():AuditRecordOut{
+ return AuditRecordOut(add_time,audit_remark,audit_status, audit_user_name, typeTxt, id)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/yzx/escreen/presenter/VisitorPresenter.kt b/app/src/main/java/com/yzx/escreen/presenter/VisitorPresenter.kt
new file mode 100644
index 0000000..2c07312
--- /dev/null
+++ b/app/src/main/java/com/yzx/escreen/presenter/VisitorPresenter.kt
@@ -0,0 +1,84 @@
+package com.yzx.escreen.presenter
+
+import com.blankj.utilcode.util.LogUtils
+import com.lzy.okgo.OkGo
+import com.lzy.okgo.model.Response
+import com.yzx.escreen.config.Config
+import com.yzx.escreen.config.YzxInterface
+import com.yzx.escreen.model.Pager
+import com.yzx.escreen.model.User
+import com.yzx.escreen.model.Visitor
+import com.yzx.escreen.presenter.base.BasePresenter
+import com.yzx.escreen.presenter.base.IView
+import com.yzx.escreen.presenter.base.JsonCallBack
+import com.yzx.escreen.presenter.base.YzxResponse
+
+class VisitorPresenter(view: VisitorView) : BasePresenter(view) {
+
+
+ fun getList(pageNo: Int, keyword: String, status: String) {
+ if(User.getUser().token.isEmpty()){
+ return
+ }
+ val url = "${Config.BASE_URL}${YzxInterface.INTERFACE_ACCESS_CONTROL_GET_FACE_LIST}"
+ OkGo.post>(url)
+ .tag(this)
+ .params("keyword", keyword)
+ .params("audit_status", status)
+ .params("user_type", 3)
+ .params("page_size", 6)
+ .params("page_no", pageNo)
+ .execute(object : JsonCallBack>() {
+
+
+ override fun onSuccess(response: Response>?) {
+ LogUtils.d(response)
+ if (response?.isSuccessful == true) {
+ mView?.onListSuccess(response.body().list, response.body().pager)
+ }
+ }
+
+ override fun onError(response: Response>?) {
+ super.onError(response)
+ LogUtils.d(response)
+ mView?.onListError(response?.body()?.msg ?: "")
+ }
+ })
+ }
+ fun getDetail(id: Int) {
+ if(User.getUser().token.isEmpty()){
+ return
+ }
+ val url = "${Config.BASE_URL}${YzxInterface.INTERFACE_ACCESS_CONTROL_GET_FACE_INFO_DETAIL}"
+ OkGo.post>(url)
+ .tag(this)
+ .params("id", id)
+ .params("user_type", 3)
+ .execute(object : JsonCallBack>() {
+
+
+ override fun onSuccess(response: Response>?) {
+ LogUtils.d(response)
+ if (response?.isSuccessful == true) {
+ mView?.onDetailSuccess(response.body().data)
+ }
+ }
+
+ override fun onError(response: Response>?) {
+ super.onError(response)
+ LogUtils.d(response)
+ mView?.onDetailError(response?.body()?.msg ?: "")
+ }
+ })
+ }
+
+
+
+}
+
+interface VisitorView : IView {
+ fun onListSuccess(list: MutableList, pager: Pager)
+ fun onListError(error: String)
+ fun onDetailSuccess(detail: Visitor)
+ fun onDetailError(error: String)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/yzx/escreen/utils/KotlinX.kt b/app/src/main/java/com/yzx/escreen/utils/KotlinX.kt
index c1a78d9..cb0b016 100644
--- a/app/src/main/java/com/yzx/escreen/utils/KotlinX.kt
+++ b/app/src/main/java/com/yzx/escreen/utils/KotlinX.kt
@@ -2,7 +2,6 @@ package com.yzx.escreen.utils
import android.app.Dialog
import android.view.View
-import android.view.WindowManager
import android.widget.ImageView
import com.blankj.utilcode.util.TimeUtils
import com.bumptech.glide.Glide
@@ -106,6 +105,5 @@ fun SimpleDateFormat.zhCn():SimpleDateFormat{
-
diff --git a/app/src/main/java/com/yzx/escreen/widget/ChangeDialog.kt b/app/src/main/java/com/yzx/escreen/widget/ChangeDialog.kt
index d26ba5e..7950582 100644
--- a/app/src/main/java/com/yzx/escreen/widget/ChangeDialog.kt
+++ b/app/src/main/java/com/yzx/escreen/widget/ChangeDialog.kt
@@ -14,14 +14,11 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.yzx.escreen.R
import com.yzx.escreen.adapter.ChangeDialogStepAdapter
-import com.yzx.escreen.adapter.HomeDialogStepAdapter
import com.yzx.escreen.model.StuChange
-import com.yzx.escreen.model.StuLeave
-import com.yzx.escreen.utils.durationStr
+import com.yzx.escreen.model.ViewImage
import com.yzx.escreen.utils.setSrc
import com.yzx.escreen.utils.toDay
-import com.yzx.escreen.utils.toTime
-import kotlinx.android.synthetic.main.dialog_leave.view.*
+import org.greenrobot.eventbus.EventBus
import org.jetbrains.anko.find
import org.jetbrains.anko.textColor
@@ -68,6 +65,9 @@ class ChangeDialog(
find(R.id.face_empty).visibility = View.VISIBLE
find(R.id.face_img).visibility = View.GONE
}
+ find(R.id.face_img).setOnClickListener {
+ EventBus.getDefault().post(ViewImage(detail.id,detail.face_identity,detail.face_key))
+ }
find(R.id.class_name).text = "${detail.grade_name}${detail.class_name}"
find(R.id.leave_request_type_name).text = detail.status_change_type_name
find(R.id.statusName).text = when (detail.status) {
diff --git a/app/src/main/java/com/yzx/escreen/widget/LeaveDialog.kt b/app/src/main/java/com/yzx/escreen/widget/LeaveDialog.kt
index 11bf0ed..39cd1e0 100644
--- a/app/src/main/java/com/yzx/escreen/widget/LeaveDialog.kt
+++ b/app/src/main/java/com/yzx/escreen/widget/LeaveDialog.kt
@@ -14,10 +14,12 @@ import androidx.recyclerview.widget.RecyclerView
import com.yzx.escreen.R
import com.yzx.escreen.adapter.HomeDialogStepAdapter
import com.yzx.escreen.model.StuLeave
+import com.yzx.escreen.model.ViewImage
import com.yzx.escreen.utils.durationStr
import com.yzx.escreen.utils.setSrc
import com.yzx.escreen.utils.toTime
import kotlinx.android.synthetic.main.dialog_leave.view.*
+import org.greenrobot.eventbus.EventBus
import org.jetbrains.anko.find
/**
@@ -62,6 +64,9 @@ class LeaveDialog(
find(R.id.face_empty).visibility = View.VISIBLE
find(R.id.face_img).visibility = View.GONE
}
+ find(R.id.face_img).setOnClickListener {
+ EventBus.getDefault().post(ViewImage(detail.id,detail.face_identity,detail.face_key))
+ }
find(R.id.class_name).text = "${detail.grade_name}${detail.class_name}"
find(R.id.leave_request_type_name).text = detail.leave_request_type_name
find(R.id.leave_duration_str).text =
diff --git a/app/src/main/java/com/yzx/escreen/widget/ViewImageDialog.kt b/app/src/main/java/com/yzx/escreen/widget/ViewImageDialog.kt
new file mode 100644
index 0000000..bc09077
--- /dev/null
+++ b/app/src/main/java/com/yzx/escreen/widget/ViewImageDialog.kt
@@ -0,0 +1,56 @@
+package com.yzx.escreen.widget
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.util.AttributeSet
+import android.view.LayoutInflater
+import android.view.View
+import android.widget.ImageView
+import androidx.constraintlayout.widget.ConstraintLayout
+import androidx.core.content.ContextCompat
+import com.yzx.escreen.R
+import com.yzx.escreen.model.ViewImage
+import com.yzx.escreen.utils.setSrc
+import kotlinx.android.synthetic.main.dialog_view_img.view.*
+import org.jetbrains.anko.find
+
+/**
+ * 展示大图
+ */
+class ViewImageDialog(
+ context: Context,
+ attrs: AttributeSet? = null,
+ defStyleAttr: Int = 0,
+ defStyleRes: Int = 0
+) :
+ ConstraintLayout(context, attrs, defStyleAttr, defStyleRes) {
+
+ var onCloseClick: (view: View) -> Unit = {}
+ init {
+ val view = LayoutInflater.from(context).inflate(R.layout.dialog_view_img, null)
+ val layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)
+ layoutParams.matchConstraintPercentWidth = 0.8f
+ layoutParams.topToTop = LayoutParams.PARENT_ID
+ layoutParams.startToStart = LayoutParams.PARENT_ID
+ layoutParams.endToEnd = LayoutParams.PARENT_ID
+ layoutParams.bottomToBottom = LayoutParams.PARENT_ID
+ view.layoutParams = layoutParams
+ addView(view)
+ background = ContextCompat.getDrawable(context, R.color.dialog_bg)
+ setOnClickListener { } //阻止事件冒泡
+
+
+ }
+
+ @SuppressLint("SetTextI18n")
+ fun setData(viewImg: ViewImage) {
+// photo_view.setSrc(viewImg.identity,viewImg.key)
+// photo_view.setImageResource(R.mipmap.empty)
+ val img = find(R.id.photo_view)
+ img.setSrc(viewImg.identity,viewImg.key)
+// img.setSrc("https://fileb.oa.qbjjyyun.net/edufile/imageView?uniqueKey=125a4c591c91fbb9f186da8e54cd31aa")
+ photo_view.setOnClickListener {
+ onCloseClick(this)
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/yzx/escreen/widget/VisitorDialog.kt b/app/src/main/java/com/yzx/escreen/widget/VisitorDialog.kt
new file mode 100644
index 0000000..d26f9ed
--- /dev/null
+++ b/app/src/main/java/com/yzx/escreen/widget/VisitorDialog.kt
@@ -0,0 +1,142 @@
+package com.yzx.escreen.widget
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.graphics.Color
+import android.util.AttributeSet
+import android.view.LayoutInflater
+import android.view.View
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.constraintlayout.widget.ConstraintLayout
+import androidx.core.content.ContextCompat
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.yzx.escreen.R
+import com.yzx.escreen.adapter.VisitorDialogStepAdapter
+import com.yzx.escreen.model.ViewImage
+import com.yzx.escreen.model.Visitor
+import com.yzx.escreen.utils.setSrc
+import com.yzx.escreen.utils.toDay
+import com.yzx.escreen.utils.toTime
+import org.greenrobot.eventbus.EventBus
+import org.jetbrains.anko.find
+import org.jetbrains.anko.textColor
+
+/**
+ * 展示访客信息
+ */
+class VisitorDialog(
+ context: Context,
+ attrs: AttributeSet? = null,
+ defStyleAttr: Int = 0,
+ defStyleRes: Int = 0
+) :
+ ConstraintLayout(context, attrs, defStyleAttr, defStyleRes) {
+
+ val adapter: VisitorDialogStepAdapter by lazy {
+ VisitorDialogStepAdapter(mutableListOf())
+ }
+ var onCloseClick: (view:View) -> Unit = {}
+
+ init {
+ val view = LayoutInflater.from(context).inflate(R.layout.dialog_visitor, null)
+ val layoutParams = LayoutParams(0, LayoutParams.WRAP_CONTENT)
+ layoutParams.matchConstraintPercentWidth = 0.8f
+ layoutParams.topToTop = LayoutParams.PARENT_ID
+ layoutParams.startToStart = LayoutParams.PARENT_ID
+ layoutParams.endToEnd = LayoutParams.PARENT_ID
+ layoutParams.bottomToBottom = LayoutParams.PARENT_ID
+ view.layoutParams = layoutParams
+ addView(view)
+ background = ContextCompat.getDrawable(context, R.color.dialog_bg)
+ setOnClickListener { } //阻止事件冒泡
+ }
+
+ @SuppressLint("SetTextI18n")
+ fun setData(detail: Visitor) {
+ //处理弹窗显示
+ find(R.id.userName).text = "${detail.user_name} ${detail.user_phone}"
+ find(R.id.id_card_num).text = "${detail.card_no}"
+ if (detail.face_key.isNotEmpty()) {
+ val img = find(R.id.face_img)
+ img.setSrc(detail.face_identity, detail.face_key)
+ img.visibility = View.VISIBLE
+ find(R.id.face_empty).visibility = View.GONE
+ } else {
+ find(R.id.face_empty).visibility = View.VISIBLE
+ find(R.id.face_img).visibility = View.GONE
+ }
+ find(R.id.face_img).setOnClickListener {
+ EventBus.getDefault().post(ViewImage(detail.id,detail.face_identity,detail.face_key))
+ }
+ if (detail.health_code_key.isNotEmpty()) {
+ val img = find(R.id.health_img)
+ img.setSrc(detail.health_code_identity, detail.health_code_key)
+ img.visibility = View.VISIBLE
+ find(R.id.health_empty).visibility = View.GONE
+ } else {
+ find(R.id.health_empty).visibility = View.VISIBLE
+ find(R.id.health_img).visibility = View.GONE
+ }
+ find(R.id.health_img).setOnClickListener {
+ EventBus.getDefault().post(ViewImage(detail.id,detail.health_code_identity,detail.health_code_key))
+ }
+ if (detail.trip_code_key.isNotEmpty()) {
+ val img = find(R.id.trip_img)
+ img.setSrc(detail.trip_code_identity, detail.trip_code_key)
+ img.visibility = View.VISIBLE
+ find(R.id.trip_empty).visibility = View.GONE
+ } else {
+ find(R.id.trip_empty).visibility = View.VISIBLE
+ find(R.id.trip_img).visibility = View.GONE
+ }
+ find(R.id.trip_img).setOnClickListener {
+ EventBus.getDefault().post(ViewImage(detail.id,detail.trip_code_identity,detail.trip_code_key))
+ }
+ find(R.id.reception_user).text = "${detail.reception_user}"
+ find(R.id.visit_reason).text = "${detail.visit_reason}"
+ find(R.id.is_drive).text = when (detail.is_drive) {
+ 1 -> "是"
+ 0 -> "否"
+ else -> "--"
+ }
+ if(detail.is_drive==1){
+ find(R.id.carLayout).visibility = View.VISIBLE
+ find(R.id.doorLayout).visibility = View.GONE
+ find(R.id.license_plate).text = "${detail.license_plate}"
+ find(R.id.car_in_time).text = "${detail.car_in_time.toTime()} - ${detail.car_out_time.toTime()}"
+ }else{
+ find(R.id.carLayout).visibility = View.GONE
+ find(R.id.doorLayout).visibility = View.VISIBLE
+ find(R.id.audit_status_str).text = when (detail.audit_status) {
+ 0 -> "待审核"
+ 1 -> "可通行"
+ 2 -> "审核拒绝"
+ -1 -> "已失效"
+ else -> "--"
+ }
+ find(R.id.audit_status_str).textColor = when (detail.audit_status) {
+ 0 -> Color.parseColor("#333333")
+ 1 -> Color.parseColor("#3c7ef6")
+ 2 -> Color.parseColor("#ff4040")
+ -1 -> Color.parseColor("#999999")
+ else -> Color.parseColor("#333333")
+ }
+ find(R.id.start_time).text = "${detail.start_time.toDay()} - ${detail.end_time.toDay()} 可进出${detail.in_out_num}次"
+ }
+
+ find(R.id.statusImg).setSrc(detail.getStatusImg())
+
+ find(R.id.stepRecycler)
+ val recyclerView = find(R.id.stepRecycler)
+ recyclerView.layoutManager =
+ LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
+ recyclerView.adapter = adapter
+ adapter.setList(detail.getStep())
+
+ find(R.id.closeBtn).setOnClickListener {
+ onCloseClick(this)
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_view_img.xml b/app/src/main/res/layout/dialog_view_img.xml
new file mode 100644
index 0000000..c1b609e
--- /dev/null
+++ b/app/src/main/res/layout/dialog_view_img.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_visitor.xml b/app/src/main/res/layout/dialog_visitor.xml
new file mode 100644
index 0000000..6293ab1
--- /dev/null
+++ b/app/src/main/res/layout/dialog_visitor.xml
@@ -0,0 +1,378 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_change.xml b/app/src/main/res/layout/fragment_change.xml
index 0993952..5c2b34a 100644
--- a/app/src/main/res/layout/fragment_change.xml
+++ b/app/src/main/res/layout/fragment_change.xml
@@ -137,7 +137,7 @@
android:layout_gravity="center_vertical"
android:layout_marginStart="@dimen/d_10"
android:gravity="center"
- android:text="自动弹出请假单"
+ android:text="自动弹出异动单"
android:textColor="#53a051" />
@@ -231,6 +231,15 @@
android:text="共0条数据"
android:textSize="@dimen/sp18" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/layout_visitor_step.xml b/app/src/main/res/layout/layout_visitor_step.xml
new file mode 100644
index 0000000..d62c040
--- /dev/null
+++ b/app/src/main/res/layout/layout_visitor_step.xml
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/layout_visitor_table.xml b/app/src/main/res/layout/layout_visitor_table.xml
new file mode 100644
index 0000000..b2ce711
--- /dev/null
+++ b/app/src/main/res/layout/layout_visitor_table.xml
@@ -0,0 +1,126 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-mdpi/visitor_select.png b/app/src/main/res/mipmap-mdpi/visitor_select.png
new file mode 100644
index 0000000..d4b651c
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/visitor_select.png differ
diff --git a/app/src/main/res/mipmap-mdpi/visitor_unselect.png b/app/src/main/res/mipmap-mdpi/visitor_unselect.png
new file mode 100644
index 0000000..59eb3ba
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/visitor_unselect.png differ
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index ec498c1..56ceb71 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -186,6 +186,10 @@
- @dimen/sp20
+
+