diff --git a/.idea/misc.xml b/.idea/misc.xml
index 6a960de..1dc7814 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -13,23 +13,28 @@
-
+
+
-
-
+
+
+
+
+
+
diff --git a/app/build.gradle b/app/build.gradle
index 6fe19b3..5096c89 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -8,6 +8,9 @@ apply plugin: 'kotlin-android-extensions'
//apply plugin: 'org.greenrobot.greendao'
+androidExtensions {
+ experimental = true
+}
android {
compileSdkVersion 30
buildToolsVersion "30.0.3"
@@ -16,8 +19,8 @@ android {
// minSdkVersion 26
minSdkVersion 21
targetSdkVersion 25
- versionCode 9
- versionName "2.0.7"
+ versionCode 10
+ versionName "2.0.8"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
// ndk {
@@ -187,4 +190,6 @@ dependencies {
api 'com.tencent.tbs:tbssdk:44181'
implementation 'com.github.HuanTanSheng:EasyPhotos:3.1.5'
+
+ implementation("org.greenrobot:eventbus:3.3.1")
}
diff --git a/app/src/main/java/com/yzx/escreen/MainActivity.kt b/app/src/main/java/com/yzx/escreen/MainActivity.kt
index a1dc9ce..0355f61 100644
--- a/app/src/main/java/com/yzx/escreen/MainActivity.kt
+++ b/app/src/main/java/com/yzx/escreen/MainActivity.kt
@@ -4,12 +4,15 @@ import android.annotation.SuppressLint
import android.app.Dialog
import android.content.Context
import android.content.Intent
-import android.text.InputType
+import android.os.Handler
+import android.os.Looper
import android.util.Log
import android.view.KeyEvent
import android.view.View
+import android.view.ViewGroup
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
+import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.widget.ContentLoadingProgressBar
import androidx.fragment.app.Fragment
import androidx.viewpager2.adapter.FragmentStateAdapter
@@ -30,33 +33,41 @@ import com.qmuiteam.qmui.widget.dialog.QMUIDialog
import com.yzx.escreen.activity.WebActivity
import com.yzx.escreen.activity.base.BaseActivity
import com.yzx.escreen.config.Config
+import com.yzx.escreen.config.RefreshToken
+import com.yzx.escreen.fragment.ChangeFragment
import com.yzx.escreen.fragment.HomeFragment
import com.yzx.escreen.fragment.MyFragment
-import com.yzx.escreen.model.BaseBean
-import com.yzx.escreen.model.TabEntity
-import com.yzx.escreen.model.User
-import com.yzx.escreen.model.Version
-import com.yzx.escreen.presenter.base.BasePresenter
+import com.yzx.escreen.model.*
+import com.yzx.escreen.presenter.MainPresenter
+import com.yzx.escreen.presenter.MainView
+import com.yzx.escreen.presenter.base.JsonCallBack
+import com.yzx.escreen.presenter.base.YzxResponse
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.webebook.config.YzxInterface
import kotlinx.android.synthetic.main.activity_main.*
+import org.greenrobot.eventbus.EventBus
+import org.greenrobot.eventbus.Subscribe
+import org.greenrobot.eventbus.ThreadMode
import org.jetbrains.anko.find
import org.jetbrains.anko.toast
import java.util.*
-import kotlin.system.exitProcess
/**
* Yun.Lei
* 2020年5月6日14:49:10
*/
-class MainActivity : BaseActivity>(), NetworkUtils.OnNetworkStatusChangedListener {
+class MainActivity : BaseActivity(), NetworkUtils.OnNetworkStatusChangedListener,
+ MainView {
override val inflateId: Int
get() = R.layout.activity_main
- var netLoadingDialog:QMUIDialog? = null
- var netErrorDialog:QMUIDialog? = null
+ var netLoadingDialog: QMUIDialog? = null
+ var netErrorDialog: QMUIDialog? = null
private val netLoadingRun = Runnable {
netLoadingDialog?.apply {
dismiss()
@@ -64,23 +75,56 @@ class MainActivity : BaseActivity>(), NetworkUtils.OnNetworkSta
showNetworkError()
}
- override fun initView() {
+ private val mHandler = Handler(Looper.getMainLooper())
+ private val runnable = object : Runnable {
+ override fun run() {
+ mPresenter?.getLeaveShowIds()
+ mHandler.postDelayed(this, 2000)
+ }
+ }
+
+ private val mTimeHandler = Handler(Looper.getMainLooper())
+ private val timeRunnable = object : Runnable {
+ override fun run() {
+ EventBus.getDefault().post(TimeShow().getNowObj())
+ mTimeHandler.postDelayed(this, 1000)
+ }
+ }
+
+ private val dialogList = mutableListOf()
- if(NetworkUtils.isConnected()){
- if (!User.isLogin()) {
+ override fun initView() {
+ if (NetworkUtils.isConnected()) {
+ if (!User.isLogin() && User.getUser().token.isEmpty()) {
WebActivity.active(this, "${Config.OA_URL}/login")
finish()
}
- checkVersion()
- }else{
+ if(!User.isLogin()){
+ RefreshToken.refresh(object :RefreshToken.RefreshCallback{
+ override fun onSuccess() {
+ checkVersion()
+ checkAuto()
+ }
+ })
+ }else{
+ checkVersion()
+ checkAuto()
+ RefreshToken.refresh(object :RefreshToken.RefreshCallback{
+ override fun onSuccess() {
+ }
+ })
+ }
+ } else {
showNetworkLoading() //显示网络检查中
}
val tabData = arrayListOf()
- tabData.add(TabEntity("首页", R.mipmap.home_select, R.mipmap.home_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.my_select, R.mipmap.my_unselect))
tabLayout.setTabData(tabData)
viewPager2.adapter = HomePagerAdapter(this)
+ viewPager2.offscreenPageLimit = 2
viewPager2.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
super.onPageSelected(position)
@@ -89,14 +133,85 @@ class MainActivity : BaseActivity>(), NetworkUtils.OnNetworkSta
})
tabLayout.setOnTabSelectListener(object : OnTabSelectListener {
override fun onTabSelect(position: Int) {
- viewPager2.currentItem = position
- KeyboardUtils.hideSoftInput( viewPager2)
+// viewPager2.currentItem = position
+ viewPager2.setCurrentItem(position,false)
+ KeyboardUtils.hideSoftInput(viewPager2)
}
override fun onTabReselect(position: Int) {
}
})
+
+ mTimeHandler.post(timeRunnable)
+ }
+
+ private fun checkAuto() {
+ val isAutoShowLeave = SPUtils.getInstance().getBoolean("auto_show_leave", false)
+ val isAutoShowChange = SPUtils.getInstance().getBoolean("auto_show_change", false)
+ if (isAutoShowLeave || isAutoShowChange) {
+ mHandler.postDelayed(runnable, 2000)
+ } else {
+ mHandler.removeCallbacks(runnable)
+ }
+ }
+
+ //接收消息
+ @Subscribe(threadMode = ThreadMode.MAIN)
+ fun onMessageEvent(event: AutoSwitchChange) {
+ checkAuto()
+ }
+
+ //接收请假消息
+ @Subscribe(threadMode = ThreadMode.MAIN)
+ fun onMessageEvent(detail: StuLeave) {
+ removeOld(detail.id,0)
+ val dialog = LeaveDialog(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,0)
+ dialog.onCloseClick = {
+ dialogLayout.removeView(it)
+ dialogList.remove(it)
+ }
+ dialogLayout.addView(dialog)
+ dialogList.add(dialog)
+ }
+
+ //接收异动消息
+ @Subscribe(threadMode = ThreadMode.MAIN)
+ fun onMessageEvent(detail: StuChange) {
+ removeOld(detail.id,1)
+ val dialog = ChangeDialog(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,1)
+ dialog.onCloseClick = {
+ dialogLayout.removeView(it)
+ dialogList.remove(it)
+ }
+ dialogLayout.addView(dialog,0) //请假权限更高,异动插入到最底层
+ dialogList.add(dialog)
+ }
+
+ private fun removeOld(id:Int, type:Int){
+ val view = dialogList.find {
+ val tagId: Int = it.getTag(R.id.tag_dialog_name) as Int
+ val tagType: Int = it.getTag(R.id.tag_dialog_type) as Int
+ return@find id == tagId && type == tagType
+ }
+ view?.apply {
+ dialogList.remove(this)
+ dialogLayout.removeView(this)
+ }
}
override fun initData() {
@@ -121,39 +236,38 @@ class MainActivity : BaseActivity>(), NetworkUtils.OnNetworkSta
}
- private fun showNetworkError(){
- if(!NetworkUtils.isConnected()){ //无网提示
+ private fun showNetworkError() {
+ if (!NetworkUtils.isConnected()) { //无网提示
val builder = QMUIDialog.MessageDialogBuilder(this)
builder.setMessage("你还没有连接网络,请先连接网络!")
.setTitle("温馨提示")
- .addAction("去设置"
+ .addAction(
+ "去设置"
) { dialog, index ->
NetworkUtils.openWirelessSettings()
}
.setCancelable(false)
.setCanceledOnTouchOutside(false)
- netErrorDialog = builder.show()
+ netErrorDialog = builder.show()
netErrorDialog?.hideNavigationBar()
}
}
- private fun showNetworkLoading(){
+ private fun showNetworkLoading() {
val builder = QMUIDialog.MessageDialogBuilder(this)
builder.setMessage("网络检查中,请稍后...")
.setTitle("温馨提示")
.setCancelable(false)
.setCanceledOnTouchOutside(false)
- netLoadingDialog = builder.show()
+ netLoadingDialog = builder.show()
netLoadingDialog?.hideNavigationBar()
- viewPager2.postDelayed(netLoadingRun,5000)
+ viewPager2.postDelayed(netLoadingRun, 5000)
}
- override fun initPresenter(): BasePresenter<*>? {
- return null
- }
+ override fun initPresenter(): MainPresenter = MainPresenter(this)
@SuppressLint("SetTextI18n")
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
@@ -177,12 +291,12 @@ class MainActivity : BaseActivity>(), NetworkUtils.OnNetworkSta
override fun onConnected(networkType: NetworkUtils.NetworkType?) {
netLoadingDialog?.apply {
- if(isShowing){
+ if (isShowing) {
dismiss()
}
}
netErrorDialog?.apply {
- if(isShowing){
+ if (isShowing) {
dismiss()
}
}
@@ -192,13 +306,14 @@ class MainActivity : BaseActivity>(), NetworkUtils.OnNetworkSta
finish()
}
checkVersion()
+ checkAuto()
}
private fun checkVersion(userCheck: Boolean = false): Unit {
val BASE_URL = Config.BASE_URL
OkGo.post("$BASE_URL/parent/common/getInkBottleMaxVersion")
.tag(this)
- .params("app_id",Config.APP_ID)
+ .params("app_id", Config.APP_ID)
.execute(object : StringCallback() {
override fun onSuccess(response: Response) {
@@ -294,10 +409,39 @@ class MainActivity : BaseActivity>(), NetworkUtils.OnNetworkSta
})
.executeMission(this)
}
+
+ override fun onLeaveIDsSuccess(list: MutableList) {
+ val listLeave = list.filter { it.type == 0 }.toMutableList()
+ val listChange = list.filter { it.type == 1 }.toMutableList()
+ var type =0
+ if(listLeave.isNotEmpty()){
+ viewPager2.currentItem = 0
+ type =0
+ }else if(listChange.isNotEmpty()){
+ viewPager2.currentItem = 1
+ type =1
+ }
+ if(list.isNotEmpty()){
+ viewPager2.postDelayed({
+ EventBus.getDefault().post(MessageEventAuto(list,type))
+ },500)
+ }
+ }
+
+ override fun onStart() {
+ super.onStart()
+ EventBus.getDefault().register(this)
+ }
+
+ override fun onStop() {
+ mHandler.removeCallbacks(runnable)
+ super.onStop()
+ EventBus.getDefault().unregister(this)
+ }
}
class HomePagerAdapter(act: AppCompatActivity) : FragmentStateAdapter(act) {
- override fun getItemCount(): Int = 2
+ override fun getItemCount(): Int = 3
override fun createFragment(position: Int): Fragment {
when (position) {
@@ -305,6 +449,9 @@ class HomePagerAdapter(act: AppCompatActivity) : FragmentStateAdapter(act) {
return HomeFragment.getNewInstance()
}
1 -> {
+ return ChangeFragment.getNewInstance()
+ }
+ 2 -> {
return MyFragment.getNewInstance()
}
}
diff --git a/app/src/main/java/com/yzx/escreen/activity/WebActivity.kt b/app/src/main/java/com/yzx/escreen/activity/WebActivity.kt
index 10c7b45..5b86c8b 100644
--- a/app/src/main/java/com/yzx/escreen/activity/WebActivity.kt
+++ b/app/src/main/java/com/yzx/escreen/activity/WebActivity.kt
@@ -398,6 +398,7 @@ class YzxJavascriptInterface(var ctx: Activity) {
@JavascriptInterface
fun toHome() {
ctx.startActivity()
+ ctx.finish()
}
@JavascriptInterface
diff --git a/app/src/main/java/com/yzx/escreen/activity/base/BaseActivity.kt b/app/src/main/java/com/yzx/escreen/activity/base/BaseActivity.kt
index a1d6184..0e23f6a 100644
--- a/app/src/main/java/com/yzx/escreen/activity/base/BaseActivity.kt
+++ b/app/src/main/java/com/yzx/escreen/activity/base/BaseActivity.kt
@@ -4,6 +4,7 @@ import android.os.Bundle
import android.view.View
import android.view.WindowManager
import androidx.appcompat.app.AppCompatActivity
+import com.blankj.utilcode.util.BarUtils
import com.gyf.immersionbar.ktx.immersionBar
import com.yzx.escreen.R
import com.yzx.escreen.presenter.base.BasePresenter
@@ -44,6 +45,8 @@ abstract class BaseActivity> : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
hideBottomUIMenu()
+ window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN
+ actionBar?.hide()
setContentView(inflateId)
initView()
initData()
@@ -52,13 +55,13 @@ abstract class BaseActivity> : AppCompatActivity() {
}
open fun setStatusBar() {
- immersionBar {
- statusBarColor(R.color.white)
- fitsSystemWindows(true)
- statusBarDarkFont(true, 0.2f)
- keyboardEnable(true)
- init()
- }
+// immersionBar {
+// statusBarColor(R.color.white)
+// fitsSystemWindows(false)
+// statusBarDarkFont(true, 0.2f)
+// keyboardEnable(true)
+// init()
+// }
}
@@ -67,15 +70,6 @@ abstract class BaseActivity> : AppCompatActivity() {
params.systemUiVisibility =
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_IMMERSIVE
window.attributes = params
-
-// window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
-// window.decorView.setOnSystemUiVisibilityChangeListener {
-// val uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
-// View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or
-// View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or
-// View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
-// window.decorView.systemUiVisibility = uiOptions
-// }
}
diff --git a/app/src/main/java/com/yzx/escreen/adapter/ChangeDialogStepAdapter.kt b/app/src/main/java/com/yzx/escreen/adapter/ChangeDialogStepAdapter.kt
new file mode 100644
index 0000000..a513872
--- /dev/null
+++ b/app/src/main/java/com/yzx/escreen/adapter/ChangeDialogStepAdapter.kt
@@ -0,0 +1,94 @@
+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.ChangeActivity
+import com.yzx.escreen.utils.setSrc
+import com.yzx.escreen.utils.toTime
+import kotlinx.android.synthetic.main.layout_leave_step.view.*
+import org.jetbrains.anko.dip
+
+class ChangeDialogStepAdapter(list: MutableList) :
+ BaseQuickAdapter(R.layout.layout_leave_step, list) {
+
+ @SuppressLint("SetTextI18n")
+ override fun convert(holder: BaseViewHolder, item: ChangeActivity) {
+ holder.itemView.inImg.visibility = View.GONE
+ holder.itemView.visibility = View.VISIBLE
+ holder.itemView.addUserTypeName.visibility = View.GONE
+ holder.itemView.activityName.visibility = View.GONE
+ holder.itemView.addUserName.visibility = View.VISIBLE
+ when (item.is_approve) {
+ 0 -> {
+
+ holder.itemView.addUserTypeName.visibility = View.GONE
+ holder.itemView.addUserName.text = "${item.add_user_name}发起异动申请${
+ if (item.is_auto_pass == 1) {
+ "(直接通过)"
+ } else {
+ ""
+ }
+ }"
+ holder.itemView.approvalComments.visibility = View.GONE
+ }
+ 1 -> {
+ holder.itemView.addUserName.text = "班主任审批"
+ holder.itemView.statusName.text = when (item.approval_status) {
+ 0,1 -> "(待审批)"
+ 2 -> "(通过)"
+ 3 -> "(拒绝)"
+ else -> ""
+ }
+ holder.itemView.statusName.setTextColor(when (item.approval_status) {
+ 0,1 -> Color.parseColor("#3c7ef6")
+ 2 -> Color.parseColor("#07c160")
+ 3 -> Color.parseColor("#ff4040")
+ else -> 0
+ })
+ holder.itemView.approvalComments.visibility = View.VISIBLE
+ var str = "审批人:${item.add_user_name}"
+ if (item.approval_comments.isNotEmpty()) {
+ str += "。${item.approval_comments}"
+ }
+ holder.itemView.approvalComments.text = str
+ }
+ 2->{
+ holder.itemView.addUserName.text = "提前结束"
+ holder.itemView.approvalComments.visibility = View.VISIBLE
+ var str = "操作人:${item.add_user_name}"
+ if (item.approval_comments.isNotEmpty()) {
+ str += "。${item.approval_comments}"
+ }
+ holder.itemView.approvalComments.text = str
+ }
+ else -> {
+ holder.itemView.visibility = View.GONE
+ }
+ }
+
+ holder.itemView.signImg.visibility = if(item.sign_key?.isNotEmpty() == true){
+ holder.itemView.signImg.setSrc(item.sign_identity,item.sign_key)
+ View.VISIBLE
+ }else{
+ View.GONE
+ }
+
+ holder.itemView.stepTime.text = item.add_time.toTime()
+
+ if (holder.adapterPosition == 0) {
+ holder.itemView.line1.setBackgroundResource(R.color.transparent)
+ } else {
+ holder.itemView.line1.setBackgroundResource(R.color.gray_1)
+ }
+
+ if (holder.adapterPosition == data.size - 1) {
+ holder.itemView.contentLayout.setPadding(0, 0, 0, 0)
+ } else {
+ holder.itemView.contentLayout.setPadding(0, 0, 0, holder.itemView.contentLayout.dip(20))
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/yzx/escreen/adapter/ChangeListAdapter.kt b/app/src/main/java/com/yzx/escreen/adapter/ChangeListAdapter.kt
new file mode 100644
index 0000000..b5cd395
--- /dev/null
+++ b/app/src/main/java/com/yzx/escreen/adapter/ChangeListAdapter.kt
@@ -0,0 +1,80 @@
+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.StuChange
+import com.yzx.escreen.utils.setSrc
+import com.yzx.escreen.utils.toDay
+import com.yzx.escreen.utils.toTime
+import kotlinx.android.synthetic.main.layout_change_table.view.*
+import org.jetbrains.anko.textColor
+
+class ChangeListAdapter(list: MutableList) :
+ BaseQuickAdapter(R.layout.layout_change_table, list) {
+
+ init {
+ addChildClickViewIds(R.id.cancelBtn)
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun convert(holder: BaseViewHolder, item: StuChange) {
+ holder.itemView.studentName.text = item.status_change_student_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)
+ }
+ holder.itemView.className.text = "${item.grade_name}${item.class_name}"
+ holder.itemView.typeName.text = item.status_change_type_name
+
+ var time = "--"
+ if (item.start_time > 0) {
+ time = item.start_time.toDay()
+ }
+ if (item.end_time > 0) {
+ time = "$time -- ${item.end_time.toDay()}"
+ }
+ holder.itemView.leaveTime.text = time
+
+ holder.itemView.statusName.text = when (item.status) {
+ 1 -> "待处理"
+ 2 -> "已确认"
+ 3 -> "已拒绝"
+ else -> "--"
+ }
+ holder.itemView.statusName.textColor = when (item.status) {
+ 1 -> Color.parseColor("#333333")
+ 2 -> Color.parseColor("#3c7ef6")
+ 3 -> Color.parseColor("#ff4040")
+ 4 -> Color.parseColor("#3c7ef6")
+ 5 -> Color.parseColor("#ff4040")
+ else -> Color.parseColor("#333333")
+ }
+ if (item.getSubStatusName().isNotEmpty()) {
+ holder.itemView.subStatusName.text = "(${item.getSubStatusName()})"
+ holder.itemView.subStatusName.textColor = when (item.sub_status) {
+ 0, 2 -> Color.parseColor("#ff4040")
+ 1, 3 -> Color.parseColor("#07c160")
+ else -> Color.parseColor("#333333")
+ }
+ } else {
+ holder.itemView.subStatusName.text = ""
+ }
+
+ holder.itemView.applyTime.text = item.add_time.toTime()
+
+ holder.itemView.bottomLine.visibility = if (holder.adapterPosition == data.size - 1) {
+ View.GONE
+ } else {
+ View.VISIBLE
+ }
+ holder.itemView.addUser.text = item.add_user_name
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/yzx/escreen/config/Config.kt b/app/src/main/java/com/yzx/escreen/config/Config.kt
index 495ec40..01a2308 100644
--- a/app/src/main/java/com/yzx/escreen/config/Config.kt
+++ b/app/src/main/java/com/yzx/escreen/config/Config.kt
@@ -1,6 +1,7 @@
package com.yzx.escreen.config
import com.yzx.escreen.BuildConfig
+import com.yzx.escreen.model.StuChangeType
object Config {
var BASE_URL = BuildConfig.BASE_URL
@@ -8,4 +9,29 @@ object Config {
var M_URL = BuildConfig.M_URL
var OA_URL = BuildConfig.OA_URL
val APP_ID = 602
+
+
+ const val STU_CHANGE_STATUS_DROP_OUT = 42001
+ const val STU_CHANGE_STATUS_LEAVE_SCHOOL = 42002
+ const val STU_CHANGE_STATUS_RETURN_SCHOOL = 42003
+ const val STU_CHANGE_STATUS_OUT_SCHOOL = 42004
+ const val STU_CHANGE_STATUS_TRANSFER_SCHOOL = 42005
+ const val STU_CHANGE_STATUS_REPEAT = 42006
+ const val STU_CHANGE_STATUS_DOWNGRADE = 42007
+ const val STU_CHANGE_STATUS_TRANSFER_OUT = 42008
+ const val STU_CHANGE_STATUS_INTROSPECTION = 42009
+ const val STU_CHANGE_STATUS_INTERNSHIP = 42010
+
+ val STU_CHANGE_STATUS_LIST = mutableListOf(
+ StuChangeType(STU_CHANGE_STATUS_DROP_OUT,"辍学",""),
+ StuChangeType(STU_CHANGE_STATUS_LEAVE_SCHOOL,"休学",""),
+ StuChangeType(STU_CHANGE_STATUS_RETURN_SCHOOL,"复学",""),
+ StuChangeType(STU_CHANGE_STATUS_OUT_SCHOOL,"退学",""),
+ StuChangeType(STU_CHANGE_STATUS_TRANSFER_SCHOOL,"转学",""),
+ StuChangeType(STU_CHANGE_STATUS_REPEAT,"留级",""),
+ StuChangeType(STU_CHANGE_STATUS_TRANSFER_OUT,"转出",""),
+ StuChangeType(STU_CHANGE_STATUS_DOWNGRADE,"降级",""),
+ StuChangeType(STU_CHANGE_STATUS_INTROSPECTION,"回家反省","反省"),
+ StuChangeType(STU_CHANGE_STATUS_INTERNSHIP,"实习","反省")
+ )
}
\ No newline at end of file
diff --git a/app/src/main/java/com/yzx/escreen/config/RefreshToken.kt b/app/src/main/java/com/yzx/escreen/config/RefreshToken.kt
new file mode 100644
index 0000000..d581f7a
--- /dev/null
+++ b/app/src/main/java/com/yzx/escreen/config/RefreshToken.kt
@@ -0,0 +1,53 @@
+package com.yzx.escreen.config
+
+import com.blankj.utilcode.util.LogUtils
+import com.lzy.okgo.OkGo
+import com.lzy.okgo.model.Response
+import com.yzx.escreen.model.ReToken
+import com.yzx.escreen.model.RefreshTokenEvent
+import com.yzx.escreen.model.User
+import com.yzx.escreen.presenter.base.JsonCallBack
+import com.yzx.escreen.presenter.base.YzxResponse
+import com.yzx.webebook.config.YzxInterface
+import org.greenrobot.eventbus.EventBus
+import java.util.*
+
+object RefreshToken {
+ fun refresh(callBack:RefreshCallback) {
+ val user = User.getUser()
+ val lastLoginTime = user.loginTime
+ val currTime = Date().time
+ if (currTime - lastLoginTime > 12L * 60 * 60 * 1000 && currTime - lastLoginTime < 365L * 24 * 60 * 60 * 1000) {
+ if (user.user_id > 0) {
+ val url = Config.BASE_URL + YzxInterface.INTERFACE_REFRESH_TOKEN
+ OkGo.post>(url)
+ .tag(this)
+ .params("old_token", User.getUser().token)
+ .params("type", 1)
+ .params("source", "201")
+ .execute(object : JsonCallBack>() {
+ override fun onSuccess(response: Response>?) {
+ LogUtils.d(response)
+ val token = response?.body()?.data?.token ?: ""
+ if (token.isNotBlank()) {
+ user.token = token
+ user.loginTime = Date().time
+ user.save()
+ callBack.onSuccess()
+ EventBus.getDefault().post(RefreshTokenEvent(token))
+ }
+ }
+
+ override fun onError(response: Response>?) {
+ super.onError(response)
+ LogUtils.d(response)
+ }
+ })
+ }
+ }
+ }
+
+ interface RefreshCallback{
+ fun onSuccess()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/yzx/escreen/config/YzxInterface.kt b/app/src/main/java/com/yzx/escreen/config/YzxInterface.kt
index 0c22c9c..6dc67c0 100644
--- a/app/src/main/java/com/yzx/escreen/config/YzxInterface.kt
+++ b/app/src/main/java/com/yzx/escreen/config/YzxInterface.kt
@@ -5,48 +5,19 @@ object YzxInterface {
const val FILE_UPLOAD_URL = "https://fileupload.oa.qbjjyyun.net/edufile/fileUpload"
const val INTERFACE_REFRESH_TOKEN = "/login/user2/refreshToken"// 刷新token
- const val INTERFACE_GET_HOMEWORK_LIST = "/parent/weixin/getwxHomeworksByme"//获取家庭作业列表
-
- const val INTERFACE_EBOOK_NOTEBOOK_GET_LIST = "/parent/notebook/getMyNotebookList"//获取笔记本列表
- const val INTERFACE_EBOOK_NOTEBOOK_RESET_NAME = "/parent/notebook/renameMyNotebook"//重命名笔记本
- const val INTERFACE_EBOOK_NOTEBOOK_DEL_NOTEBOOK = "/parent/notebook/deleteMyNotebook"//删除笔记本
- const val INTERFACE_EBOOK_NOTEBOOK_INSET_NOTEBOOK = "/parent/notebook/createMyNotebook"//新建笔记本
- const val INTERFACE_EBOOK_NOTEBOOK_UPDATE_NOTEBOOK = "/parent/notebook/updateMyNotebook"//编辑笔记本
- const val INTERFACE_EBOOK_NOTEBOOK_TAG_LIST = "/parent/notebook/getNoteTagList"//笔记标签
- const val INTERFACE_EBOOK_NOTEBOOK_TAG_ADD = "/parent/notebook/insertNoteTag"//添加笔记标签
-
- const val INTERFACE_PREPARE_TEAM_COMMENT = "/parent/teacherPrePareLesson/getCommentDetailsByTeamId"
- const val INTERFACE_PREPARE_TEAM_INPUT = "/parent/teacherPrePareLesson/inputContent"
- const val INTERFACE_PREPARE_STU_RUSH = "/parent/teacherPrePareLesson/studentRush"
- const val INTERFACE_PREPARE_RECORD_LIST = "/parent/teacherPrePareLesson/getInteractiveRecordList"
- const val INTERFACE_PREPARE_MY_TEAMS = "/parent/teacherPrePareLesson/getMyTeams"
- const val INTERFACE_PREPARE_MY_NEW_TEAM = "/parent/teacherPrePareLesson/getMyNewTeam"
-
-
- const val INTERFACE_EXERCISES_LIST = "/parent/teacherPrePareLesson/issueExercisesListByStudent" // 练习题列表
- const val INTERFACE_QUESTION_GET_RESOURCE_CATEGORY_LIST= "/parent/questionBank/getResourceCategoryAllListBySuperId"//获取公共资源层级
- const val INTERFACE_QUESTION_REAL_GRADE= "/parent/common/getGradesByPeriodType"//根据学段(type:1小学,2初中,3高中 resource_category_id)获取对应年级接口
- const val INTERFACE_QUESTION_GET_INFO = "/parent/studentAfterClassPractice/getQuestionBankById"//获取试题信息
- const val INTERFACE_QUESTION_GET_LAST_PRACTICE = "/parent/studentAfterClassPractice/getLastPractice"//获取上次练习到第几题
- const val INTERFACE_QUESTION_GET_PRACTICE_CURR_NUM = "/parent/studentAfterClassPractice/getPracticeCurrNum"//获取当前练习次数
- const val INTERFACE_QUESTION_GET_PRACTICE_BY_TYPE = "/parent/studentAfterClassPractice/getCurrPracticeCorrectRate"//获取本次练习的正确率
- const val INTERFACE_QUESTION_POST_PRACTICE = "/parent/studentAfterClassPractice/insertStudentAfterClassPractice"//插入一条学生课后练习题
- const val INTERFACE_QUESTION_GET_PRACTICE_IDS = "/parent/studentAfterClassPractice/getQuestionBankIdsByType"//按练习类型获取试题Ids
- const val INTERFACE_QUESTION_POST_COLLECT = "/parent/studentAfterClassPractice/collectQuestionBankById"//收藏(取消)试题
- const val INTERFACE_QUESTION_GET_PRACTICE_STAT = "/parent/studentAfterClassPractice/getPracticeStat"//获取练习统计
- const val INTERFACE_QUESTION_GET_KNOWLEDGE_POINT = "/parent/questionBank/getKnowledgePoint"//获取知识点
-
- const val INTERFACE_NEW_WORD_GET_BOOK_LIST = "/parent/learningNewWords/getBooksList"//教材列表
- const val INTERFACE_NEW_WORD_GET_BOOK_RES_CATE_LIST = "/parent/learningNewWords/getBooksResourceCatalogList"//获取课本资源目录
- const val INTERFACE_INTERFACE_NEW_WORD_LIST= "/parent/learningNewWords/getNewWordsList" // 生字-列表
- const val INTERFACE_NEW_WORD_ADD_RECORD= "/parent/learningNewWords/insertPracticeRecord" // 生字-提交记录
- const val INTERFACE_NEW_WORD_GET_RECORD= "/parent/learningNewWords/getPracticeRecordsList" // 练习记录
-
+ /**
+ * 学生请假
+ */
const val INTERFACE_GET_STU_LEAVE_LIST= "/edu/attendance/teacher/listStudentLeaveRequest"//获取学生请假列表
const val INTERFACE_GET_STU_LEAVE_INFO_DETAIL= "/edu/attendance/getStudentLeaveRequestDetail" //获取学生的请假信息详情
const val INTERFACE_GET_TEACHER_INFO= "/rights/teacherWork/getTeacherByUserId"//获取人员信息
const val INTERFACE_STUDENT_GET_SHOW_BOX_LIST= "/edu/attendance/student/getStudentLeaveIds" //获取需要弹出的数据
const val INTERFACE_STUDENT_POST_LEAVE_VACATION= "/edu/attendance/student/studentLeaveVacation"//人工销假操作
+ /**
+ * 学籍异动
+ */
-}
\ No newline at end of file
+ const val INTERFACE_STUDENT_GET_CHANGE_LIST= "/edu/attendance/teacher/listStudentStatusChange"//学籍异动列表
+ const val INTERFACE_STUDENT_GET_CHANGE_DETAIL= "/edu/attendance/getStudentStatusChangeDetail"//学籍异动详情
+}
diff --git a/app/src/main/java/com/yzx/escreen/fragment/ChangeFragment.kt b/app/src/main/java/com/yzx/escreen/fragment/ChangeFragment.kt
new file mode 100644
index 0000000..11f7730
--- /dev/null
+++ b/app/src/main/java/com/yzx/escreen/fragment/ChangeFragment.kt
@@ -0,0 +1,484 @@
+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 android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.blankj.utilcode.util.*
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton
+import com.yzx.escreen.R
+import com.yzx.escreen.adapter.ChangeDialogStepAdapter
+import com.yzx.escreen.adapter.ChangeListAdapter
+import com.yzx.escreen.fragment.base.BaseFragment
+import com.yzx.escreen.model.*
+import com.yzx.escreen.presenter.ChangePresenter
+import com.yzx.escreen.presenter.ChangeView
+import com.yzx.escreen.utils.FileUploadCallBack
+import com.yzx.escreen.utils.hideNavigationBar
+import com.yzx.escreen.utils.setSrc
+import com.yzx.escreen.utils.toDay
+import com.yzx.escreen.widget.BaseDialog
+import kotlinx.android.synthetic.main.fragment_change.*
+import kotlinx.android.synthetic.main.layout_loading.view.*
+import org.greenrobot.eventbus.EventBus
+import org.greenrobot.eventbus.Subscribe
+import org.greenrobot.eventbus.ThreadMode
+import org.jetbrains.anko.find
+import org.jetbrains.anko.support.v4.act
+import org.jetbrains.anko.support.v4.ctx
+import org.jetbrains.anko.textColor
+
+
+class ChangeFragment : BaseFragment(), ChangeView,
+ NetworkUtils.OnNetworkStatusChangedListener, FileUploadCallBack {
+
+ companion object {
+
+ val CAMER_REQUEST_CODE = 0x01
+
+ @JvmStatic
+ fun getNewInstance() =
+ ChangeFragment()
+ }
+
+ private val mAdapter: ChangeListAdapter by lazy {
+ val list = mutableListOf()
+ ChangeListAdapter(list)
+ }
+
+ private var mPager = Pager()
+ var list = mutableListOf()
+ private val statusBtnList = mutableListOf()
+ var keyword: String = ""
+ var status: String = ""
+ private var isLoading = false
+ private val mShowList = mutableListOf()
+ private val mShowDialogList = mutableListOf()
+
+ private val refreshRun = Runnable {
+ refreshData()
+ }
+
+ override val inflateId: Int
+ get() = R.layout.fragment_change
+
+ 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(0) }
+ status1Btn.setOnClickListener { changeStatus(1) }
+ status2Btn.setOnClickListener { changeStatus(2) }
+ status3Btn.setOnClickListener { changeStatus(3) }
+ statusBtnList.add(allBtn)
+ statusBtnList.add(status1Btn)
+ statusBtnList.add(status2Btn)
+ statusBtnList.add(status3Btn)
+ 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 -> {
+
+ }
+ }
+ }
+
+
+ switchBtn.setOnCheckedChangeListener { buttonView, isChecked ->
+ SPUtils.getInstance().put("auto_show_change", isChecked)
+ changeSwitchBtnTxt(isChecked)
+ EventBus.getDefault().post(AutoSwitchChange(2))
+ }
+ val isAutoShowLeave = SPUtils.getInstance().getBoolean("auto_show_change", 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: StuChange) {
+ EventBus.getDefault().post(detail)
+ return
+ val adapter = ChangeDialogStepAdapter(mutableListOf())
+ val dialog = BaseDialog(act, R.style.BaseDialog, R.layout.dialog_change)
+ //处理弹窗显示
+ dialog.find(R.id.leave_student_name).text = detail.status_change_student_name
+ if (detail.face_key.isNotEmpty()) {
+ val img = dialog.find(R.id.face_img)
+ img.setSrc(detail.face_identity, detail.face_key)
+ img.visibility = View.VISIBLE
+ dialog.find(R.id.face_empty).visibility = View.GONE
+ } else {
+ dialog.find(R.id.face_empty).visibility = View.VISIBLE
+ dialog.find(R.id.face_img).visibility = View.GONE
+ }
+ dialog.find(R.id.class_name).text = "${detail.grade_name}${detail.class_name}"
+ dialog.find(R.id.leave_request_type_name).text = detail.status_change_type_name
+ dialog.find(R.id.statusName).text = when (detail.status) {
+ 1 -> "待处理"
+ 2 -> "已确认"
+ 3 -> "已拒绝"
+ else -> "--"
+ }
+ dialog.find(R.id.statusName).textColor = when (detail.status) {
+ 1 -> Color.parseColor("#333333")
+ 2 -> Color.parseColor("#3c7ef6")
+ 3 -> Color.parseColor("#ff4040")
+ else -> Color.parseColor("#333333")
+ }
+ if (detail.getSubStatusName().isNotEmpty()) {
+ dialog.find(R.id.subStatusName).text = "(${detail.getSubStatusName()})"
+ dialog.find(R.id.subStatusName).textColor = when (detail.sub_status) {
+ 0, 2 -> Color.parseColor("#ff4040")
+ 1, 3 -> Color.parseColor("#07c160")
+ else -> Color.parseColor("#333333")
+ }
+ } else {
+ dialog.find(R.id.subStatusName).text = ""
+ }
+ var time = "--"
+ if (detail.start_time > 0) {
+ time = detail.start_time.toDay()
+ }
+ if (detail.end_time > 0) {
+ time = "$time -- ${detail.end_time.toDay()}"
+ }
+ dialog.find(R.id.add_time).text = time
+ if (detail.status_change_reason.isNotEmpty()) {
+ dialog.find(R.id.remarkLayout).visibility = View.VISIBLE
+ dialog.find(R.id.leave_request_reason).text = detail.status_change_reason
+ } else {
+ dialog.find(R.id.remarkLayout).visibility = View.GONE
+ }
+ dialog.find(R.id.statusImg).setSrc(detail.getStatusImg())
+
+ dialog.find(R.id.stepRecycler)
+ val recyclerView = dialog.find(R.id.stepRecycler)
+ recyclerView.layoutManager =
+ LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
+ recyclerView.adapter = adapter
+ adapter.setList(detail.getStep())
+
+ dialog.find(R.id.closeBtn).setOnClickListener {
+ dialog.hide()
+ val index = mShowList.indexOfFirst { it.id == detail.id }
+ if (index >= 0) {
+ mShowList.removeAt(index)
+ }
+ val dialogIndex = mShowDialogList.indexOfFirst { it.getLeaveId() == detail.id }
+ if (index >= 0) {
+ mShowDialogList.removeAt(dialogIndex)
+ }
+ val showItem = mShowDialogList.find { !it.showed }
+ showItem?.apply {
+ show()
+ }
+
+ }
+ val showList = mShowDialogList.filter { it.showed }
+ if (showList.isEmpty()) {
+ dialog.show()
+ dialog.showed = true
+ }
+ dialog.hideNavigationBar()
+ dialog.setLeaveId(detail.id)
+ mShowDialogList.add(dialog)
+ }
+
+ private fun changeStatusBtn(idx: Int) {
+ 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) {
+ KeyboardUtils.hideSoftInput(keywordInput)
+ if (isLoading) {
+ return
+ }
+ changeStatusBtn(status)
+ this.status = if (status == 0) {
+ ""
+ } else {
+ "${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(): ChangePresenter = ChangePresenter(this)
+
+ @SuppressLint("SetTextI18n")
+ override fun onListSuccess(list: MutableList, pager: Pager) {
+ pageTv?.apply {
+ 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
+ }
+
+ override fun onDetailSuccess(detail: StuChange) {
+ pageTv?.apply {
+ val item = mShowList.find { it.id == detail.id }
+ if (item != null) {
+ //替换新的数据
+ val index = mShowList.indexOf(item)
+ mShowList[index] = detail
+
+ //移除原本的dialog
+ val dialogIndex = mShowDialogList.indexOfFirst { it.getLeaveId() == item.id }
+ if (dialogIndex > -1) {
+ mShowDialogList[dialogIndex].hide()
+ mShowDialogList.removeAt(dialogIndex)
+ }
+
+ } else {
+ mShowList.add(detail)
+ }
+ showLeaveDialog(detail)
+ }
+ }
+
+ override fun onDetailError(error: String) {
+
+ }
+
+ override fun onDisconnected() {
+
+ }
+
+ override fun onConnected(networkType: NetworkUtils.NetworkType?) {
+ refreshData()
+ }
+
+ override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
+ if (resultCode == Activity.RESULT_OK) {
+
+
+ }
+ super.onActivityResult(requestCode, resultCode, data)
+ }
+
+ override fun onSuccess(identity: String, key: String) {
+ LogUtils.d(identity, key)
+
+ }
+
+ override fun onError(msg: String) {
+ LogUtils.d(msg)
+
+
+ }
+
+ //接收消息
+ @Subscribe(threadMode = ThreadMode.MAIN)
+ fun onMessageEvent(event: MessageEventAuto) {
+ val list = event.list.filter { it.type == 1 }.toMutableList()
+ if (list.isNotEmpty() && switchBtn.isChecked) {
+ list.forEachIndexed { index, leaveID ->
+ pageTv.postDelayed({
+ mPresenter?.getDetail(leaveID.id)
+ }, 500L * index)
+ }
+ }
+ }
+
+ //接收消息
+ @Subscribe(threadMode = ThreadMode.MAIN)
+ fun onMessageRefreshEvent(event: RefreshTokenEvent) {
+ refreshData()
+ }
+
+ //接收消息
+ @Subscribe(threadMode = ThreadMode.MAIN)
+ fun onMessageEvent(event: TimeShow) {
+ timeView.setTime(event)
+ }
+}
+
diff --git a/app/src/main/java/com/yzx/escreen/fragment/HomeFragment.kt b/app/src/main/java/com/yzx/escreen/fragment/HomeFragment.kt
index 8022c62..aea1006 100644
--- a/app/src/main/java/com/yzx/escreen/fragment/HomeFragment.kt
+++ b/app/src/main/java/com/yzx/escreen/fragment/HomeFragment.kt
@@ -6,8 +6,6 @@ import android.app.Activity
import android.content.Intent
import android.content.res.ColorStateList
import android.graphics.Color
-import android.os.Handler
-import android.os.Looper
import android.text.Editable
import android.text.TextWatcher
import android.view.KeyEvent
@@ -34,6 +32,9 @@ import com.yzx.escreen.utils.*
import com.yzx.escreen.widget.BaseDialog
import kotlinx.android.synthetic.main.fragment_home.*
import kotlinx.android.synthetic.main.layout_loading.view.*
+import org.greenrobot.eventbus.EventBus
+import org.greenrobot.eventbus.Subscribe
+import org.greenrobot.eventbus.ThreadMode
import org.jetbrains.anko.find
import org.jetbrains.anko.support.v4.act
import org.jetbrains.anko.support.v4.ctx
@@ -69,15 +70,9 @@ class HomeFragment : BaseFragment(), HomeView,
private var mCancelFaceImg: ImageView? = null
private var mDialogVacation: BaseDialog? = null
private val mVacation = Vacation()
- private val mVacationAttachment = Attachment("","","")
+ private val mVacationAttachment = Attachment("", "", "")
+
- private val mHandler = Handler(Looper.getMainLooper())
- private val runnable = object : Runnable {
- override fun run() {
- mPresenter?.getLeaveShowIds()
- mHandler.postDelayed(this, 2000)
- }
- }
private val refreshRun = Runnable {
refreshData()
}
@@ -121,17 +116,25 @@ class HomeFragment : BaseFragment(), HomeView,
KeyboardUtils.hideSoftInput(keywordInput)
initData()
}
-
+ var lastClickTime = TimeUtils.getNowMills()
mAdapter.setOnItemClickListener { adapter, view, position ->
- mPresenter?.getDetail(mAdapter.getItem(position).id)
+ 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 -> {
- mCancelItem = mAdapter.getItem(position)
- showCancelDialog()
+ val curr = TimeUtils.getNowMills()
+ if(curr - lastClickTime > 500){
+ lastClickTime = curr
+ when (view.id) {
+ R.id.cancelBtn -> {
+ mCancelItem = mAdapter.getItem(position)
+ showCancelDialog()
+ }
}
}
}
@@ -140,20 +143,16 @@ class HomeFragment : BaseFragment(), HomeView,
switchBtn.setOnCheckedChangeListener { buttonView, isChecked ->
SPUtils.getInstance().put("auto_show_leave", isChecked)
changeSwitchBtnTxt(isChecked)
- if (!isChecked) {
- mHandler.removeCallbacks(runnable)
- } else {
- mHandler.postDelayed(runnable, 2000)
- }
+
}
val isAutoShowLeave = SPUtils.getInstance().getBoolean("auto_show_leave", false)
switchBtn.isChecked = isAutoShowLeave
changeSwitchBtnTxt(isAutoShowLeave)
- if (isAutoShowLeave) {
- mHandler.postDelayed(runnable, 2000)
- }
+
switchBtnTxt.setOnClickListener {
switchBtn.isChecked = !switchBtn.isChecked
+
+ EventBus.getDefault().post(AutoSwitchChange(1))
}
keywordInput.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
@@ -176,6 +175,8 @@ class HomeFragment : BaseFragment(), HomeView,
filterLayout.setOnClickListener {
KeyboardUtils.hideSoftInput(keywordInput)
}
+
+
}
@SuppressLint("SetTextI18n")
@@ -210,8 +211,8 @@ class HomeFragment : BaseFragment(), HomeView,
mDialogVacation = dialogVacation
}
- private fun postVacation(){
- if(mVacationAttachment.id.isNotEmpty()){
+ private fun postVacation() {
+ if (mVacationAttachment.id.isNotEmpty()) {
mVacation.vacation_attachment = GsonUtils.toJson(mutableListOf(mVacationAttachment))
}
showLoading("销假中")
@@ -262,6 +263,8 @@ class HomeFragment : BaseFragment(), HomeView,
@SuppressLint("SetTextI18n")
private fun showLeaveDialog(detail: StuLeave) {
+ EventBus.getDefault().post(detail)
+ return
val adapter = HomeDialogStepAdapter(mutableListOf())
val dialog = BaseDialog(act, R.style.BaseDialog, R.layout.dialog_leave)
//处理弹窗显示
@@ -295,11 +298,13 @@ class HomeFragment : BaseFragment(), HomeView,
dialog.find(R.id.stepRecycler)
val recyclerView = dialog.find(R.id.stepRecycler)
- recyclerView.layoutManager =
- LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
+ val layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
+// layoutManager.stackFromEnd = true
+ recyclerView.layoutManager = layoutManager
+
recyclerView.adapter = adapter
adapter.setList(detail.getStep())
-
+ recyclerView.scrollToPosition(adapter.itemCount - 1)
dialog.find(R.id.closeBtn).setOnClickListener {
dialog.hide()
val index = mShowList.indexOfFirst { it.id == detail.id }
@@ -316,12 +321,12 @@ class HomeFragment : BaseFragment(), HomeView,
}
}
- val showList = mShowDialogList.filter { it.showed }
- if(showList.isEmpty()){
+ dialog.hideNavigationBar()
+ val showList = mShowDialogList.filter { it.showed }
+ if (showList.isEmpty()) {
dialog.show()
dialog.showed = true
}
- dialog.hideNavigationBar()
dialog.setLeaveId(detail.id)
mShowDialogList.add(dialog)
}
@@ -458,9 +463,9 @@ class HomeFragment : BaseFragment(), HomeView,
}
override fun onStop() {
- super.onStop()
pageTv.removeCallbacks(refreshRun)
- mHandler.removeCallbacks(runnable)
+ super.onStop()
+ EventBus.getDefault().unregister(this)
}
override fun onLeaveListError(error: String) {
@@ -493,17 +498,43 @@ class HomeFragment : BaseFragment(), HomeView,
}
+ override fun onStart() {
+ super.onStart()
+ EventBus.getDefault().register(this)
+ }
+
+ //接收消息
+ @Subscribe(threadMode = ThreadMode.MAIN)
+ fun onMessageEvent(event: MessageEventAuto) {
+ val list = event.list.filter { it.type == 0 }.toMutableList()
+ if (list.isNotEmpty() && switchBtn.isChecked) {
+ onLeaveIDsSuccess(list)
+ }
+ }
+
+ //接收消息
+ @Subscribe(threadMode = ThreadMode.MAIN)
+ fun onMessageRefreshEvent(event: RefreshTokenEvent) {
+ refreshData()
+ }
+
+ //接收消息
+ @Subscribe(threadMode = ThreadMode.MAIN)
+ fun onMessageEvent(event: TimeShow) {
+ timeView.setTime(event)
+ }
+
override fun onLeaveIDsSuccess(list: MutableList) {
list.forEachIndexed { index, leaveID ->
pageTv.postDelayed({
mPresenter?.getDetail(leaveID.id)
- },500L*index)
+ }, 500L * index)
}
}
override fun postVacationSuccess(msg: String) {
- showDialogToast(msg,2000L)
+ showDialogToast(msg, 2000L)
hideLoading()
mDialogVacation?.apply {
dismiss()
@@ -513,7 +544,7 @@ class HomeFragment : BaseFragment(), HomeView,
override fun postVacationError(msg: String) {
hideLoading()
- showDialogToast(msg,2000L,QMUITipDialog.Builder.ICON_TYPE_FAIL)
+ showDialogToast(msg, 2000L, QMUITipDialog.Builder.ICON_TYPE_FAIL)
}
override fun onDisconnected() {
diff --git a/app/src/main/java/com/yzx/escreen/fragment/MyFragment.kt b/app/src/main/java/com/yzx/escreen/fragment/MyFragment.kt
index 65945a1..885c4e5 100644
--- a/app/src/main/java/com/yzx/escreen/fragment/MyFragment.kt
+++ b/app/src/main/java/com/yzx/escreen/fragment/MyFragment.kt
@@ -1,7 +1,6 @@
package com.yzx.escreen.fragment
import android.text.InputType
-import com.blankj.utilcode.util.ActivityUtils
import com.blankj.utilcode.util.KeyboardUtils
import com.blankj.utilcode.util.LogUtils
import com.blankj.utilcode.util.ScreenUtils
@@ -12,11 +11,17 @@ import com.yzx.escreen.activity.WebActivity
import com.yzx.escreen.config.Config
import com.yzx.escreen.fragment.base.BaseFragment
import com.yzx.escreen.model.TeacherInfo
+import com.yzx.escreen.model.TimeShow
import com.yzx.escreen.model.User
import com.yzx.escreen.presenter.MyPresenter
import com.yzx.escreen.presenter.MyView
import com.yzx.escreen.utils.hideNavigationBar
+import kotlinx.android.synthetic.main.fragment_change.*
import kotlinx.android.synthetic.main.fragment_my.*
+import kotlinx.android.synthetic.main.fragment_my.timeView
+import org.greenrobot.eventbus.EventBus
+import org.greenrobot.eventbus.Subscribe
+import org.greenrobot.eventbus.ThreadMode
import kotlin.system.exitProcess
class MyFragment : BaseFragment(), MyView {
@@ -145,4 +150,22 @@ class MyFragment : BaseFragment(), MyView {
}
+
+ override fun onStop() {
+ super.onStop()
+ EventBus.getDefault().unregister(this)
+ }
+
+
+ override fun onStart() {
+ super.onStart()
+ EventBus.getDefault().register(this)
+ }
+
+ //接收消息
+ @Subscribe(threadMode = ThreadMode.MAIN)
+ fun onMessageEvent(event: TimeShow) {
+ timeView.setTime(event)
+ }
+
}
\ No newline at end of file
diff --git a/app/src/main/java/com/yzx/escreen/fragment/base/BaseFragment.kt b/app/src/main/java/com/yzx/escreen/fragment/base/BaseFragment.kt
index 4a91ade..aed0751 100644
--- a/app/src/main/java/com/yzx/escreen/fragment/base/BaseFragment.kt
+++ b/app/src/main/java/com/yzx/escreen/fragment/base/BaseFragment.kt
@@ -9,6 +9,7 @@ import androidx.fragment.app.Fragment
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
import com.yzx.escreen.presenter.base.BasePresenter
import com.yzx.escreen.utils.hideNavigationBar
+import org.greenrobot.eventbus.EventBus
/**
* fragment 基类
@@ -54,6 +55,16 @@ abstract class BaseFragment> : Fragment() {
initData()
}
+ override fun onStart() {
+ super.onStart()
+
+ }
+
+ override fun onStop() {
+ super.onStop()
+
+ }
+
override fun onDestroy() {
super.onDestroy()
diff --git a/app/src/main/java/com/yzx/escreen/model/MessageEvent.kt b/app/src/main/java/com/yzx/escreen/model/MessageEvent.kt
new file mode 100644
index 0000000..c9212e1
--- /dev/null
+++ b/app/src/main/java/com/yzx/escreen/model/MessageEvent.kt
@@ -0,0 +1,38 @@
+package com.yzx.escreen.model
+
+import com.blankj.utilcode.util.TimeUtils
+import com.yzx.escreen.utils.zhCn
+import java.util.*
+
+data class MessageEventAuto(
+ var list: MutableList,
+ val type: Int = 0
+)
+
+data class AutoSwitchChange(val type: Int)
+
+data class RefreshTokenEvent(val token: String)
+
+
+data class TimeShow(
+ var year: String = "",
+ var month: String = "",
+ var day: String = "",
+ var hour: String = "",
+ var min: String = "",
+ var sec: String = "",
+ var week: String = ""
+) {
+ fun getNowObj(): TimeShow {
+ //yyyy-MM-dd HH:mm:ss
+ year = TimeUtils.getNowString(TimeUtils.getSafeDateFormat("yyyy").zhCn())
+ month = TimeUtils.getNowString(TimeUtils.getSafeDateFormat("MM").zhCn())
+ day = TimeUtils.getNowString(TimeUtils.getSafeDateFormat("dd").zhCn())
+ hour = TimeUtils.getNowString(TimeUtils.getSafeDateFormat("HH").zhCn())
+ min = TimeUtils.getNowString(TimeUtils.getSafeDateFormat("mm").zhCn())
+ sec = TimeUtils.getNowString(TimeUtils.getSafeDateFormat("ss").zhCn())
+ week = TimeUtils.getChineseWeek(System.currentTimeMillis()).replace("周","星期")
+ return this
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/yzx/escreen/model/ReToken.kt b/app/src/main/java/com/yzx/escreen/model/ReToken.kt
new file mode 100644
index 0000000..2a649e3
--- /dev/null
+++ b/app/src/main/java/com/yzx/escreen/model/ReToken.kt
@@ -0,0 +1,5 @@
+package com.yzx.escreen.model
+
+class ReToken (
+ val token:String
+)
\ No newline at end of file
diff --git a/app/src/main/java/com/yzx/escreen/model/StuChange.kt b/app/src/main/java/com/yzx/escreen/model/StuChange.kt
new file mode 100644
index 0000000..9b89ba9
--- /dev/null
+++ b/app/src/main/java/com/yzx/escreen/model/StuChange.kt
@@ -0,0 +1,209 @@
+package com.yzx.escreen.model
+
+import com.yzx.escreen.config.Config
+
+data class StuChangeType(
+ val id: Int = 0,
+ val label: String = "",
+ val shortLabel: String = ""
+) {
+ fun getShortLabelVal(): String {
+ if (shortLabel.isNotEmpty()) {
+ return shortLabel
+ }
+ return label
+ }
+}
+
+data class StuChange(
+ val activities: List = mutableListOf(),
+ val add_time: Int = 0,
+ val add_user_id: Int = 0,
+ val add_user_name: String = "",
+ val attachment: String = "",
+ val attachments: List = listOf(),
+ val can_reviewed: Int = 0,
+ val class_id: Int = 0,
+ val class_name: String = "",
+ val end_time: Int = 0,
+ val face_identity: String = "",
+ val face_key: String = "",
+ val grade_id: Int = 0,
+ val grade_name: String = "",
+ val headteacher_id: Int = 0,
+ val id: Int = 0,
+ val is_cancel_change: Int = 0,
+ val is_delete: Int = 0,
+ val is_resume_school: Int = 0,
+ val new_todo_list_id: Int = 0,
+ val school_id: Int = 0,
+ val school_name: String = "",
+ val sign_identity: String = "",
+ val sign_key: String = "",
+ val start_time: Int = 0,
+ val status: Int = 0,
+ val status_change_reason: String = "",
+ val status_change_student_id: Int = 0,
+ val status_change_student_name: String = "",
+ val status_change_type: Int = 0,
+ val status_change_type_name: String = "",
+ val sub_status: Int = 0,
+ val target_class_id: Int = 0,
+ val target_class_name: String = "",
+ val target_grade_id: Int = 0,
+ val target_grade_name: String = "",
+ val target_headteacher_id: Int = 0,
+ val target_school_id: Int = 0,
+ val target_school_name: String = "",
+ val target_status: Int = 0,
+ val todo_list_id: Int = 0,
+ val type: Int = 0
+) {
+ fun getStatusImg(): String {
+ return when {
+ getSubStatusName().isNotEmpty() -> {
+ "https://oa-edu-1259243469.cos.ap-chengdu.myqcloud.com/public/mini/statuschange/${getSubStatusIcon()}.png"
+ }
+ status == 1 -> "https://oa-edu-1259243469.cos.ap-chengdu.myqcloud.com/public/mini/stutakeleave_wait.png"
+ status == 2 -> "https://oa-edu-1259243469.cos.ap-chengdu.myqcloud.com/public/mini/stutakeleave_pass.png"
+ status == 3 -> "https://oa-edu-1259243469.cos.ap-chengdu.myqcloud.com/public/mini/stutakeleave_nopass.png"
+ else -> ""
+ }
+ }
+
+ fun getSubStatusIcon(
+ changeType: Int = status_change_type,
+ subStatus: Int = sub_status
+ ): String {
+ if (is_resume_school == 1) {
+ return "resume_school"
+ }
+ return when (subStatus) {
+ 0 -> "change0"
+ else -> {
+ "${changeType}_${subStatus}"
+ }
+ }
+ }
+
+ fun getSubStatusName(
+ changeType: Int = status_change_type,
+ subStatus: Int = sub_status
+ ): String {
+ if (status != 2) {
+ return ""
+ }
+ if (is_resume_school == 1) {
+ return "恢复上学"
+ }
+ //其他type 无子状态
+ when (changeType) {
+ Config.STU_CHANGE_STATUS_LEAVE_SCHOOL -> {
+ return when (subStatus) {
+ 0 -> {
+ "未开始"
+ }
+ 1 -> {
+ "休学中"
+ }
+ else -> {
+ "休学结束"
+ }
+ }
+ }
+ Config.STU_CHANGE_STATUS_OUT_SCHOOL -> {
+ return when (subStatus) {
+ 0 -> {
+ "未开始"
+ }
+ else -> {
+ "已退学"
+ }
+ }
+ }
+ Config.STU_CHANGE_STATUS_INTROSPECTION -> {
+ return when (subStatus) {
+ 0 -> {
+ "未开始"
+ }
+ 1 -> {
+ "反省中"
+ }
+ else -> {
+ "反省结束"
+ }
+ }
+ }
+ Config.STU_CHANGE_STATUS_INTERNSHIP -> {
+ return when (subStatus) {
+ 0 -> {
+ "未开始"
+ }
+ 1 -> {
+ "实习中"
+ }
+ else -> {
+ "实习结束"
+ }
+ }
+ }
+ Config.STU_CHANGE_STATUS_DROP_OUT -> {
+ return when (subStatus) {
+ 0 -> {
+ "未开始"
+ }
+ else -> {
+ "已辍学"
+ }
+ }
+ }
+ Config.STU_CHANGE_STATUS_TRANSFER_OUT -> {
+ return when (subStatus) {
+ 0 -> {
+ "未开始"
+ }
+ else -> {
+ "已转出"
+ }
+ }
+ }
+ }
+ return ""
+ }
+
+ fun getStep(): List {
+ return activities.reversed()
+ }
+
+}
+
+data class ChangeActivity(
+ val activity_name: String = "",
+ val add_time: Int = 0,
+ val add_user_id: Int = 0,
+ val add_user_name: String = "",
+ val add_user_type: Int = 0,
+ val approval_comments: String = "",
+ val approval_status: Int = 0,
+ val approve_node: Int = 0,
+ val approve_sort: Int = 0,
+ val approve_user_type: Int = 0,
+ val approve_way: Int = 0,
+ val id: Int = 0,
+ val is_approve: Int = 0,
+ val is_auto_pass: Int = 0,
+ val related_id: Int = 0,
+ val relation_id: Int = 0,
+ val report_end_date: Int = 0,
+ val report_start_date: Int = 0,
+ val role_type: Int = 0,
+ val school_name: String = "",
+ val sign_identity: String = "",
+ val sign_key: String? = "",
+ val status: Int = 0,
+ val sub_type: String = "",
+ val type: Int = 0,
+ val unit_id: Int = 0,
+ val unit_name: String = "",
+ val vacation_type: Int = 0
+)
\ No newline at end of file
diff --git a/app/src/main/java/com/yzx/escreen/model/StuLeave.kt b/app/src/main/java/com/yzx/escreen/model/StuLeave.kt
index adb35b0..9ea8b08 100644
--- a/app/src/main/java/com/yzx/escreen/model/StuLeave.kt
+++ b/app/src/main/java/com/yzx/escreen/model/StuLeave.kt
@@ -1,9 +1,10 @@
package com.yzx.escreen.model
-import android.app.Dialog
-import com.blankj.utilcode.util.LogUtils
+import android.os.Parcelable
import com.yzx.escreen.utils.durationStr
+import kotlinx.android.parcel.Parcelize
+@Parcelize
data class StuLeave(
val activities: MutableList = mutableListOf(),
val add_time: Int = 0,
@@ -11,7 +12,6 @@ data class StuLeave(
val add_user_name: String = "",
val add_user_type: Int = 0,
val approve_time: Int = 0,
- val attachments: List = listOf(),
val can_reviewed: Int = 0,
val class_id: Int = 0,
val class_name: String = "",
@@ -32,14 +32,13 @@ data class StuLeave(
val leave_student_id: Int = 0,
val leave_student_name: String = "",
val relation_id: Int = 0,
- val request_status: Any = Any(),
val school_id: Int = 0,
val school_name: String = "",
val start_time: Int = 0,
val status: Int = 0,
val todo_list_id: Int = 0,
val todo_status: Int = 0
-) {
+) : Parcelable {
fun getStep(): MutableList {
val logList = mutableListOf()
@@ -135,9 +134,9 @@ data class StuLeave(
}
}
-
-data class LeaveID(var id: Int)
-
+@Parcelize
+data class LeaveID(var id: Int,var type:Int) : Parcelable
+@Parcelize
data class LeaveActivity(
var activity_name: String = "",
var add_time: Int = 0,
@@ -162,7 +161,7 @@ data class LeaveActivity(
var sign_identity: String = "",
var sign_key: String = "",
var status: Int = 0,
- var sub_type: Any = Any(),
+ var sub_type: Int = 0,
var type: Int = 0,
var unit_id: Int = 0,
var unit_name: String = "",
@@ -171,7 +170,7 @@ data class LeaveActivity(
var vacation_type: Int = 0,
var color: String = "",
val face_infos: MutableList = mutableListOf()
-) {
+) : Parcelable {
fun getInImg(): FaceInfo? {
val imgList = face_infos.filter { it.isImg() }
if (imgList.isNotEmpty()) {
@@ -180,12 +179,12 @@ data class LeaveActivity(
return null
}
}
-
+@Parcelize
data class FaceInfo(
var attachment_name: String = "",
var attachment_id: String = "",
var identity: String = ""
-) {
+) : Parcelable {
fun isImg(): Boolean {
if (attachment_name.isNullOrBlank()) {
return false
diff --git a/app/src/main/java/com/yzx/escreen/presenter/ChangePresenter.kt b/app/src/main/java/com/yzx/escreen/presenter/ChangePresenter.kt
new file mode 100644
index 0000000..6243cdc
--- /dev/null
+++ b/app/src/main/java/com/yzx/escreen/presenter/ChangePresenter.kt
@@ -0,0 +1,77 @@
+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.model.*
+import com.yzx.escreen.presenter.base.*
+import com.yzx.webebook.config.YzxInterface
+
+class ChangePresenter(view: ChangeView) : BasePresenter(view) {
+
+
+ fun getList(pageNo: Int, keyword: String, status: String) {
+ if(!User.isLogin()){
+ return
+ }
+ val url = "${Config.BASE_URL}${YzxInterface.INTERFACE_STUDENT_GET_CHANGE_LIST}"
+ OkGo.post>(url)
+ .tag(this)
+ .params("keyword", keyword)
+ .params("status", status)
+ .params("page_size", 6)
+ .params("page_no", pageNo)
+ .execute(object : JsonCallBack>() {
+
+
+ override fun onSuccess(response: Response>?) {
+ LogUtils.d(response)
+ if (response?.isSuccessful == true) {
+ mView?.onListSuccess(response.body().list, response.body().pager)
+ }
+ }
+
+ override fun onError(response: Response>?) {
+ super.onError(response)
+ LogUtils.d(response)
+ mView?.onListError(response?.body()?.msg ?: "")
+ }
+ })
+ }
+ fun getDetail(id: Int) {
+ if(!User.isLogin()){
+ return
+ }
+ val url = "${Config.BASE_URL}${YzxInterface.INTERFACE_STUDENT_GET_CHANGE_DETAIL}"
+ OkGo.post>(url)
+ .tag(this)
+ .params("id", id)
+ .execute(object : JsonCallBack>() {
+
+
+ override fun onSuccess(response: Response>?) {
+ LogUtils.d(response)
+ if (response?.isSuccessful == true) {
+ mView?.onDetailSuccess(response.body().data)
+ }
+ }
+
+ override fun onError(response: Response>?) {
+ super.onError(response)
+ LogUtils.d(response)
+ mView?.onDetailError(response?.body()?.msg ?: "")
+ }
+ })
+ }
+
+
+
+}
+
+interface ChangeView : IView {
+ fun onListSuccess(list: MutableList, pager: Pager)
+ fun onListError(error: String)
+ fun onDetailSuccess(detail: StuChange)
+ fun onDetailError(error: String)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/yzx/escreen/presenter/MainPresenter.kt b/app/src/main/java/com/yzx/escreen/presenter/MainPresenter.kt
new file mode 100644
index 0000000..ecd44be
--- /dev/null
+++ b/app/src/main/java/com/yzx/escreen/presenter/MainPresenter.kt
@@ -0,0 +1,46 @@
+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.model.LeaveID
+import com.yzx.escreen.model.User
+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
+import com.yzx.webebook.config.YzxInterface
+
+class MainPresenter(view: MainView) : BasePresenter(view) {
+
+
+
+ fun getLeaveShowIds() {
+ if(!User.isLogin()){
+ return
+ }
+ val url = "${Config.BASE_URL}${YzxInterface.INTERFACE_STUDENT_GET_SHOW_BOX_LIST}"
+ OkGo.post>(url)
+ .tag(this)
+ .execute(object : JsonCallBack>() {
+ override fun onSuccess(response: Response>?) {
+ if (response?.isSuccessful == true) {
+ mView?.onLeaveIDsSuccess(response.body().list)
+ LogUtils.d("getLeaveShowIds",response.body().list)
+ }
+ }
+
+ override fun onError(response: Response>?) {
+ super.onError(response)
+ LogUtils.d(response)
+ }
+ })
+ }
+
+
+}
+
+interface MainView : IView {
+ fun onLeaveIDsSuccess(list: MutableList)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/yzx/escreen/utils/KotlinX.kt b/app/src/main/java/com/yzx/escreen/utils/KotlinX.kt
index 2a40730..c1a78d9 100644
--- a/app/src/main/java/com/yzx/escreen/utils/KotlinX.kt
+++ b/app/src/main/java/com/yzx/escreen/utils/KotlinX.kt
@@ -2,9 +2,11 @@ package com.yzx.escreen.utils
import android.app.Dialog
import android.view.View
+import android.view.WindowManager
import android.widget.ImageView
import com.blankj.utilcode.util.TimeUtils
import com.bumptech.glide.Glide
+import java.text.SimpleDateFormat
import java.util.*
fun ImageView.setSrc(identity: String, key: String) {
@@ -20,12 +22,16 @@ fun ImageView.setSrc(url: String) {
.into(this)
}
-fun Int.toTime(): String {
- val format = TimeUtils.getSafeDateFormat("yyyy-MM-dd HH:mm")
+fun Int.toTime(format:String = "yyyy-MM-dd HH:mm"): String {
+ val format = TimeUtils.getSafeDateFormat(format)
format.timeZone = TimeZone.getTimeZone("GMT+8:00")
return TimeUtils.millis2String(this * 1000L, format)
}
+fun Int.toDay(): String {
+ return toTime("yyyy-MM-dd")
+}
+
fun Int.durationStr(): String {
val value = this
if (value <= 60) {
@@ -61,19 +67,24 @@ fun Int.durationStr(): String {
fun Dialog.hideNavigationBar(){
val window = this.window
window?.apply {
- window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
+ val uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
+ View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or
+ View.SYSTEM_UI_FLAG_FULLSCREEN or
+ View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or
+ View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
+ View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
+ window.decorView.systemUiVisibility = uiOptions
window.decorView.setOnSystemUiVisibilityChangeListener {
- val uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
- View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or
- View.SYSTEM_UI_FLAG_FULLSCREEN or
- View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or
- View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
- View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
window.decorView.systemUiVisibility = uiOptions
}
}
}
+fun SimpleDateFormat.zhCn():SimpleDateFormat{
+ timeZone = TimeZone.getTimeZone("GMT+8:00")
+ return this
+}
+
diff --git a/app/src/main/java/com/yzx/escreen/widget/BaseDialog.kt b/app/src/main/java/com/yzx/escreen/widget/BaseDialog.kt
index 30e1524..b946534 100644
--- a/app/src/main/java/com/yzx/escreen/widget/BaseDialog.kt
+++ b/app/src/main/java/com/yzx/escreen/widget/BaseDialog.kt
@@ -2,6 +2,8 @@ package com.yzx.escreen.widget
import android.app.Dialog
import android.content.Context
+import android.view.Window
+import com.yzx.escreen.utils.hideNavigationBar
class BaseDialog(context: Context, themeResId: Int, res: Int) : Dialog(context, themeResId) {
private var res: Int = 0
@@ -9,6 +11,8 @@ class BaseDialog(context: Context, themeResId: Int, res: Int) : Dialog(context,
var showed = false
init {
+ hideNavigationBar()
+ requestWindowFeature(Window.FEATURE_NO_TITLE)
setContentView(res)
this.res = res
setCanceledOnTouchOutside(false)
@@ -22,4 +26,14 @@ class BaseDialog(context: Context, themeResId: Int, res: Int) : Dialog(context,
fun getLeaveId():Int{
return leaveId
}
+
+ override fun onWindowFocusChanged(hasFocus: Boolean) {
+ super.onWindowFocusChanged(hasFocus)
+ hideNavigationBar()
+ }
+
+ override fun show() {
+ hideNavigationBar()
+ super.show()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/yzx/escreen/widget/ChangeDialog.kt b/app/src/main/java/com/yzx/escreen/widget/ChangeDialog.kt
new file mode 100644
index 0000000..d26ba5e
--- /dev/null
+++ b/app/src/main/java/com/yzx/escreen/widget/ChangeDialog.kt
@@ -0,0 +1,122 @@
+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.ChangeDialogStepAdapter
+import com.yzx.escreen.adapter.HomeDialogStepAdapter
+import com.yzx.escreen.model.StuChange
+import com.yzx.escreen.model.StuLeave
+import com.yzx.escreen.utils.durationStr
+import com.yzx.escreen.utils.setSrc
+import com.yzx.escreen.utils.toDay
+import com.yzx.escreen.utils.toTime
+import kotlinx.android.synthetic.main.dialog_leave.view.*
+import org.jetbrains.anko.find
+import org.jetbrains.anko.textColor
+
+/**
+ * 展示学生请假
+ */
+class ChangeDialog(
+ context: Context,
+ attrs: AttributeSet? = null,
+ defStyleAttr: Int = 0,
+ defStyleRes: Int = 0
+) :
+ ConstraintLayout(context, attrs, defStyleAttr, defStyleRes) {
+
+ val adapter: ChangeDialogStepAdapter by lazy {
+ ChangeDialogStepAdapter(mutableListOf())
+ }
+ var onCloseClick: (view:View) -> Unit = {}
+
+ init {
+ val view = LayoutInflater.from(context).inflate(R.layout.dialog_change, 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: StuChange) {
+ //处理弹窗显示
+ find(R.id.leave_student_name).text = detail.status_change_student_name
+ if (detail.face_key.isNotEmpty()) {
+ val img = find(R.id.face_img)
+ img.setSrc(detail.face_identity, detail.face_key)
+ img.visibility = View.VISIBLE
+ find(R.id.face_empty).visibility = View.GONE
+ } else {
+ find(R.id.face_empty).visibility = View.VISIBLE
+ find(R.id.face_img).visibility = View.GONE
+ }
+ find(R.id.class_name).text = "${detail.grade_name}${detail.class_name}"
+ find(R.id.leave_request_type_name).text = detail.status_change_type_name
+ find(R.id.statusName).text = when (detail.status) {
+ 1 -> "待处理"
+ 2 -> "已确认"
+ 3 -> "已拒绝"
+ else -> "--"
+ }
+ find(R.id.statusName).textColor = when (detail.status) {
+ 1 -> Color.parseColor("#333333")
+ 2 -> Color.parseColor("#3c7ef6")
+ 3 -> Color.parseColor("#ff4040")
+ else -> Color.parseColor("#333333")
+ }
+ if (detail.getSubStatusName().isNotEmpty()) {
+ find(R.id.subStatusName).text = "(${detail.getSubStatusName()})"
+ find(R.id.subStatusName).textColor = when (detail.sub_status) {
+ 0, 2 -> Color.parseColor("#ff4040")
+ 1, 3 -> Color.parseColor("#07c160")
+ else -> Color.parseColor("#333333")
+ }
+ } else {
+ find(R.id.subStatusName).text = ""
+ }
+ var time = "--"
+ if (detail.start_time > 0) {
+ time = detail.start_time.toDay()
+ }
+ if (detail.end_time > 0) {
+ time = "$time -- ${detail.end_time.toDay()}"
+ }
+ find(R.id.add_time).text = time
+ if(detail.status_change_reason.isNotEmpty()){
+ find(R.id.remarkLayout).visibility = View.VISIBLE
+ find(R.id.leave_request_reason).text = detail.status_change_reason
+ }else{
+ find(R.id.remarkLayout).visibility = View.GONE
+ }
+ find(R.id.statusImg).setSrc(detail.getStatusImg())
+
+ find(R.id.stepRecycler)
+ val recyclerView = find(R.id.stepRecycler)
+ recyclerView.layoutManager =
+ LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
+ recyclerView.adapter = adapter
+ adapter.setList(detail.getStep())
+
+ find(R.id.closeBtn).setOnClickListener {
+ onCloseClick(this)
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/yzx/escreen/widget/LeaveDialog.kt b/app/src/main/java/com/yzx/escreen/widget/LeaveDialog.kt
new file mode 100644
index 0000000..11bf0ed
--- /dev/null
+++ b/app/src/main/java/com/yzx/escreen/widget/LeaveDialog.kt
@@ -0,0 +1,95 @@
+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 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.HomeDialogStepAdapter
+import com.yzx.escreen.model.StuLeave
+import com.yzx.escreen.utils.durationStr
+import com.yzx.escreen.utils.setSrc
+import com.yzx.escreen.utils.toTime
+import kotlinx.android.synthetic.main.dialog_leave.view.*
+import org.jetbrains.anko.find
+
+/**
+ * 展示学生请假
+ */
+class LeaveDialog(
+ context: Context,
+ attrs: AttributeSet? = null,
+ defStyleAttr: Int = 0,
+ defStyleRes: Int = 0
+) :
+ ConstraintLayout(context, attrs, defStyleAttr, defStyleRes) {
+
+ val adapter: HomeDialogStepAdapter by lazy {
+ HomeDialogStepAdapter(mutableListOf())
+ }
+ var onCloseClick: (view:View) -> Unit = {}
+
+ init {
+ val view = LayoutInflater.from(context).inflate(R.layout.dialog_leave, 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: StuLeave) {
+ leave_student_name.text = detail.leave_student_name
+ if (detail.face_key.isNotEmpty()) {
+ val img = find(R.id.face_img)
+ img.setSrc(detail.face_identity, detail.face_key)
+ img.visibility = View.VISIBLE
+ find(R.id.face_empty).visibility = View.GONE
+ } else {
+ find(R.id.face_empty).visibility = View.VISIBLE
+ find(R.id.face_img).visibility = View.GONE
+ }
+ find(R.id.class_name).text = "${detail.grade_name}${detail.class_name}"
+ find(R.id.leave_request_type_name).text = detail.leave_request_type_name
+ find(R.id.leave_duration_str).text =
+ (detail.end_time - detail.start_time).durationStr()
+ find(R.id.add_time).text =
+ "${detail.start_time.toTime()} - ${detail.end_time.toTime()}"
+ find(R.id.leave_request_reason).text = detail.leave_request_reason
+ find(R.id.statusImg).setSrc(
+ when (detail.status) {
+ 1 -> "https://oa-edu-1259243469.cos.ap-chengdu.myqcloud.com/public/mini/stutakeleave_wait.png"
+ 2 -> "https://oa-edu-1259243469.cos.ap-chengdu.myqcloud.com/public/mini/stutakeleave_pass.png"
+ 3 -> "https://oa-edu-1259243469.cos.ap-chengdu.myqcloud.com/public/mini/stutakeleave_nopass.png"
+ 4 -> "https://oa-edu-1259243469.cos.ap-chengdu.myqcloud.com/public/mini/cancellation.png"
+ 5 -> "https://oa-edu-1259243469.cos.ap-chengdu.myqcloud.com/public/mini/cancellation_overtime.png"
+ else -> ""
+ }
+ )
+
+ find(R.id.stepRecycler)
+ val recyclerView = find(R.id.stepRecycler)
+ val layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
+ recyclerView.layoutManager = layoutManager
+
+ recyclerView.adapter = adapter
+ adapter.setList(detail.getStep())
+ recyclerView.scrollToPosition(adapter.itemCount - 1)
+ find(R.id.closeBtn).setOnClickListener {
+ onCloseClick(this)
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/yzx/escreen/widget/TimeView.kt b/app/src/main/java/com/yzx/escreen/widget/TimeView.kt
new file mode 100644
index 0000000..dd618fb
--- /dev/null
+++ b/app/src/main/java/com/yzx/escreen/widget/TimeView.kt
@@ -0,0 +1,28 @@
+package com.yzx.escreen.widget
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.util.AttributeSet
+import android.view.LayoutInflater
+import android.widget.FrameLayout
+import com.yzx.escreen.R
+import com.yzx.escreen.model.TimeShow
+import kotlinx.android.synthetic.main.view_time.view.*
+
+class TimeView(context: Context, attrs: AttributeSet) :
+ FrameLayout(context, attrs) {
+
+ init {
+ val view = LayoutInflater.from(context).inflate(R.layout.view_time, null)
+ addView(view)
+ }
+
+ @SuppressLint("SetTextI18n")
+ fun setTime(timeShow: TimeShow) {
+ hour.text = timeShow.hour
+ min.text = timeShow.min
+ sec.text = timeShow.sec
+ week.text = timeShow.week
+ year.text = "${timeShow.year}年${timeShow.month}月${timeShow.day}日"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 589399a..a3e6476 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -1,38 +1,47 @@
-
-
+ android:gravity="center_horizontal">
-
+
-
+
-
\ No newline at end of file
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_change.xml b/app/src/main/res/layout/dialog_change.xml
new file mode 100644
index 0000000..cdb10c1
--- /dev/null
+++ b/app/src/main/res/layout/dialog_change.xml
@@ -0,0 +1,196 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_leave.xml b/app/src/main/res/layout/dialog_leave.xml
index c694bc0..62c300d 100644
--- a/app/src/main/res/layout/dialog_leave.xml
+++ b/app/src/main/res/layout/dialog_leave.xml
@@ -83,8 +83,8 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml
index 26af7be..c397bc7 100644
--- a/app/src/main/res/layout/fragment_home.xml
+++ b/app/src/main/res/layout/fragment_home.xml
@@ -1,279 +1,296 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:layout_height="match_parent"
+ android:background="@color/backgroundColor"
+ android:orientation="vertical">
-
-
-
-
-
+ android:padding="30dp">
-
-
-
-
-
-
-
-
-
-
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="学生请假单列表"
+ android:textColor="@color/black"
+ android:textSize="@dimen/d_28"
+ android:textStyle="bold" />
-
+
-
+
-
-
-
-
-
+ android:paddingVertical="30dp">
-
+ 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">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+ 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:orientation="horizontal"
+ android:paddingTop="@dimen/d_20"
+ android:paddingBottom="@dimen/d_20">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_my.xml b/app/src/main/res/layout/fragment_my.xml
index a639514..742a31a 100644
--- a/app/src/main/res/layout/fragment_my.xml
+++ b/app/src/main/res/layout/fragment_my.xml
@@ -15,7 +15,7 @@
android:background="@color/white"
android:gravity="center_vertical"
android:orientation="horizontal"
- android:padding="10dp">
+ android:padding="30dp">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/view_time.xml b/app/src/main/res/layout/view_time.xml
new file mode 100644
index 0000000..9834fc3
--- /dev/null
+++ b/app/src/main/res/layout/view_time.xml
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-mdpi/change_select.png b/app/src/main/res/mipmap-mdpi/change_select.png
new file mode 100644
index 0000000..7452534
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/change_select.png differ
diff --git a/app/src/main/res/mipmap-mdpi/change_unselect.png b/app/src/main/res/mipmap-mdpi/change_unselect.png
new file mode 100644
index 0000000..87b1c73
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/change_unselect.png differ
diff --git a/app/src/main/res/mipmap-mdpi/leave_select.png b/app/src/main/res/mipmap-mdpi/leave_select.png
new file mode 100644
index 0000000..651da4f
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/leave_select.png differ
diff --git a/app/src/main/res/mipmap-mdpi/leave_unselect.png b/app/src/main/res/mipmap-mdpi/leave_unselect.png
new file mode 100644
index 0000000..3a96c18
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/leave_unselect.png differ
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index d34eab5..5c662e3 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -27,7 +27,7 @@
#ff8635
@android:color/transparent
@color/white
-
+ #88000000
diff --git a/app/src/main/res/values/ids.xml b/app/src/main/res/values/ids.xml
new file mode 100644
index 0000000..4b431f6
--- /dev/null
+++ b/app/src/main/res/values/ids.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 020f09b..ec498c1 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -10,6 +10,8 @@
- @color/colorAccent
- @color/backgroundColor
- 500dp
+ - true
+ - true
+
+
+
+