| @@ -23,15 +23,20 @@ | |||||
| <entry key="..\:/work/escreen/app/src/main/res/layout/dialog_leave.xml" value="0.30483112441214194" /> | <entry key="..\:/work/escreen/app/src/main/res/layout/dialog_leave.xml" value="0.30483112441214194" /> | ||||
| <entry key="..\:/work/escreen/app/src/main/res/layout/dialog_test.xml" value="0.29827742520398914" /> | <entry key="..\:/work/escreen/app/src/main/res/layout/dialog_test.xml" value="0.29827742520398914" /> | ||||
| <entry key="..\:/work/escreen/app/src/main/res/layout/dialog_vacation.xml" value="0.10822707953855495" /> | <entry key="..\:/work/escreen/app/src/main/res/layout/dialog_vacation.xml" value="0.10822707953855495" /> | ||||
| <entry key="..\:/work/escreen/app/src/main/res/layout/dialog_view_img.xml" value="0.1" /> | |||||
| <entry key="..\:/work/escreen/app/src/main/res/layout/dialog_visitor.xml" value="0.11302083333333333" /> | |||||
| <entry key="..\:/work/escreen/app/src/main/res/layout/fragment_change.xml" value="0.10822707953855495" /> | <entry key="..\:/work/escreen/app/src/main/res/layout/fragment_change.xml" value="0.10822707953855495" /> | ||||
| <entry key="..\:/work/escreen/app/src/main/res/layout/fragment_home.xml" value="0.10822707953855495" /> | <entry key="..\:/work/escreen/app/src/main/res/layout/fragment_home.xml" value="0.10822707953855495" /> | ||||
| <entry key="..\:/work/escreen/app/src/main/res/layout/fragment_my.xml" value="0.10822707953855495" /> | <entry key="..\:/work/escreen/app/src/main/res/layout/fragment_my.xml" value="0.10822707953855495" /> | ||||
| <entry key="..\:/work/escreen/app/src/main/res/layout/fragment_visitor.xml" value="0.22" /> | |||||
| <entry key="..\:/work/escreen/app/src/main/res/layout/item_home.xml" value="0.12378472222222223" /> | <entry key="..\:/work/escreen/app/src/main/res/layout/item_home.xml" value="0.12378472222222223" /> | ||||
| <entry key="..\:/work/escreen/app/src/main/res/layout/layout_change_table.xml" value="0.12378472222222223" /> | <entry key="..\:/work/escreen/app/src/main/res/layout/layout_change_table.xml" value="0.12378472222222223" /> | ||||
| <entry key="..\:/work/escreen/app/src/main/res/layout/layout_empty.xml" value="0.37135416666666665" /> | <entry key="..\:/work/escreen/app/src/main/res/layout/layout_empty.xml" value="0.37135416666666665" /> | ||||
| <entry key="..\:/work/escreen/app/src/main/res/layout/layout_leave_step.xml" value="0.1" /> | <entry key="..\:/work/escreen/app/src/main/res/layout/layout_leave_step.xml" value="0.1" /> | ||||
| <entry key="..\:/work/escreen/app/src/main/res/layout/layout_leave_table.xml" value="0.21462163317657118" /> | <entry key="..\:/work/escreen/app/src/main/res/layout/layout_leave_table.xml" value="0.21462163317657118" /> | ||||
| <entry key="..\:/work/escreen/app/src/main/res/layout/layout_loading.xml" value="0.30483112441214194" /> | <entry key="..\:/work/escreen/app/src/main/res/layout/layout_loading.xml" value="0.30483112441214194" /> | ||||
| <entry key="..\:/work/escreen/app/src/main/res/layout/layout_visitor_step.xml" value="0.11302083333333333" /> | |||||
| <entry key="..\:/work/escreen/app/src/main/res/layout/layout_visitor_table.xml" value="0.19660493827160494" /> | |||||
| <entry key="..\:/work/escreen/app/src/main/res/layout/leave_dialog_title.xml" value="0.37135416666666665" /> | <entry key="..\:/work/escreen/app/src/main/res/layout/leave_dialog_title.xml" value="0.37135416666666665" /> | ||||
| <entry key="..\:/work/escreen/app/src/main/res/layout/version_dialog.xml" value="0.30483112441214194" /> | <entry key="..\:/work/escreen/app/src/main/res/layout/version_dialog.xml" value="0.30483112441214194" /> | ||||
| <entry key="..\:/work/escreen/app/src/main/res/layout/view_time.xml" value="0.12378472222222223" /> | <entry key="..\:/work/escreen/app/src/main/res/layout/view_time.xml" value="0.12378472222222223" /> | ||||
| @@ -19,8 +19,8 @@ android { | |||||
| // minSdkVersion 26 | // minSdkVersion 26 | ||||
| minSdkVersion 21 | minSdkVersion 21 | ||||
| targetSdkVersion 25 | targetSdkVersion 25 | ||||
| versionCode 11 | |||||
| versionName "2.0.9" | |||||
| versionCode 14 | |||||
| versionName "2.1.0" | |||||
| testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" | ||||
| // ndk { | // ndk { | ||||
| @@ -192,4 +192,6 @@ dependencies { | |||||
| implementation 'com.github.HuanTanSheng:EasyPhotos:3.1.5' | implementation 'com.github.HuanTanSheng:EasyPhotos:3.1.5' | ||||
| implementation("org.greenrobot:eventbus:3.3.1") | implementation("org.greenrobot:eventbus:3.3.1") | ||||
| implementation 'com.github.chrisbanes:PhotoView:2.0.0' | |||||
| } | } | ||||
| @@ -70,7 +70,7 @@ | |||||
| <service | <service | ||||
| android:name="com.tencent.smtt.export.external.DexClassLoaderProviderService" | android:name="com.tencent.smtt.export.external.DexClassLoaderProviderService" | ||||
| android:label="dexopt" | android:label="dexopt" | ||||
| android:process=":dexopt"></service> | |||||
| android:process=":dexopt"/> | |||||
| <receiver | <receiver | ||||
| android:name=".receiver.BootReceiver" | android:name=".receiver.BootReceiver" | ||||
| @@ -37,13 +37,12 @@ import com.yzx.escreen.config.RefreshToken | |||||
| import com.yzx.escreen.fragment.ChangeFragment | import com.yzx.escreen.fragment.ChangeFragment | ||||
| import com.yzx.escreen.fragment.HomeFragment | import com.yzx.escreen.fragment.HomeFragment | ||||
| import com.yzx.escreen.fragment.MyFragment | import com.yzx.escreen.fragment.MyFragment | ||||
| import com.yzx.escreen.fragment.VisitorFragment | |||||
| import com.yzx.escreen.model.* | import com.yzx.escreen.model.* | ||||
| import com.yzx.escreen.presenter.MainPresenter | import com.yzx.escreen.presenter.MainPresenter | ||||
| import com.yzx.escreen.presenter.MainView | import com.yzx.escreen.presenter.MainView | ||||
| import com.yzx.escreen.utils.hideNavigationBar | import com.yzx.escreen.utils.hideNavigationBar | ||||
| import com.yzx.escreen.widget.BaseDialog | |||||
| import com.yzx.escreen.widget.ChangeDialog | |||||
| import com.yzx.escreen.widget.LeaveDialog | |||||
| import com.yzx.escreen.widget.* | |||||
| import kotlinx.android.synthetic.main.activity_main.* | import kotlinx.android.synthetic.main.activity_main.* | ||||
| import org.greenrobot.eventbus.EventBus | import org.greenrobot.eventbus.EventBus | ||||
| import org.greenrobot.eventbus.Subscribe | import org.greenrobot.eventbus.Subscribe | ||||
| @@ -132,11 +131,12 @@ class MainActivity : BaseActivity<MainPresenter>(), NetworkUtils.OnNetworkStatus | |||||
| val tabData = arrayListOf<CustomTabEntity>() | val tabData = arrayListOf<CustomTabEntity>() | ||||
| tabData.add(TabEntity("学生请假", R.mipmap.leave_select, R.mipmap.leave_unselect)) | 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.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)) | tabData.add(TabEntity("我的", R.mipmap.my_select, R.mipmap.my_unselect)) | ||||
| tabLayout.setTabData(tabData) | tabLayout.setTabData(tabData) | ||||
| viewPager2.adapter = HomePagerAdapter(this) | viewPager2.adapter = HomePagerAdapter(this) | ||||
| viewPager2.offscreenPageLimit = 2 | |||||
| viewPager2.offscreenPageLimit = 3 | |||||
| viewPager2.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() { | viewPager2.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() { | ||||
| override fun onPageSelected(position: Int) { | override fun onPageSelected(position: Int) { | ||||
| super.onPageSelected(position) | super.onPageSelected(position) | ||||
| @@ -219,6 +219,46 @@ class MainActivity : BaseActivity<MainPresenter>(), NetworkUtils.OnNetworkStatus | |||||
| dialogList.add(dialog) | 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){ | private fun removeOld(id:Int, type:Int){ | ||||
| val view = dialogList.find { | val view = dialogList.find { | ||||
| val tagId: Int = it.getTag(R.id.tag_dialog_name) as Int | val tagId: Int = it.getTag(R.id.tag_dialog_name) as Int | ||||
| @@ -458,7 +498,7 @@ class MainActivity : BaseActivity<MainPresenter>(), NetworkUtils.OnNetworkStatus | |||||
| } | } | ||||
| class HomePagerAdapter(act: AppCompatActivity) : FragmentStateAdapter(act) { | class HomePagerAdapter(act: AppCompatActivity) : FragmentStateAdapter(act) { | ||||
| override fun getItemCount(): Int = 3 | |||||
| override fun getItemCount(): Int = 4 | |||||
| override fun createFragment(position: Int): Fragment { | override fun createFragment(position: Int): Fragment { | ||||
| when (position) { | when (position) { | ||||
| @@ -469,6 +509,9 @@ class HomePagerAdapter(act: AppCompatActivity) : FragmentStateAdapter(act) { | |||||
| return ChangeFragment.getNewInstance() | return ChangeFragment.getNewInstance() | ||||
| } | } | ||||
| 2 -> { | 2 -> { | ||||
| return VisitorFragment.getNewInstance() | |||||
| } | |||||
| 3 -> { | |||||
| return MyFragment.getNewInstance() | return MyFragment.getNewInstance() | ||||
| } | } | ||||
| } | } | ||||
| @@ -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<AuditRecordOut>) : | |||||
| BaseQuickAdapter<AuditRecordOut, BaseViewHolder>(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)) | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -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<Visitor>) : | |||||
| BaseQuickAdapter<Visitor, BaseViewHolder>(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 | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -20,4 +20,9 @@ object YzxInterface { | |||||
| const val INTERFACE_STUDENT_GET_CHANGE_LIST= "/edu/attendance/teacher/listStudentStatusChange"//学籍异动列表 | const val INTERFACE_STUDENT_GET_CHANGE_LIST= "/edu/attendance/teacher/listStudentStatusChange"//学籍异动列表 | ||||
| const val INTERFACE_STUDENT_GET_CHANGE_DETAIL= "/edu/attendance/getStudentStatusChangeDetail"//学籍异动详情 | 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" // 访客信息 | |||||
| } | } | ||||
| @@ -9,32 +9,24 @@ import android.text.Editable | |||||
| import android.text.TextWatcher | import android.text.TextWatcher | ||||
| import android.view.KeyEvent | import android.view.KeyEvent | ||||
| import android.view.View | import android.view.View | ||||
| import android.widget.ImageView | |||||
| import android.widget.TextView | |||||
| import androidx.recyclerview.widget.LinearLayoutManager | import androidx.recyclerview.widget.LinearLayoutManager | ||||
| import androidx.recyclerview.widget.RecyclerView | |||||
| import com.blankj.utilcode.util.* | import com.blankj.utilcode.util.* | ||||
| import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton | import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton | ||||
| import com.yzx.escreen.R | import com.yzx.escreen.R | ||||
| import com.yzx.escreen.adapter.ChangeDialogStepAdapter | |||||
| import com.yzx.escreen.adapter.ChangeListAdapter | import com.yzx.escreen.adapter.ChangeListAdapter | ||||
| import com.yzx.escreen.fragment.base.BaseFragment | import com.yzx.escreen.fragment.base.BaseFragment | ||||
| import com.yzx.escreen.model.* | import com.yzx.escreen.model.* | ||||
| import com.yzx.escreen.presenter.ChangePresenter | import com.yzx.escreen.presenter.ChangePresenter | ||||
| import com.yzx.escreen.presenter.ChangeView | import com.yzx.escreen.presenter.ChangeView | ||||
| import com.yzx.escreen.utils.FileUploadCallBack | 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 com.yzx.escreen.widget.BaseDialog | ||||
| import kotlinx.android.synthetic.main.fragment_change.* | import kotlinx.android.synthetic.main.fragment_change.* | ||||
| import kotlinx.android.synthetic.main.layout_loading.view.* | import kotlinx.android.synthetic.main.layout_loading.view.* | ||||
| import org.greenrobot.eventbus.EventBus | import org.greenrobot.eventbus.EventBus | ||||
| import org.greenrobot.eventbus.Subscribe | import org.greenrobot.eventbus.Subscribe | ||||
| import org.greenrobot.eventbus.ThreadMode | 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.ctx | ||||
| import org.jetbrains.anko.support.v4.toast | |||||
| import org.jetbrains.anko.textColor | import org.jetbrains.anko.textColor | ||||
| @@ -63,6 +55,7 @@ class ChangeFragment : BaseFragment<ChangePresenter>(), ChangeView, | |||||
| private var isLoading = false | private var isLoading = false | ||||
| private val mShowList = mutableListOf<StuChange>() | private val mShowList = mutableListOf<StuChange>() | ||||
| private val mShowDialogList = mutableListOf<BaseDialog>() | private val mShowDialogList = mutableListOf<BaseDialog>() | ||||
| private var isRefresh = false | |||||
| private val refreshRun = Runnable { | private val refreshRun = Runnable { | ||||
| refreshData() | refreshData() | ||||
| @@ -155,6 +148,10 @@ class ChangeFragment : BaseFragment<ChangePresenter>(), ChangeView, | |||||
| filterLayout.setOnClickListener { | filterLayout.setOnClickListener { | ||||
| KeyboardUtils.hideSoftInput(keywordInput) | KeyboardUtils.hideSoftInput(keywordInput) | ||||
| } | } | ||||
| btnRefresh.setOnClickListener { | |||||
| isRefresh = true | |||||
| initData() | |||||
| } | |||||
| } | } | ||||
| @@ -169,91 +166,6 @@ class ChangeFragment : BaseFragment<ChangePresenter>(), ChangeView, | |||||
| @SuppressLint("SetTextI18n") | @SuppressLint("SetTextI18n") | ||||
| private fun showLeaveDialog(detail: StuChange) { | private fun showLeaveDialog(detail: StuChange) { | ||||
| EventBus.getDefault().post(detail) | EventBus.getDefault().post(detail) | ||||
| return | |||||
| val adapter = ChangeDialogStepAdapter(mutableListOf()) | |||||
| val dialog = BaseDialog(act, R.style.BaseDialog, R.layout.dialog_change) | |||||
| //处理弹窗显示 | |||||
| dialog.find<TextView>(R.id.leave_student_name).text = detail.status_change_student_name | |||||
| if (detail.face_key.isNotEmpty()) { | |||||
| val img = dialog.find<ImageView>(R.id.face_img) | |||||
| img.setSrc(detail.face_identity, detail.face_key) | |||||
| img.visibility = View.VISIBLE | |||||
| dialog.find<View>(R.id.face_empty).visibility = View.GONE | |||||
| } else { | |||||
| dialog.find<View>(R.id.face_empty).visibility = View.VISIBLE | |||||
| dialog.find<View>(R.id.face_img).visibility = View.GONE | |||||
| } | |||||
| dialog.find<TextView>(R.id.class_name).text = "${detail.grade_name}${detail.class_name}" | |||||
| dialog.find<TextView>(R.id.leave_request_type_name).text = detail.status_change_type_name | |||||
| dialog.find<TextView>(R.id.statusName).text = when (detail.status) { | |||||
| 1 -> "待处理" | |||||
| 2 -> "已确认" | |||||
| 3 -> "已拒绝" | |||||
| else -> "--" | |||||
| } | |||||
| dialog.find<TextView>(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<TextView>(R.id.subStatusName).text = "(${detail.getSubStatusName()})" | |||||
| dialog.find<TextView>(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<TextView>(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<TextView>(R.id.add_time).text = time | |||||
| if (detail.status_change_reason.isNotEmpty()) { | |||||
| dialog.find<View>(R.id.remarkLayout).visibility = View.VISIBLE | |||||
| dialog.find<TextView>(R.id.leave_request_reason).text = detail.status_change_reason | |||||
| } else { | |||||
| dialog.find<View>(R.id.remarkLayout).visibility = View.GONE | |||||
| } | |||||
| dialog.find<ImageView>(R.id.statusImg).setSrc(detail.getStatusImg()) | |||||
| dialog.find<RecyclerView>(R.id.stepRecycler) | |||||
| val recyclerView = dialog.find<RecyclerView>(R.id.stepRecycler) | |||||
| recyclerView.layoutManager = | |||||
| LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false) | |||||
| recyclerView.adapter = adapter | |||||
| adapter.setList(detail.getStep()) | |||||
| dialog.find<View>(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) { | private fun changeStatusBtn(idx: Int) { | ||||
| @@ -361,6 +273,10 @@ class ChangeFragment : BaseFragment<ChangePresenter>(), ChangeView, | |||||
| @SuppressLint("SetTextI18n") | @SuppressLint("SetTextI18n") | ||||
| override fun onListSuccess(list: MutableList<StuChange>, pager: Pager) { | override fun onListSuccess(list: MutableList<StuChange>, pager: Pager) { | ||||
| pageTv?.apply { | pageTv?.apply { | ||||
| if(isRefresh){ | |||||
| toast("刷新成功!") | |||||
| isRefresh = false | |||||
| } | |||||
| mAdapter.setList(list) | mAdapter.setList(list) | ||||
| mPager = pager | mPager = pager | ||||
| pageTv.text = "${pager.page_no} / ${pager.total_pages}" | pageTv.text = "${pager.page_no} / ${pager.total_pages}" | ||||
| @@ -401,6 +317,10 @@ class ChangeFragment : BaseFragment<ChangePresenter>(), ChangeView, | |||||
| override fun onListError(error: String) { | override fun onListError(error: String) { | ||||
| isLoading = false | isLoading = false | ||||
| if(isRefresh){ | |||||
| toast("刷新失败,请重试!") | |||||
| isRefresh = false | |||||
| } | |||||
| showEmpty(3) | showEmpty(3) | ||||
| } | } | ||||
| @@ -14,7 +14,6 @@ import android.widget.EditText | |||||
| import android.widget.ImageView | import android.widget.ImageView | ||||
| import android.widget.TextView | import android.widget.TextView | ||||
| import androidx.recyclerview.widget.LinearLayoutManager | import androidx.recyclerview.widget.LinearLayoutManager | ||||
| import androidx.recyclerview.widget.RecyclerView | |||||
| import com.blankj.utilcode.util.* | import com.blankj.utilcode.util.* | ||||
| import com.huantansheng.easyphotos.EasyPhotos | import com.huantansheng.easyphotos.EasyPhotos | ||||
| import com.huantansheng.easyphotos.models.album.entity.Photo | 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.dialog.QMUITipDialog | ||||
| import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton | import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton | ||||
| import com.yzx.escreen.R | import com.yzx.escreen.R | ||||
| import com.yzx.escreen.adapter.HomeDialogStepAdapter | |||||
| import com.yzx.escreen.adapter.HomeListAdapter | import com.yzx.escreen.adapter.HomeListAdapter | ||||
| import com.yzx.escreen.fragment.base.BaseFragment | import com.yzx.escreen.fragment.base.BaseFragment | ||||
| import com.yzx.escreen.model.* | import com.yzx.escreen.model.* | ||||
| @@ -38,6 +36,7 @@ import org.greenrobot.eventbus.ThreadMode | |||||
| import org.jetbrains.anko.find | import org.jetbrains.anko.find | ||||
| import org.jetbrains.anko.support.v4.act | import org.jetbrains.anko.support.v4.act | ||||
| import org.jetbrains.anko.support.v4.ctx | import org.jetbrains.anko.support.v4.ctx | ||||
| import org.jetbrains.anko.support.v4.toast | |||||
| import org.jetbrains.anko.textColor | import org.jetbrains.anko.textColor | ||||
| @@ -71,7 +70,7 @@ class HomeFragment : BaseFragment<HomePresenter>(), HomeView, | |||||
| private var mDialogVacation: BaseDialog? = null | private var mDialogVacation: BaseDialog? = null | ||||
| private val mVacation = Vacation() | private val mVacation = Vacation() | ||||
| private val mVacationAttachment = Attachment("", "", "") | private val mVacationAttachment = Attachment("", "", "") | ||||
| private var isRefresh = false | |||||
| private val refreshRun = Runnable { | private val refreshRun = Runnable { | ||||
| refreshData() | refreshData() | ||||
| @@ -176,7 +175,10 @@ class HomeFragment : BaseFragment<HomePresenter>(), HomeView, | |||||
| KeyboardUtils.hideSoftInput(keywordInput) | KeyboardUtils.hideSoftInput(keywordInput) | ||||
| } | } | ||||
| btnRefresh.setOnClickListener { | |||||
| isRefresh = true | |||||
| initData() | |||||
| } | |||||
| } | } | ||||
| @SuppressLint("SetTextI18n") | @SuppressLint("SetTextI18n") | ||||
| @@ -264,71 +266,6 @@ class HomeFragment : BaseFragment<HomePresenter>(), HomeView, | |||||
| @SuppressLint("SetTextI18n") | @SuppressLint("SetTextI18n") | ||||
| private fun showLeaveDialog(detail: StuLeave) { | private fun showLeaveDialog(detail: StuLeave) { | ||||
| EventBus.getDefault().post(detail) | EventBus.getDefault().post(detail) | ||||
| return | |||||
| val adapter = HomeDialogStepAdapter(mutableListOf()) | |||||
| val dialog = BaseDialog(act, R.style.BaseDialog, R.layout.dialog_leave) | |||||
| //处理弹窗显示 | |||||
| dialog.find<TextView>(R.id.leave_student_name).text = detail.leave_student_name | |||||
| if (detail.face_key.isNotEmpty()) { | |||||
| val img = dialog.find<ImageView>(R.id.face_img) | |||||
| img.setSrc(detail.face_identity, detail.face_key) | |||||
| img.visibility = View.VISIBLE | |||||
| dialog.find<View>(R.id.face_empty).visibility = View.GONE | |||||
| } else { | |||||
| dialog.find<View>(R.id.face_empty).visibility = View.VISIBLE | |||||
| dialog.find<View>(R.id.face_img).visibility = View.GONE | |||||
| } | |||||
| dialog.find<TextView>(R.id.class_name).text = "${detail.grade_name}${detail.class_name}" | |||||
| dialog.find<TextView>(R.id.leave_request_type_name).text = detail.leave_request_type_name | |||||
| dialog.find<TextView>(R.id.leave_duration_str).text = | |||||
| (detail.end_time - detail.start_time).durationStr() | |||||
| dialog.find<TextView>(R.id.add_time).text = | |||||
| "${detail.start_time.toTime()} - ${detail.end_time.toTime()}" | |||||
| dialog.find<TextView>(R.id.leave_request_reason).text = detail.leave_request_reason | |||||
| dialog.find<ImageView>(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<RecyclerView>(R.id.stepRecycler) | |||||
| val recyclerView = dialog.find<RecyclerView>(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<View>(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) { | private fun changeStatusBtn(idx: Int) { | ||||
| @@ -436,6 +373,10 @@ class HomeFragment : BaseFragment<HomePresenter>(), HomeView, | |||||
| @SuppressLint("SetTextI18n") | @SuppressLint("SetTextI18n") | ||||
| override fun onLeaveListSuccess(list: MutableList<StuLeave>, pager: Pager) { | override fun onLeaveListSuccess(list: MutableList<StuLeave>, pager: Pager) { | ||||
| pageTv?.apply { | pageTv?.apply { | ||||
| if(isRefresh){ | |||||
| toast("刷新成功!") | |||||
| isRefresh = false | |||||
| } | |||||
| mAdapter.setList(list) | mAdapter.setList(list) | ||||
| mPager = pager | mPager = pager | ||||
| pageTv.text = "${pager.page_no} / ${pager.total_pages}" | pageTv.text = "${pager.page_no} / ${pager.total_pages}" | ||||
| @@ -470,6 +411,10 @@ class HomeFragment : BaseFragment<HomePresenter>(), HomeView, | |||||
| override fun onLeaveListError(error: String) { | override fun onLeaveListError(error: String) { | ||||
| isLoading = false | isLoading = false | ||||
| if(isRefresh){ | |||||
| toast("刷新失败,请重试!") | |||||
| isRefresh = false | |||||
| } | |||||
| showEmpty(3) | showEmpty(3) | ||||
| } | } | ||||
| @@ -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<VisitorPresenter>(), VisitorView, | |||||
| NetworkUtils.OnNetworkStatusChangedListener, FileUploadCallBack { | |||||
| companion object { | |||||
| val CAMER_REQUEST_CODE = 0x01 | |||||
| @JvmStatic | |||||
| fun getNewInstance() = | |||||
| VisitorFragment() | |||||
| } | |||||
| private val mAdapter: VisitorListAdapter by lazy { | |||||
| val list = mutableListOf<Visitor>() | |||||
| VisitorListAdapter(list) | |||||
| } | |||||
| private var mPager = Pager() | |||||
| var list = mutableListOf<Visitor>() | |||||
| private val statusBtnList = mutableListOf<QMUIRoundButton>() | |||||
| var keyword: String = "" | |||||
| var status: String = "10" | |||||
| private var isLoading = false | |||||
| private val mShowList = mutableListOf<Visitor>() | |||||
| private val mShowDialogList = mutableListOf<BaseDialog>() | |||||
| 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<Visitor>, 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) | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,7 @@ | |||||
| package com.yzx.escreen.model | |||||
| data class ViewImage( | |||||
| val id: Int = 0, | |||||
| val identity: String = "", | |||||
| val key: String = "" | |||||
| ) | |||||
| @@ -0,0 +1,71 @@ | |||||
| package com.yzx.escreen.model | |||||
| data class Visitor( | |||||
| val add_time: Int = 0, | |||||
| val auditRecordOuts: MutableList<AuditRecordOut> = 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<Any> = 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<AuditRecordOut>{ | |||||
| val list = mutableListOf<AuditRecordOut>() | |||||
| 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) | |||||
| } | |||||
| } | |||||
| @@ -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<VisitorView>(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<YzxResponse<Visitor>>(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<YzxResponse<Visitor>>() { | |||||
| override fun onSuccess(response: Response<YzxResponse<Visitor>>?) { | |||||
| LogUtils.d(response) | |||||
| if (response?.isSuccessful == true) { | |||||
| mView?.onListSuccess(response.body().list, response.body().pager) | |||||
| } | |||||
| } | |||||
| override fun onError(response: Response<YzxResponse<Visitor>>?) { | |||||
| 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<YzxResponse<Visitor>>(url) | |||||
| .tag(this) | |||||
| .params("id", id) | |||||
| .params("user_type", 3) | |||||
| .execute(object : JsonCallBack<YzxResponse<Visitor>>() { | |||||
| override fun onSuccess(response: Response<YzxResponse<Visitor>>?) { | |||||
| LogUtils.d(response) | |||||
| if (response?.isSuccessful == true) { | |||||
| mView?.onDetailSuccess(response.body().data) | |||||
| } | |||||
| } | |||||
| override fun onError(response: Response<YzxResponse<Visitor>>?) { | |||||
| super.onError(response) | |||||
| LogUtils.d(response) | |||||
| mView?.onDetailError(response?.body()?.msg ?: "") | |||||
| } | |||||
| }) | |||||
| } | |||||
| } | |||||
| interface VisitorView : IView { | |||||
| fun onListSuccess(list: MutableList<Visitor>, pager: Pager) | |||||
| fun onListError(error: String) | |||||
| fun onDetailSuccess(detail: Visitor) | |||||
| fun onDetailError(error: String) | |||||
| } | |||||
| @@ -2,7 +2,6 @@ package com.yzx.escreen.utils | |||||
| import android.app.Dialog | import android.app.Dialog | ||||
| import android.view.View | import android.view.View | ||||
| import android.view.WindowManager | |||||
| import android.widget.ImageView | import android.widget.ImageView | ||||
| import com.blankj.utilcode.util.TimeUtils | import com.blankj.utilcode.util.TimeUtils | ||||
| import com.bumptech.glide.Glide | import com.bumptech.glide.Glide | ||||
| @@ -106,6 +105,5 @@ fun SimpleDateFormat.zhCn():SimpleDateFormat{ | |||||
| @@ -14,14 +14,11 @@ import androidx.recyclerview.widget.LinearLayoutManager | |||||
| import androidx.recyclerview.widget.RecyclerView | import androidx.recyclerview.widget.RecyclerView | ||||
| import com.yzx.escreen.R | import com.yzx.escreen.R | ||||
| import com.yzx.escreen.adapter.ChangeDialogStepAdapter | import com.yzx.escreen.adapter.ChangeDialogStepAdapter | ||||
| import com.yzx.escreen.adapter.HomeDialogStepAdapter | |||||
| import com.yzx.escreen.model.StuChange | 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.setSrc | ||||
| import com.yzx.escreen.utils.toDay | 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.find | ||||
| import org.jetbrains.anko.textColor | import org.jetbrains.anko.textColor | ||||
| @@ -68,6 +65,9 @@ class ChangeDialog( | |||||
| find<View>(R.id.face_empty).visibility = View.VISIBLE | find<View>(R.id.face_empty).visibility = View.VISIBLE | ||||
| find<View>(R.id.face_img).visibility = View.GONE | find<View>(R.id.face_img).visibility = View.GONE | ||||
| } | } | ||||
| find<ImageView>(R.id.face_img).setOnClickListener { | |||||
| EventBus.getDefault().post(ViewImage(detail.id,detail.face_identity,detail.face_key)) | |||||
| } | |||||
| find<TextView>(R.id.class_name).text = "${detail.grade_name}${detail.class_name}" | find<TextView>(R.id.class_name).text = "${detail.grade_name}${detail.class_name}" | ||||
| find<TextView>(R.id.leave_request_type_name).text = detail.status_change_type_name | find<TextView>(R.id.leave_request_type_name).text = detail.status_change_type_name | ||||
| find<TextView>(R.id.statusName).text = when (detail.status) { | find<TextView>(R.id.statusName).text = when (detail.status) { | ||||
| @@ -14,10 +14,12 @@ import androidx.recyclerview.widget.RecyclerView | |||||
| import com.yzx.escreen.R | import com.yzx.escreen.R | ||||
| import com.yzx.escreen.adapter.HomeDialogStepAdapter | import com.yzx.escreen.adapter.HomeDialogStepAdapter | ||||
| import com.yzx.escreen.model.StuLeave | import com.yzx.escreen.model.StuLeave | ||||
| import com.yzx.escreen.model.ViewImage | |||||
| import com.yzx.escreen.utils.durationStr | import com.yzx.escreen.utils.durationStr | ||||
| import com.yzx.escreen.utils.setSrc | import com.yzx.escreen.utils.setSrc | ||||
| import com.yzx.escreen.utils.toTime | import com.yzx.escreen.utils.toTime | ||||
| import kotlinx.android.synthetic.main.dialog_leave.view.* | import kotlinx.android.synthetic.main.dialog_leave.view.* | ||||
| import org.greenrobot.eventbus.EventBus | |||||
| import org.jetbrains.anko.find | import org.jetbrains.anko.find | ||||
| /** | /** | ||||
| @@ -62,6 +64,9 @@ class LeaveDialog( | |||||
| find<View>(R.id.face_empty).visibility = View.VISIBLE | find<View>(R.id.face_empty).visibility = View.VISIBLE | ||||
| find<View>(R.id.face_img).visibility = View.GONE | find<View>(R.id.face_img).visibility = View.GONE | ||||
| } | } | ||||
| find<ImageView>(R.id.face_img).setOnClickListener { | |||||
| EventBus.getDefault().post(ViewImage(detail.id,detail.face_identity,detail.face_key)) | |||||
| } | |||||
| find<TextView>(R.id.class_name).text = "${detail.grade_name}${detail.class_name}" | find<TextView>(R.id.class_name).text = "${detail.grade_name}${detail.class_name}" | ||||
| find<TextView>(R.id.leave_request_type_name).text = detail.leave_request_type_name | find<TextView>(R.id.leave_request_type_name).text = detail.leave_request_type_name | ||||
| find<TextView>(R.id.leave_duration_str).text = | find<TextView>(R.id.leave_duration_str).text = | ||||
| @@ -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<ImageView>(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) | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -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<TextView>(R.id.userName).text = "${detail.user_name} ${detail.user_phone}" | |||||
| find<TextView>(R.id.id_card_num).text = "${detail.card_no}" | |||||
| if (detail.face_key.isNotEmpty()) { | |||||
| val img = find<ImageView>(R.id.face_img) | |||||
| img.setSrc(detail.face_identity, detail.face_key) | |||||
| img.visibility = View.VISIBLE | |||||
| find<View>(R.id.face_empty).visibility = View.GONE | |||||
| } else { | |||||
| find<View>(R.id.face_empty).visibility = View.VISIBLE | |||||
| find<View>(R.id.face_img).visibility = View.GONE | |||||
| } | |||||
| find<ImageView>(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<ImageView>(R.id.health_img) | |||||
| img.setSrc(detail.health_code_identity, detail.health_code_key) | |||||
| img.visibility = View.VISIBLE | |||||
| find<View>(R.id.health_empty).visibility = View.GONE | |||||
| } else { | |||||
| find<View>(R.id.health_empty).visibility = View.VISIBLE | |||||
| find<View>(R.id.health_img).visibility = View.GONE | |||||
| } | |||||
| find<ImageView>(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<ImageView>(R.id.trip_img) | |||||
| img.setSrc(detail.trip_code_identity, detail.trip_code_key) | |||||
| img.visibility = View.VISIBLE | |||||
| find<View>(R.id.trip_empty).visibility = View.GONE | |||||
| } else { | |||||
| find<View>(R.id.trip_empty).visibility = View.VISIBLE | |||||
| find<View>(R.id.trip_img).visibility = View.GONE | |||||
| } | |||||
| find<ImageView>(R.id.trip_img).setOnClickListener { | |||||
| EventBus.getDefault().post(ViewImage(detail.id,detail.trip_code_identity,detail.trip_code_key)) | |||||
| } | |||||
| find<TextView>(R.id.reception_user).text = "${detail.reception_user}" | |||||
| find<TextView>(R.id.visit_reason).text = "${detail.visit_reason}" | |||||
| find<TextView>(R.id.is_drive).text = when (detail.is_drive) { | |||||
| 1 -> "是" | |||||
| 0 -> "否" | |||||
| else -> "--" | |||||
| } | |||||
| if(detail.is_drive==1){ | |||||
| find<View>(R.id.carLayout).visibility = View.VISIBLE | |||||
| find<View>(R.id.doorLayout).visibility = View.GONE | |||||
| find<TextView>(R.id.license_plate).text = "${detail.license_plate}" | |||||
| find<TextView>(R.id.car_in_time).text = "${detail.car_in_time.toTime()} - ${detail.car_out_time.toTime()}" | |||||
| }else{ | |||||
| find<View>(R.id.carLayout).visibility = View.GONE | |||||
| find<View>(R.id.doorLayout).visibility = View.VISIBLE | |||||
| find<TextView>(R.id.audit_status_str).text = when (detail.audit_status) { | |||||
| 0 -> "待审核" | |||||
| 1 -> "可通行" | |||||
| 2 -> "审核拒绝" | |||||
| -1 -> "已失效" | |||||
| else -> "--" | |||||
| } | |||||
| find<TextView>(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<TextView>(R.id.start_time).text = "${detail.start_time.toDay()} - ${detail.end_time.toDay()} 可进出${detail.in_out_num}次" | |||||
| } | |||||
| find<ImageView>(R.id.statusImg).setSrc(detail.getStatusImg()) | |||||
| find<RecyclerView>(R.id.stepRecycler) | |||||
| val recyclerView = find<RecyclerView>(R.id.stepRecycler) | |||||
| recyclerView.layoutManager = | |||||
| LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false) | |||||
| recyclerView.adapter = adapter | |||||
| adapter.setList(detail.getStep()) | |||||
| find<View>(R.id.closeBtn).setOnClickListener { | |||||
| onCloseClick(this) | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,16 @@ | |||||
| <?xml version="1.0" encoding="utf-8"?> | |||||
| <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" | |||||
| xmlns:app="http://schemas.android.com/apk/res-auto" | |||||
| xmlns:tools="http://schemas.android.com/tools" | |||||
| android:layout_width="match_parent" | |||||
| android:layout_height="match_parent" | |||||
| android:orientation="vertical"> | |||||
| <com.github.chrisbanes.photoview.PhotoView | |||||
| android:id="@+id/photo_view" | |||||
| android:layout_width="match_parent" | |||||
| android:layout_height="match_parent" | |||||
| android:scaleType="centerInside"/> | |||||
| </FrameLayout> | |||||
| @@ -0,0 +1,378 @@ | |||||
| <?xml version="1.0" encoding="utf-8"?> | |||||
| <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" | |||||
| xmlns:app="http://schemas.android.com/apk/res-auto" | |||||
| xmlns:tools="http://schemas.android.com/tools" | |||||
| android:layout_width="match_parent" | |||||
| android:layout_height="match_parent" | |||||
| android:orientation="vertical"> | |||||
| <com.qmuiteam.qmui.widget.roundwidget.QMUIRoundLinearLayout | |||||
| android:layout_width="match_parent" | |||||
| android:layout_height="wrap_content" | |||||
| android:minWidth="1400dp" | |||||
| android:orientation="vertical" | |||||
| app:qmui_backgroundColor="@color/white" | |||||
| app:qmui_radius="@dimen/d_15"> | |||||
| <com.qmuiteam.qmui.widget.roundwidget.QMUIRoundFrameLayout | |||||
| android:layout_width="match_parent" | |||||
| android:layout_height="wrap_content" | |||||
| app:qmui_backgroundColor="@color/colorPrimary" | |||||
| app:qmui_radiusTopLeft="@dimen/d_15" | |||||
| app:qmui_radiusTopRight="@dimen/d_15"> | |||||
| <TextView | |||||
| android:layout_width="match_parent" | |||||
| android:layout_height="wrap_content" | |||||
| android:gravity="center" | |||||
| android:padding="@dimen/d_28" | |||||
| android:text="访客详情" | |||||
| android:textColor="@color/white" | |||||
| android:textSize="@dimen/sp20" | |||||
| android:textStyle="bold" /> | |||||
| </com.qmuiteam.qmui.widget.roundwidget.QMUIRoundFrameLayout> | |||||
| <androidx.appcompat.widget.LinearLayoutCompat | |||||
| android:layout_width="match_parent" | |||||
| android:layout_height="wrap_content" | |||||
| android:layout_marginTop="@dimen/d_20" | |||||
| android:orientation="horizontal"> | |||||
| <RelativeLayout | |||||
| android:layout_width="0dp" | |||||
| android:layout_height="wrap_content" | |||||
| android:layout_weight="1"> | |||||
| <ImageView | |||||
| android:id="@+id/statusImg" | |||||
| android:layout_width="150dp" | |||||
| android:layout_height="150dp" | |||||
| android:layout_alignParentEnd="true" | |||||
| android:layout_marginEnd="40dp" /> | |||||
| <LinearLayout | |||||
| android:layout_width="match_parent" | |||||
| android:layout_height="wrap_content" | |||||
| android:orientation="vertical"> | |||||
| <LinearLayout style="@style/visitor_dialog_row" | |||||
| android:gravity="center_vertical"> | |||||
| <View | |||||
| android:layout_width="90dp" | |||||
| android:layout_height="@dimen/d_20"/> | |||||
| <View | |||||
| android:layout_width="4dp" | |||||
| android:layout_height="@dimen/d_20" | |||||
| android:background="@color/colorPrimary"/> | |||||
| <TextView | |||||
| style="@style/leave_dialog_title" | |||||
| android:paddingStart="6dp" | |||||
| android:text="访客信息" /> | |||||
| </LinearLayout> | |||||
| <LinearLayout style="@style/visitor_dialog_row"> | |||||
| <TextView | |||||
| style="@style/leave_dialog_title" | |||||
| android:text="姓名电话" /> | |||||
| <TextView | |||||
| android:id="@+id/userName" | |||||
| style="@style/leave_dialog_left_content" | |||||
| android:text="颜小华 18780170404" /> | |||||
| </LinearLayout> | |||||
| <LinearLayout style="@style/visitor_dialog_row"> | |||||
| <TextView | |||||
| style="@style/leave_dialog_title" | |||||
| android:text="身份信息" /> | |||||
| <TextView | |||||
| android:id="@+id/id_card_num" | |||||
| style="@style/leave_dialog_left_content" | |||||
| android:text="颜小华 18780170404" /> | |||||
| </LinearLayout> | |||||
| <LinearLayout style="@style/visitor_dialog_row"> | |||||
| <TextView | |||||
| style="@style/leave_dialog_title" | |||||
| android:layout_width="100dp" | |||||
| android:text="" /> | |||||
| <LinearLayout | |||||
| android:layout_width="wrap_content" | |||||
| android:layout_height="wrap_content" | |||||
| android:orientation="vertical"> | |||||
| <TextView | |||||
| android:layout_width="match_parent" | |||||
| android:layout_height="wrap_content" | |||||
| android:gravity="center" | |||||
| android:text="人脸" | |||||
| android:textSize="@dimen/sp20"/> | |||||
| <com.qmuiteam.qmui.widget.QMUIRadiusImageView | |||||
| android:id="@+id/face_img" | |||||
| android:layout_width="180dp" | |||||
| android:layout_height="222dp" | |||||
| android:text="颜小华" | |||||
| app:qmui_border_color="@color/white" | |||||
| app:qmui_corner_radius="@dimen/d_5" /> | |||||
| <TextView | |||||
| android:id="@+id/face_empty" | |||||
| android:layout_width="180dp" | |||||
| android:layout_height="222dp" | |||||
| android:background="@color/gray_2" | |||||
| android:gravity="center" | |||||
| android:text="未设置" | |||||
| android:textColor="@color/white" | |||||
| app:qmui_corner_radius="@dimen/d_5" | |||||
| android:visibility="gone"/> | |||||
| </LinearLayout> | |||||
| <LinearLayout | |||||
| android:layout_width="wrap_content" | |||||
| android:layout_height="wrap_content" | |||||
| android:orientation="vertical" | |||||
| android:layout_marginStart="@dimen/d_20"> | |||||
| <TextView | |||||
| android:layout_width="match_parent" | |||||
| android:layout_height="wrap_content" | |||||
| android:gravity="center" | |||||
| android:text="健康码" | |||||
| android:textSize="@dimen/sp20"/> | |||||
| <com.qmuiteam.qmui.widget.QMUIRadiusImageView | |||||
| android:id="@+id/health_img" | |||||
| android:layout_width="180dp" | |||||
| android:layout_height="222dp" | |||||
| android:text="颜小华" | |||||
| app:qmui_border_color="@color/white" | |||||
| app:qmui_corner_radius="@dimen/d_5" /> | |||||
| <TextView | |||||
| android:id="@+id/health_empty" | |||||
| android:layout_width="180dp" | |||||
| android:layout_height="222dp" | |||||
| android:background="@color/gray_2" | |||||
| android:gravity="center" | |||||
| android:text="未上传" | |||||
| android:textColor="@color/white" | |||||
| app:qmui_corner_radius="@dimen/d_5" | |||||
| android:visibility="gone"/> | |||||
| </LinearLayout> | |||||
| <LinearLayout | |||||
| android:layout_width="wrap_content" | |||||
| android:layout_height="wrap_content" | |||||
| android:orientation="vertical" | |||||
| android:layout_marginStart="@dimen/d_20"> | |||||
| <TextView | |||||
| android:layout_width="match_parent" | |||||
| android:layout_height="wrap_content" | |||||
| android:gravity="center" | |||||
| android:text="行程码" | |||||
| android:textSize="@dimen/sp20"/> | |||||
| <com.qmuiteam.qmui.widget.QMUIRadiusImageView | |||||
| android:id="@+id/trip_img" | |||||
| android:layout_width="180dp" | |||||
| android:layout_height="222dp" | |||||
| android:text="颜小华" | |||||
| app:qmui_border_color="@color/white" | |||||
| app:qmui_corner_radius="@dimen/d_5" /> | |||||
| <TextView | |||||
| android:id="@+id/trip_empty" | |||||
| android:layout_width="180dp" | |||||
| android:layout_height="222dp" | |||||
| android:background="@color/gray_2" | |||||
| android:gravity="center" | |||||
| android:text="未上传" | |||||
| android:textColor="@color/white" | |||||
| app:qmui_corner_radius="@dimen/d_5" | |||||
| android:visibility="gone"/> | |||||
| </LinearLayout> | |||||
| </LinearLayout> | |||||
| <LinearLayout style="@style/visitor_dialog_row" | |||||
| android:gravity="center_vertical"> | |||||
| <View | |||||
| android:layout_width="90dp" | |||||
| android:layout_height="@dimen/d_20"/> | |||||
| <View | |||||
| android:layout_width="4dp" | |||||
| android:layout_height="@dimen/d_20" | |||||
| android:background="@color/colorPrimary"/> | |||||
| <TextView | |||||
| style="@style/leave_dialog_title" | |||||
| android:paddingStart="6dp" | |||||
| android:text="来访信息" /> | |||||
| </LinearLayout> | |||||
| <LinearLayout style="@style/visitor_dialog_row"> | |||||
| <TextView | |||||
| style="@style/leave_dialog_title" | |||||
| android:text="接待人" /> | |||||
| <TextView | |||||
| android:id="@+id/reception_user" | |||||
| style="@style/leave_dialog_left_content" | |||||
| android:text="颜小华" /> | |||||
| </LinearLayout> | |||||
| <LinearLayout style="@style/visitor_dialog_row"> | |||||
| <TextView | |||||
| style="@style/leave_dialog_title" | |||||
| android:text="是否驾车" /> | |||||
| <TextView | |||||
| android:id="@+id/is_drive" | |||||
| style="@style/leave_dialog_left_content" | |||||
| android:text="颜小华" /> | |||||
| </LinearLayout> | |||||
| <LinearLayout style="@style/visitor_dialog_row"> | |||||
| <TextView | |||||
| style="@style/leave_dialog_title" | |||||
| android:text="来访事宜" /> | |||||
| <TextView | |||||
| android:id="@+id/visit_reason" | |||||
| style="@style/leave_dialog_left_content" | |||||
| android:text="颜小华" /> | |||||
| </LinearLayout> | |||||
| <LinearLayout | |||||
| android:id="@+id/carLayout" | |||||
| android:layout_width="match_parent" | |||||
| android:layout_height="wrap_content" | |||||
| android:orientation="vertical" | |||||
| android:visibility="gone"> | |||||
| <LinearLayout style="@style/visitor_dialog_row" | |||||
| android:gravity="center_vertical"> | |||||
| <View | |||||
| android:layout_width="90dp" | |||||
| android:layout_height="@dimen/d_20"/> | |||||
| <View | |||||
| android:layout_width="4dp" | |||||
| android:layout_height="@dimen/d_20" | |||||
| android:background="@color/colorPrimary"/> | |||||
| <TextView | |||||
| style="@style/leave_dialog_title" | |||||
| android:paddingStart="6dp" | |||||
| android:text="车辆信息" /> | |||||
| </LinearLayout> | |||||
| <LinearLayout style="@style/visitor_dialog_row"> | |||||
| <TextView | |||||
| style="@style/leave_dialog_title" | |||||
| android:text="车牌号" /> | |||||
| <TextView | |||||
| android:id="@+id/license_plate" | |||||
| style="@style/leave_dialog_left_content" | |||||
| android:textColor="@color/colorPrimary" | |||||
| tools:text="2022年4月21日15:38:15" /> | |||||
| </LinearLayout> | |||||
| <LinearLayout style="@style/visitor_dialog_row"> | |||||
| <TextView | |||||
| style="@style/leave_dialog_title" | |||||
| android:text="进出时间" /> | |||||
| <TextView | |||||
| android:id="@+id/car_in_time" | |||||
| style="@style/leave_dialog_left_content" | |||||
| android:textColor="@color/colorPrimary" | |||||
| tools:text="2022年4月21日15:38:15" /> | |||||
| </LinearLayout> | |||||
| </LinearLayout> | |||||
| <LinearLayout | |||||
| android:id="@+id/doorLayout" | |||||
| android:layout_width="match_parent" | |||||
| android:layout_height="wrap_content" | |||||
| android:orientation="vertical" | |||||
| android:visibility="visible"> | |||||
| <LinearLayout style="@style/visitor_dialog_row" | |||||
| android:gravity="center_vertical"> | |||||
| <View | |||||
| android:layout_width="90dp" | |||||
| android:layout_height="@dimen/d_20"/> | |||||
| <View | |||||
| android:layout_width="4dp" | |||||
| android:layout_height="@dimen/d_20" | |||||
| android:background="@color/colorPrimary"/> | |||||
| <TextView | |||||
| style="@style/leave_dialog_title" | |||||
| android:paddingStart="6dp" | |||||
| android:text="进出信息" /> | |||||
| </LinearLayout> | |||||
| <LinearLayout style="@style/visitor_dialog_row"> | |||||
| <TextView | |||||
| style="@style/leave_dialog_title" | |||||
| android:text="门禁状态" /> | |||||
| <TextView | |||||
| android:id="@+id/audit_status_str" | |||||
| style="@style/leave_dialog_left_content" | |||||
| android:textColor="@color/colorPrimary" | |||||
| tools:text="2022年4月21日15:38:15" /> | |||||
| </LinearLayout> | |||||
| <LinearLayout style="@style/visitor_dialog_row"> | |||||
| <TextView | |||||
| style="@style/leave_dialog_title" | |||||
| android:text="可进出时间" /> | |||||
| <TextView | |||||
| android:id="@+id/start_time" | |||||
| style="@style/leave_dialog_left_content" | |||||
| android:textColor="@color/colorPrimary" | |||||
| tools:text="2022年4月21日15:38:15" /> | |||||
| </LinearLayout> | |||||
| </LinearLayout> | |||||
| </LinearLayout> | |||||
| </RelativeLayout> | |||||
| <LinearLayout | |||||
| android:layout_width="0dp" | |||||
| android:layout_height="700dp" | |||||
| android:layout_marginStart="50dp" | |||||
| android:layout_weight="1" | |||||
| android:orientation="vertical" | |||||
| android:paddingTop="@dimen/dp_40"> | |||||
| <androidx.recyclerview.widget.RecyclerView | |||||
| android:id="@+id/stepRecycler" | |||||
| android:layout_width="match_parent" | |||||
| android:layout_height="match_parent" | |||||
| tools:itemCount="4" | |||||
| tools:listitem="@layout/layout_visitor_step" /> | |||||
| </LinearLayout> | |||||
| </androidx.appcompat.widget.LinearLayoutCompat> | |||||
| <com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton | |||||
| android:id="@+id/closeBtn" | |||||
| android:layout_width="300dp" | |||||
| android:layout_height="80dp" | |||||
| android:layout_gravity="center_horizontal" | |||||
| android:layout_marginTop="@dimen/dp_40" | |||||
| android:layout_marginBottom="@dimen/d_20" | |||||
| android:padding="@dimen/d_10" | |||||
| android:text="关闭" | |||||
| android:textColor="@color/black" | |||||
| android:textSize="@dimen/sp20" | |||||
| app:qmui_borderColor="@color/gray" | |||||
| app:qmui_radius="@dimen/d_5" /> | |||||
| </com.qmuiteam.qmui.widget.roundwidget.QMUIRoundLinearLayout> | |||||
| </FrameLayout> | |||||
| @@ -137,7 +137,7 @@ | |||||
| android:layout_gravity="center_vertical" | android:layout_gravity="center_vertical" | ||||
| android:layout_marginStart="@dimen/d_10" | android:layout_marginStart="@dimen/d_10" | ||||
| android:gravity="center" | android:gravity="center" | ||||
| android:text="自动弹出请假单" | |||||
| android:text="自动弹出异动单" | |||||
| android:textColor="#53a051" /> | android:textColor="#53a051" /> | ||||
| </androidx.appcompat.widget.LinearLayoutCompat> | </androidx.appcompat.widget.LinearLayoutCompat> | ||||
| @@ -231,6 +231,15 @@ | |||||
| android:text="共0条数据" | android:text="共0条数据" | ||||
| android:textSize="@dimen/sp18" /> | android:textSize="@dimen/sp18" /> | ||||
| <TextView | |||||
| android:id="@+id/btnRefresh" | |||||
| android:layout_width="wrap_content" | |||||
| android:layout_height="wrap_content" | |||||
| android:textColor="@color/colorPrimary" | |||||
| android:text="刷新数据" | |||||
| android:layout_marginStart="@dimen/d_20" | |||||
| android:textSize="@dimen/sp18"/> | |||||
| <View | <View | ||||
| android:layout_width="0dp" | android:layout_width="0dp" | ||||
| android:layout_height="1px" | android:layout_height="1px" | ||||
| @@ -258,6 +258,15 @@ | |||||
| android:text="共0条数据" | android:text="共0条数据" | ||||
| android:textSize="@dimen/sp18" /> | android:textSize="@dimen/sp18" /> | ||||
| <TextView | |||||
| android:id="@+id/btnRefresh" | |||||
| android:layout_width="wrap_content" | |||||
| android:layout_height="wrap_content" | |||||
| android:textColor="@color/colorPrimary" | |||||
| android:text="刷新数据" | |||||
| android:layout_marginStart="@dimen/d_20" | |||||
| android:textSize="@dimen/sp18"/> | |||||
| <View | <View | ||||
| android:layout_width="0dp" | android:layout_width="0dp" | ||||
| android:layout_height="1px" | android:layout_height="1px" | ||||
| @@ -0,0 +1,290 @@ | |||||
| <?xml version="1.0" encoding="utf-8"?> | |||||
| <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | |||||
| xmlns:app="http://schemas.android.com/apk/res-auto" | |||||
| xmlns:tools="http://schemas.android.com/tools" | |||||
| android:layout_width="match_parent" | |||||
| android:layout_height="match_parent" | |||||
| android:background="@color/backgroundColor" | |||||
| android:orientation="vertical" | |||||
| tools:context=".fragment.ChangeFragment"> | |||||
| <androidx.appcompat.widget.LinearLayoutCompat | |||||
| android:layout_width="match_parent" | |||||
| android:layout_height="wrap_content" | |||||
| android:background="@color/white" | |||||
| android:gravity="center_vertical" | |||||
| android:orientation="horizontal" | |||||
| android:padding="30dp"> | |||||
| <TextView | |||||
| android:layout_width="wrap_content" | |||||
| android:layout_height="wrap_content" | |||||
| android:text="访客管理" | |||||
| android:textColor="@color/black" | |||||
| android:textSize="@dimen/d_28" | |||||
| android:textStyle="bold" /> | |||||
| <View | |||||
| android:layout_width="0dp" | |||||
| android:layout_height="1dp" | |||||
| android:layout_weight="1" /> | |||||
| <com.yzx.escreen.widget.TimeView | |||||
| android:id="@+id/timeView" | |||||
| android:layout_width="wrap_content" | |||||
| android:layout_height="wrap_content"/> | |||||
| </androidx.appcompat.widget.LinearLayoutCompat> | |||||
| <androidx.appcompat.widget.LinearLayoutCompat | |||||
| android:id="@+id/filterLayout" | |||||
| android:layout_width="match_parent" | |||||
| android:layout_height="wrap_content" | |||||
| android:paddingHorizontal="@dimen/dp_40" | |||||
| android:paddingVertical="30dp"> | |||||
| <com.qmuiteam.qmui.widget.roundwidget.QMUIRoundLinearLayout | |||||
| android:layout_width="wrap_content" | |||||
| android:layout_height="wrap_content" | |||||
| android:gravity="center_vertical" | |||||
| android:orientation="horizontal" | |||||
| android:paddingStart="@dimen/d_10" | |||||
| android:paddingEnd="@dimen/dp_10" | |||||
| app:qmui_backgroundColor="@color/white" | |||||
| app:qmui_borderColor="#dcdee0" | |||||
| app:qmui_borderWidth="1px" | |||||
| app:qmui_radius="@dimen/d_30"> | |||||
| <androidx.appcompat.widget.AppCompatImageView | |||||
| android:layout_width="@dimen/d_25" | |||||
| android:layout_height="@dimen/d_25" | |||||
| android:src="@mipmap/search" /> | |||||
| <EditText | |||||
| android:id="@+id/keywordInput" | |||||
| android:layout_width="300dp" | |||||
| android:layout_height="60dp" | |||||
| android:background="@color/transparent" | |||||
| android:hint="输入访客姓名" | |||||
| android:imeOptions="actionSearch" | |||||
| android:maxLength="5" | |||||
| android:padding="@dimen/d_5" | |||||
| android:paddingTop="@dimen/d_5" | |||||
| android:paddingBottom="@dimen/d_5" | |||||
| android:singleLine="true" | |||||
| android:textColorHint="#8e8e8e" | |||||
| android:textSize="@dimen/sp20" /> | |||||
| <androidx.appcompat.widget.AppCompatImageView | |||||
| android:id="@+id/clearBtn" | |||||
| android:layout_width="@dimen/d_25" | |||||
| android:layout_height="@dimen/d_25" | |||||
| android:src="@mipmap/ic_clear" | |||||
| android:visibility="invisible" /> | |||||
| </com.qmuiteam.qmui.widget.roundwidget.QMUIRoundLinearLayout> | |||||
| <com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton | |||||
| android:id="@+id/allBtn" | |||||
| style="@style/home_status_btn" | |||||
| android:layout_marginStart="50dp" | |||||
| android:text="全部" | |||||
| android:textColor="@color/white" | |||||
| app:qmui_backgroundColor="#3ca0e9" | |||||
| app:qmui_borderColor="@color/colorPrimary" /> | |||||
| <com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton | |||||
| android:id="@+id/status1Btn" | |||||
| style="@style/home_status_btn" | |||||
| android:text="待审核" | |||||
| android:textColor="@color/gray_80" | |||||
| app:qmui_backgroundColor="#fff" | |||||
| app:qmui_borderColor="#dcdee0" /> | |||||
| <com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton | |||||
| android:id="@+id/status2Btn" | |||||
| style="@style/home_status_btn" | |||||
| android:text="可通行" | |||||
| android:textColor="@color/gray_80" | |||||
| app:qmui_backgroundColor="#fff" | |||||
| app:qmui_borderColor="#dcdee0" /> | |||||
| <com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton | |||||
| android:id="@+id/status3Btn" | |||||
| style="@style/home_status_btn" | |||||
| android:text="审核拒绝" | |||||
| android:textColor="@color/gray_80" | |||||
| app:qmui_backgroundColor="#fff" | |||||
| app:qmui_borderColor="#dcdee0" /> | |||||
| <com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton | |||||
| android:id="@+id/status4Btn" | |||||
| style="@style/home_status_btn" | |||||
| android:text="已失效" | |||||
| android:textColor="@color/gray_80" | |||||
| app:qmui_backgroundColor="#fff" | |||||
| app:qmui_borderColor="#dcdee0" /> | |||||
| <View | |||||
| android:layout_width="0dp" | |||||
| android:layout_height="1px" | |||||
| android:layout_weight="1" /> | |||||
| <Switch | |||||
| android:id="@+id/switchBtn" | |||||
| android:layout_width="48dp" | |||||
| android:layout_height="@dimen/d_28" | |||||
| android:checked="true" | |||||
| android:thumb="@drawable/switch_ios_thumb" | |||||
| android:track="@drawable/switch_ios_track_selector" | |||||
| tools:ignore="UseSwitchCompatOrMaterialXml" | |||||
| android:visibility="gone"/> | |||||
| <TextView | |||||
| android:id="@+id/switchBtnTxt" | |||||
| android:layout_width="wrap_content" | |||||
| android:layout_height="@dimen/d_28" | |||||
| android:layout_gravity="center_vertical" | |||||
| android:layout_marginStart="@dimen/d_10" | |||||
| android:gravity="center" | |||||
| android:text="自动弹出请假单" | |||||
| android:textColor="#53a051" | |||||
| android:visibility="gone"/> | |||||
| </androidx.appcompat.widget.LinearLayoutCompat> | |||||
| <androidx.appcompat.widget.LinearLayoutCompat | |||||
| android:layout_width="match_parent" | |||||
| android:layout_height="0dp" | |||||
| android:layout_weight="1" | |||||
| android:background="@color/white" | |||||
| android:orientation="vertical" | |||||
| android:paddingStart="@dimen/dp_10" | |||||
| android:paddingEnd="@dimen/dp_10"> | |||||
| <androidx.appcompat.widget.LinearLayoutCompat | |||||
| android:layout_width="match_parent" | |||||
| android:layout_height="wrap_content" | |||||
| android:orientation="horizontal" | |||||
| android:paddingTop="@dimen/d_20" | |||||
| android:paddingBottom="@dimen/d_20"> | |||||
| <TextView | |||||
| style="@style/table_header" | |||||
| android:layout_weight="1.5" | |||||
| android:paddingStart="@dimen/dp_40" | |||||
| android:text="姓名" /> | |||||
| <TextView | |||||
| style="@style/table_header" | |||||
| android:layout_weight="1" | |||||
| android:text="人脸" /> | |||||
| <TextView | |||||
| style="@style/table_header" | |||||
| android:layout_weight="1" | |||||
| android:text="健康码" /> | |||||
| <TextView | |||||
| style="@style/table_header" | |||||
| android:layout_weight="1" | |||||
| android:text="行程码" /> | |||||
| <TextView | |||||
| style="@style/table_header" | |||||
| android:layout_weight="1" | |||||
| android:text="是否驾车" /> | |||||
| <TextView | |||||
| style="@style/table_header" | |||||
| android:layout_weight="1" | |||||
| android:text="接待人" /> | |||||
| <TextView | |||||
| style="@style/table_header" | |||||
| android:layout_weight="1" | |||||
| android:text="状态" /> | |||||
| <TextView | |||||
| style="@style/table_header" | |||||
| android:layout_weight="1" | |||||
| android:text="申请时间" /> | |||||
| </androidx.appcompat.widget.LinearLayoutCompat> | |||||
| <View | |||||
| android:layout_width="match_parent" | |||||
| android:layout_height="1px" | |||||
| android:background="@color/backgroundColor" /> | |||||
| <androidx.recyclerview.widget.RecyclerView | |||||
| android:id="@+id/recyclerView" | |||||
| android:layout_width="match_parent" | |||||
| android:layout_height="0dp" | |||||
| android:layout_weight="1" | |||||
| app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" | |||||
| tools:itemCount="5" | |||||
| tools:listitem="@layout/layout_visitor_table" /> | |||||
| <View | |||||
| android:layout_width="match_parent" | |||||
| android:layout_height="1px" | |||||
| android:background="@color/backgroundColor" /> | |||||
| <androidx.appcompat.widget.LinearLayoutCompat | |||||
| android:layout_width="match_parent" | |||||
| android:layout_height="wrap_content" | |||||
| android:gravity="center_vertical" | |||||
| android:orientation="horizontal" | |||||
| android:paddingHorizontal="@dimen/dp_40" | |||||
| android:paddingVertical="@dimen/d_20"> | |||||
| <TextView | |||||
| android:id="@+id/totalTv" | |||||
| android:layout_width="wrap_content" | |||||
| android:layout_height="wrap_content" | |||||
| android:text="共0条数据" | |||||
| android:textSize="@dimen/sp18" /> | |||||
| <TextView | |||||
| android:id="@+id/btnRefresh" | |||||
| android:layout_width="wrap_content" | |||||
| android:layout_height="wrap_content" | |||||
| android:textColor="@color/colorPrimary" | |||||
| android:text="刷新数据" | |||||
| android:layout_marginStart="@dimen/d_20" | |||||
| android:textSize="@dimen/sp18"/> | |||||
| <View | |||||
| android:layout_width="0dp" | |||||
| android:layout_height="1px" | |||||
| android:layout_weight="1" /> | |||||
| <TextView | |||||
| android:id="@+id/preTxtBtn" | |||||
| android:layout_width="wrap_content" | |||||
| android:layout_height="wrap_content" | |||||
| android:text="上一页" | |||||
| android:textColor="#3ca0e9" | |||||
| android:textSize="@dimen/sp18" /> | |||||
| <TextView | |||||
| android:id="@+id/pageTv" | |||||
| android:layout_width="wrap_content" | |||||
| android:layout_height="wrap_content" | |||||
| android:paddingStart="@dimen/d_20" | |||||
| android:paddingEnd="@dimen/d_20" | |||||
| android:text="0/0" | |||||
| android:textColor="#333" | |||||
| android:textSize="@dimen/sp18" /> | |||||
| <TextView | |||||
| android:id="@+id/nextTxtBtn" | |||||
| android:layout_width="wrap_content" | |||||
| android:layout_height="wrap_content" | |||||
| android:text="下一页" | |||||
| android:textColor="#3ca0e9" | |||||
| android:textSize="@dimen/sp18" /> | |||||
| </androidx.appcompat.widget.LinearLayoutCompat> | |||||
| </androidx.appcompat.widget.LinearLayoutCompat> | |||||
| </LinearLayout> | |||||
| @@ -0,0 +1,74 @@ | |||||
| <?xml version="1.0" encoding="utf-8"?> | |||||
| <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | |||||
| xmlns:app="http://schemas.android.com/apk/res-auto" | |||||
| xmlns:tools="http://schemas.android.com/tools" | |||||
| android:layout_width="match_parent" | |||||
| android:layout_height="wrap_content" | |||||
| android:orientation="horizontal"> | |||||
| <LinearLayout | |||||
| android:layout_width="wrap_content" | |||||
| android:layout_height="match_parent" | |||||
| android:gravity="center_horizontal" | |||||
| android:orientation="vertical"> | |||||
| <View | |||||
| android:id="@+id/line1" | |||||
| android:layout_width="1px" | |||||
| android:layout_height="8dp" | |||||
| android:background="@color/gray_1" /> | |||||
| <com.qmuiteam.qmui.widget.roundwidget.QMUIRoundFrameLayout | |||||
| android:layout_width="@dimen/d_6" | |||||
| android:layout_height="@dimen/d_6" | |||||
| app:qmui_backgroundColor="#3ca0e9" | |||||
| app:qmui_radius="@dimen/d_3" /> | |||||
| <View | |||||
| android:id="@+id/line2" | |||||
| android:layout_width="1px" | |||||
| android:layout_height="0dp" | |||||
| android:layout_weight="1" | |||||
| android:background="@color/gray_1" /> | |||||
| </LinearLayout> | |||||
| <LinearLayout | |||||
| android:id="@+id/contentLayout" | |||||
| android:layout_width="0dp" | |||||
| android:layout_height="match_parent" | |||||
| android:layout_marginStart="@dimen/d_20" | |||||
| android:layout_weight="1" | |||||
| android:orientation="vertical" | |||||
| android:paddingBottom="@dimen/dp_40"> | |||||
| <androidx.appcompat.widget.LinearLayoutCompat | |||||
| android:layout_width="match_parent" | |||||
| android:layout_height="wrap_content" | |||||
| android:orientation="horizontal"> | |||||
| <TextView | |||||
| android:id="@+id/addUserName" | |||||
| android:layout_width="wrap_content" | |||||
| android:layout_height="wrap_content" | |||||
| android:textSize="@dimen/sp20" | |||||
| android:textStyle="bold" | |||||
| tools:text="王大仙" /> | |||||
| </androidx.appcompat.widget.LinearLayoutCompat> | |||||
| <TextView | |||||
| android:id="@+id/approvalComments" | |||||
| android:layout_width="match_parent" | |||||
| android:layout_height="wrap_content" | |||||
| android:layout_marginTop="@dimen/dp_10" | |||||
| android:textSize="@dimen/sp20" | |||||
| tools:text="审批人:颜小华。允许出校,请放行" /> | |||||
| <TextView | |||||
| android:id="@+id/approvalTime" | |||||
| android:layout_width="match_parent" | |||||
| android:layout_height="wrap_content" | |||||
| android:layout_marginTop="@dimen/dp_10" | |||||
| android:textSize="@dimen/sp20" | |||||
| tools:text="审批人:颜小华。允许出校,请放行" /> | |||||
| </LinearLayout> | |||||
| </LinearLayout> | |||||
| @@ -0,0 +1,126 @@ | |||||
| <?xml version="1.0" encoding="utf-8"?> | |||||
| <LinearLayout 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:orientation="vertical"> | |||||
| <androidx.appcompat.widget.LinearLayoutCompat | |||||
| android:layout_width="match_parent" | |||||
| android:layout_height="wrap_content" | |||||
| android:gravity="center_vertical" | |||||
| android:orientation="horizontal" | |||||
| android:paddingTop="@dimen/d_12" | |||||
| android:paddingBottom="@dimen/d_12"> | |||||
| <TextView | |||||
| android:id="@+id/userName" | |||||
| style="@style/table_cell" | |||||
| android:layout_weight="1.5" | |||||
| android:paddingStart="@dimen/dp_40" | |||||
| android:text="请假学生" /> | |||||
| <FrameLayout | |||||
| style="@style/table_cell" | |||||
| android:layout_weight="1"> | |||||
| <com.qmuiteam.qmui.widget.QMUIRadiusImageView | |||||
| android:id="@+id/faceImg" | |||||
| android:layout_width="@dimen/d_70" | |||||
| android:layout_height="@dimen/d_70" | |||||
| app:qmui_border_color="@color/white" | |||||
| app:qmui_corner_radius="@dimen/d_5" /> | |||||
| <com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton | |||||
| android:id="@+id/faceEmpty" | |||||
| android:layout_width="@dimen/d_70" | |||||
| android:layout_height="@dimen/d_70" | |||||
| android:paddingTop="@dimen/d_5" | |||||
| android:paddingBottom="@dimen/d_5" | |||||
| android:text="未设置" | |||||
| android:textColor="@color/white" | |||||
| app:qmui_backgroundColor="#ccc" | |||||
| app:qmui_borderColor="#ccc" | |||||
| app:qmui_radius="@dimen/d_5" /> | |||||
| </FrameLayout> | |||||
| <FrameLayout | |||||
| style="@style/table_cell" | |||||
| android:layout_weight="1"> | |||||
| <com.qmuiteam.qmui.widget.QMUIRadiusImageView | |||||
| android:id="@+id/healthCodeImg" | |||||
| android:layout_width="@dimen/d_70" | |||||
| android:layout_height="@dimen/d_70" | |||||
| app:qmui_border_color="@color/white" | |||||
| app:qmui_corner_radius="@dimen/d_5" /> | |||||
| <com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton | |||||
| android:id="@+id/healthCodeEmpty" | |||||
| android:layout_width="@dimen/d_70" | |||||
| android:layout_height="@dimen/d_70" | |||||
| android:paddingTop="@dimen/d_5" | |||||
| android:paddingBottom="@dimen/d_5" | |||||
| android:text="未上传" | |||||
| android:textColor="@color/white" | |||||
| app:qmui_backgroundColor="#ccc" | |||||
| app:qmui_borderColor="#ccc" | |||||
| app:qmui_radius="@dimen/d_5" /> | |||||
| </FrameLayout> | |||||
| <FrameLayout | |||||
| style="@style/table_cell" | |||||
| android:layout_weight="1"> | |||||
| <com.qmuiteam.qmui.widget.QMUIRadiusImageView | |||||
| android:id="@+id/tripCodeImg" | |||||
| android:layout_width="@dimen/d_70" | |||||
| android:layout_height="@dimen/d_70" | |||||
| app:qmui_border_color="@color/white" | |||||
| app:qmui_corner_radius="@dimen/d_5" /> | |||||
| <com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton | |||||
| android:id="@+id/tripCodeEmpty" | |||||
| android:layout_width="@dimen/d_70" | |||||
| android:layout_height="@dimen/d_70" | |||||
| android:paddingTop="@dimen/d_5" | |||||
| android:paddingBottom="@dimen/d_5" | |||||
| android:text="未上传" | |||||
| android:textColor="@color/white" | |||||
| app:qmui_backgroundColor="#ccc" | |||||
| app:qmui_borderColor="#ccc" | |||||
| app:qmui_radius="@dimen/d_5" /> | |||||
| </FrameLayout> | |||||
| <TextView | |||||
| android:id="@+id/isDrive" | |||||
| style="@style/table_cell" | |||||
| android:layout_weight="1" | |||||
| android:text="是否驾车" /> | |||||
| <TextView | |||||
| android:id="@+id/receptionUser" | |||||
| style="@style/table_cell" | |||||
| android:layout_weight="1" | |||||
| android:text="接待人"/> | |||||
| <TextView | |||||
| android:id="@+id/statusName" | |||||
| style="@style/table_cell" | |||||
| android:layout_weight="1" | |||||
| android:text="状态" /> | |||||
| <TextView | |||||
| android:id="@+id/applyTime" | |||||
| style="@style/table_cell" | |||||
| android:layout_weight="1" | |||||
| android:text="申请时间" /> | |||||
| </androidx.appcompat.widget.LinearLayoutCompat> | |||||
| <View | |||||
| android:id="@+id/bottomLine" | |||||
| android:layout_width="match_parent" | |||||
| android:layout_height="1px" | |||||
| android:background="@color/backgroundColor" /> | |||||
| </LinearLayout> | |||||
| @@ -186,6 +186,10 @@ | |||||
| <item name="android:textSize">@dimen/sp20</item> | <item name="android:textSize">@dimen/sp20</item> | ||||
| </style> | </style> | ||||
| <style name="visitor_dialog_row" parent="leave_dialog_row"> | |||||
| <item name="android:layout_marginTop">@dimen/d_20</item> | |||||
| </style> | |||||
| <style name="my_info_title"> | <style name="my_info_title"> | ||||
| <item name="android:layout_width">200dp</item> | <item name="android:layout_width">200dp</item> | ||||
| <item name="android:layout_height">wrap_content</item> | <item name="android:layout_height">wrap_content</item> | ||||