Kaynağa Gözat

feat: 陪玩师中心

DoggyZhang 2 ay önce
ebeveyn
işleme
289e1841cc
54 değiştirilmiş dosya ile 1658 ekleme ve 54 silme
  1. 12 4
      app/src/main/java/com/adealink/weparty/commonui/BaseViewComponent.kt
  2. 66 1
      app/src/main/java/com/adealink/weparty/commonui/widget/CommonButton.kt
  3. 6 0
      app/src/main/java/com/adealink/weparty/module/order/Router.kt
  4. 6 0
      app/src/main/java/com/adealink/weparty/module/playmate/Router.kt
  5. 15 2
      app/src/main/java/com/adealink/weparty/module/playmate/data/PlaymateData.kt
  6. 12 0
      app/src/main/java/com/adealink/weparty/module/playmate/datasource/PlaymateHttpService.kt
  7. 38 0
      app/src/main/java/com/adealink/weparty/module/playmate/event/PlaymateStatEvent.kt
  8. 9 0
      app/src/main/java/com/adealink/weparty/module/playmate/viewmodel/IPlaymateViewModel.kt
  9. 6 1
      app/src/main/java/com/adealink/weparty/url/UrlConfig.kt
  10. BIN
      app/src/main/res/drawable-xhdpi/common_setting_ic.png
  11. BIN
      app/src/main/res/drawable-xhdpi/commonui_switch_button_checked_ic.png
  12. BIN
      app/src/main/res/drawable-xhdpi/commonui_switch_button_checked_ic.webp
  13. BIN
      app/src/main/res/drawable-xhdpi/commonui_switch_button_un_checked_ic.png
  14. BIN
      app/src/main/res/drawable-xhdpi/commonui_switch_button_un_checked_ic.webp
  15. 1 0
      app/src/main/res/values/attrs.xml
  16. 5 0
      app/src/main/res/values/colors.xml
  17. 2 0
      app/src/main/res/values/strings.xml
  18. 5 0
      app/src/main/res/values/styles.xml
  19. 4 4
      module/joinus/src/main/java/com/adealink/weparty/joinus/datasource/remote/JoinUsHttpService.kt
  20. 5 1
      module/order/src/main/AndroidManifest.xml
  21. 73 0
      module/order/src/main/java/com/adealink/weparty/order/center/OrderCenterActivity.kt
  22. 34 0
      module/order/src/main/java/com/adealink/weparty/order/center/adapter/OrderSkillItemViewBinder.kt
  23. 97 0
      module/order/src/main/java/com/adealink/weparty/order/center/comp/OrderCenterDashboardComp.kt
  24. 28 0
      module/order/src/main/java/com/adealink/weparty/order/center/comp/OrderCenterRecordComp.kt
  25. 63 0
      module/order/src/main/java/com/adealink/weparty/order/center/comp/OrderCenterSkillComp.kt
  26. 7 0
      module/order/src/main/java/com/adealink/weparty/order/center/data/OrderCenterData.kt
  27. 14 0
      module/order/src/main/java/com/adealink/weparty/order/center/viewmodel/OrderCenterViewModel.kt
  28. 33 26
      module/order/src/main/java/com/adealink/weparty/order/detail/OrderDetailActivity.kt
  29. 4 0
      module/order/src/main/java/com/adealink/weparty/order/viewmodel/OrderViewModelFactory.kt
  30. 9 0
      module/order/src/main/res/drawable/order_center_item_bg.xml
  31. 11 0
      module/order/src/main/res/drawable/order_center_skill_item_bg.xml
  32. 74 0
      module/order/src/main/res/layout/activity_order_center.xml
  33. 246 0
      module/order/src/main/res/layout/layout_order_center_dashboard.xml
  34. 50 0
      module/order/src/main/res/layout/layout_order_center_record.xml
  35. 45 0
      module/order/src/main/res/layout/layout_order_center_skills.xml
  36. 50 0
      module/order/src/main/res/layout/layout_order_center_skills_item.xml
  37. 2 0
      module/order/src/main/res/values/strings.xml
  38. 7 0
      module/playmate/src/main/AndroidManifest.xml
  39. 0 7
      module/playmate/src/main/java/com/adealink/weparty/playmate/PlaymateServiceImpl.kt
  40. 26 0
      module/playmate/src/main/java/com/adealink/weparty/playmate/comment/data/CommentData.kt
  41. 21 0
      module/playmate/src/main/java/com/adealink/weparty/playmate/datasource/remote/PlaymateHttpService.kt
  42. 120 0
      module/playmate/src/main/java/com/adealink/weparty/playmate/setting/PlaymateSkillSettingActivity.kt
  43. 34 0
      module/playmate/src/main/java/com/adealink/weparty/playmate/setting/adapter/SkillItemViewBinder.kt
  44. 11 0
      module/playmate/src/main/java/com/adealink/weparty/playmate/setting/data/SkillSettingData.kt
  45. 54 0
      module/playmate/src/main/java/com/adealink/weparty/playmate/setting/viewmodel/SkillSettingViewModel.kt
  46. 52 0
      module/playmate/src/main/java/com/adealink/weparty/playmate/viewmodel/PlaymateViewModel.kt
  47. 4 0
      module/playmate/src/main/java/com/adealink/weparty/playmate/viewmodel/PlaymateViewModelFactory.kt
  48. 47 0
      module/playmate/src/main/res/layout/activity_playmate_skill_setting.xml
  49. 110 0
      module/playmate/src/main/res/layout/layout_playmate_skill_setting_item.xml
  50. 2 0
      module/playmate/src/main/res/values/strings.xml
  51. 2 1
      module/profile/src/main/java/com/adealink/weparty/profile/me/MeFragment.kt
  52. 127 0
      module/profile/src/main/java/com/adealink/weparty/profile/me/comp/OrderCenterComp.kt
  53. 9 7
      module/profile/src/main/res/layout/fragment_me.xml
  54. 0 0
      module/profile/src/main/res/layout/layout_me_order_center.xml

+ 12 - 4
app/src/main/java/com/adealink/weparty/commonui/BaseViewComponent.kt

@@ -3,16 +3,13 @@ package com.adealink.weparty.commonui
 import androidx.lifecycle.LifecycleOwner
 import com.adealink.frame.mvvm.view.ViewComponent
 
-/**
- * Created by XiaoDongLin.
- * Date: 2025/5/14
- */
 open class BaseViewComponent(lifecycleOwner: LifecycleOwner) : ViewComponent(lifecycleOwner) {
 
     override fun onCreate() {
         super.onCreate()
         initViews()
         observeViewModel()
+        loadData()
     }
 
     open fun initViews() {
@@ -23,4 +20,15 @@ open class BaseViewComponent(lifecycleOwner: LifecycleOwner) : ViewComponent(lif
 
     }
 
+    open fun loadData() {
+
+    }
+
+    fun showLoading() {
+        (activity as? BaseActivity)?.showLoading()
+    }
+
+    fun dismissLoading() {
+        (activity as? BaseActivity)?.dismissLoading()
+    }
 }

+ 66 - 1
app/src/main/java/com/adealink/weparty/commonui/widget/CommonButton.kt

@@ -36,6 +36,8 @@ class CommonButton @JvmOverloads constructor(
         const val BUTTON_CONFIRM = 1
         const val BUTTON_NORMAL_1 = 2
         const val BUTTON_NORMAL_2 = 3
+
+        const val BUSINESS_OPEN = 4
     }
 
     private val binding = LayoutCommonButtonBinding.inflate(LayoutInflater.from(context), this)
@@ -90,7 +92,11 @@ class CommonButton @JvmOverloads constructor(
 
     private var buttonRadius = 100f
 
-    private var buttonType = DEFAULT_BUTTON
+    var buttonType = DEFAULT_BUTTON
+        set(value) {
+            field = value
+            initView()
+        }
 
     init {
         initAttrs(context, attrs)
@@ -323,6 +329,65 @@ class CommonButton @JvmOverloads constructor(
                 )
             }
 
+            BUSINESS_OPEN ->{
+                background = StateListDrawable().apply {
+                    addState(
+                        intArrayOf(-android.R.attr.state_enabled),
+                        DrawableBuilder()
+                            .cornerRadius(buttonRadius.toInt())
+                            .solidColor(getColorX(R.color.color_FFC9CDD4))
+                            .build()
+                    )
+                    addState(
+                        intArrayOf(android.R.attr.state_pressed),
+                        DrawableBuilder()
+                            .gradient(true)
+                            .orientation(FlipDrawable.ORIENTATION_HORIZONTAL)
+                            .gradientRadius(buttonRadius)
+                            .cornerRadius(buttonRadius.toInt())
+                            .gradientColors(
+                                getColorX(R.color.color_804ED2FF),
+                                getColorX(R.color.color_80B1EF5D),
+                                null
+                            )
+                            .gradientType(GradientDrawable.LINEAR_GRADIENT)
+                            .angle(0)
+                            .build()
+                    )
+                    addState(
+                        intArrayOf(),
+                        DrawableBuilder()
+                            .gradient(true)
+                            .orientation(FlipDrawable.ORIENTATION_HORIZONTAL)
+                            .gradientRadius(buttonRadius)
+                            .cornerRadius(buttonRadius.toInt())
+                            .gradientColors(
+                                getColorX(R.color.color_FF4ED2FF),
+                                getColorX(R.color.color_FFB1EF5D),
+                                null
+                            )
+                            .gradientType(GradientDrawable.LINEAR_GRADIENT)
+                            .angle(0)
+                            .build()
+                    )
+                }
+
+                binding.tvName.setTextColor(
+                    ColorStateList(
+                        arrayOf(
+                            intArrayOf(-android.R.attr.state_enabled), //不可点击
+                            intArrayOf(android.R.attr.state_pressed), //按压
+                            intArrayOf() //一般状态
+                        ),
+                        intArrayOf(
+                            getColorX(R.color.white),
+                            getColorX(R.color.white),
+                            getColorX(R.color.white),
+                        )
+                    )
+                )
+            }
+
             else -> {
                 // BUTTON_CONFIRM
                 background = StateListDrawable().apply {

+ 6 - 0
app/src/main/java/com/adealink/weparty/module/order/Router.kt

@@ -86,5 +86,11 @@ interface Order {
         }
     }
 
+    interface OrderCenter {
+        companion object {
+            const val PATH = "${Common.PATH}/center"
+        }
+    }
+
 
 }

+ 6 - 0
app/src/main/java/com/adealink/weparty/module/playmate/Router.kt

@@ -68,4 +68,10 @@ interface Playmate {
             const val EXTRA_PLAYMATE_ID = "extra_playmate_id"
         }
     }
+
+    interface SkillSetting {
+        companion object {
+            const val PATH = "${Common.PATH}/skill_setting"
+        }
+    }
 }

+ 15 - 2
app/src/main/java/com/adealink/weparty/module/playmate/data/PlaymateData.kt

@@ -21,7 +21,7 @@ data class PlaymateDetailData(
     @SerializedName("price") val price: Float, //价格
     @SerializedName("unit") val unit: String, //价格单位
     @SerializedName("labels") val labels: List<String> = emptyList(), //标签
-    @SerializedName("categoryName") val categoryName: String , //品类名称
+    @SerializedName("categoryName") val categoryName: String, //品类名称
     @SerializedName("categoryIcon") val categoryIcon: String, //品类图标
     @SerializedName("languageNames") val languageNames: List<String> = emptyList(), //语言列表
 
@@ -31,4 +31,17 @@ data class PlaymateDetailData(
     @SerializedName("online") val online: Boolean = false, //是否在线
     @SerializedName("follow") val follow: Boolean = false, //是否关注
     @SerializedName("distance") val distance: Float, //距离(单位:km)
-) : Parcelable
+) : Parcelable
+
+@Parcelize
+data class PlaymateBusinessData(
+    @SerializedName("weekBeanIncome") val weekIncome: Double, //本周金豆收入
+    @SerializedName("exposureCountDay") val todayExposure: Long, //今日曝光
+    @SerializedName("visitorCount") val visitor: Long, //访客数
+    @SerializedName("playmateOpen") val businessOpen: Boolean, //陪玩师是否营业
+) : Parcelable
+
+
+data class PlaymateExposureReq(
+    @SerializedName("id") val playmateId: String, //
+)

+ 12 - 0
app/src/main/java/com/adealink/weparty/module/playmate/datasource/PlaymateHttpService.kt

@@ -0,0 +1,12 @@
+package com.adealink.weparty.module.playmate.datasource
+
+import com.adealink.frame.base.Rlt
+import com.adealink.frame.network.data.Res
+import com.adealink.weparty.module.playmate.data.PlaymateExposureReq
+import retrofit2.http.Body
+import retrofit2.http.POST
+
+interface PlaymateHttpService {
+    @POST("playmate/exposure/report")
+    suspend fun reportPlaymateExposure(@Body req: PlaymateExposureReq): Rlt<Res<Any>>
+}

+ 38 - 0
app/src/main/java/com/adealink/weparty/module/playmate/event/PlaymateStatEvent.kt

@@ -0,0 +1,38 @@
+package com.adealink.weparty.module.playmate.event
+
+import com.adealink.frame.coroutine.dispatcher.Dispatcher
+import com.adealink.frame.statistics.BaseStatEvent
+import com.adealink.frame.statistics.CommonEventKey
+import com.adealink.frame.statistics.IEventValue
+import com.adealink.weparty.App
+import com.adealink.weparty.module.playmate.data.PlaymateExposureReq
+import com.adealink.weparty.module.playmate.datasource.PlaymateHttpService
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.launch
+
+class PlaymateStatEvent(override val action: IEventValue) : BaseStatEvent("playmate") {
+
+    private val playmateHttpService by lazy {
+        App.instance.networkService.getHttpService(PlaymateHttpService::class.java)
+    }
+
+    enum class Action(override val value: String, override val desc: String) : IEventValue {
+        EXPOSURE("exposure", "陪玩师曝光"),
+    }
+
+    val id = Param(CommonEventKey.ID)
+
+    override fun send() {
+        launch {
+
+        }
+        CoroutineScope(Dispatcher.WENEXT_THREAD_POOL).launch {
+            when (action) {
+                Action.EXPOSURE -> {
+                    val reportId = id.value as? String ?: return@launch
+                    playmateHttpService.reportPlaymateExposure(PlaymateExposureReq(reportId))
+                }
+            }
+        }
+    }
+}

+ 9 - 0
app/src/main/java/com/adealink/weparty/module/playmate/viewmodel/IPlaymateViewModel.kt

@@ -2,6 +2,7 @@ package com.adealink.weparty.module.playmate.viewmodel
 
 import androidx.lifecycle.LiveData
 import com.adealink.frame.base.Rlt
+import com.adealink.weparty.module.playmate.data.PlaymateBusinessData
 import com.adealink.weparty.module.playmate.data.PlaymateCategoryData
 import com.adealink.weparty.module.playmate.data.PlaymateDetailData
 import com.adealink.weparty.module.playmate.data.UserPlaymateCategoryData
@@ -19,6 +20,14 @@ interface IPlaymateViewModel {
 
     fun loadPlaymateDetail(id: String?): LiveData<Rlt<PlaymateDetailData>>
 
+    fun openBusiness(open: Boolean): LiveData<Rlt<Any>>
 
+    fun setBusinessTime(
+        fromTime: String, //起始时间, 00:00
+        toTime: String, //结束时间, 00:00
+        weekDays: List<Int>
+    ): LiveData<Rlt<Any>>
+
+    fun getBusinessInfo(): LiveData<Rlt<PlaymateBusinessData>>
 
 }

+ 6 - 1
app/src/main/java/com/adealink/weparty/url/UrlConfig.kt

@@ -33,7 +33,7 @@ object UrlConfig {
         else -> "https://test-web.gami.vip/mine/cancellation"
     }
 
-    val rechargeDetail= when {
+    val rechargeDetail = when {
         isProdEnv -> "http://web.gami.vip/wallet/record"
         else -> "http://test-web.gami.vip/wallet/record"
     }
@@ -47,4 +47,9 @@ object UrlConfig {
         isProdEnv -> "https://web.gami.vip/user/profile"
         else -> "https://test-web.gami.vip/user/profile"
     }
+
+    val playmateApply = when {
+        isProdEnv -> "https://web.gami.vip/native/playmate/apply"
+        else -> "https://test-web.gami.vip/native/playmate/apply"
+    }
 }

BIN
app/src/main/res/drawable-xhdpi/common_setting_ic.png


BIN
app/src/main/res/drawable-xhdpi/commonui_switch_button_checked_ic.png


BIN
app/src/main/res/drawable-xhdpi/commonui_switch_button_checked_ic.webp


BIN
app/src/main/res/drawable-xhdpi/commonui_switch_button_un_checked_ic.png


BIN
app/src/main/res/drawable-xhdpi/commonui_switch_button_un_checked_ic.webp


+ 1 - 0
app/src/main/res/values/attrs.xml

@@ -67,6 +67,7 @@
             <enum name="confirm" value="1" />
             <enum name="normal1" value="2" />
             <enum name="normal2" value="3" />
+            <enum name="business_open" value="4" />
         </attr>
         <attr name="button_left_drawable" format="reference" />
         <attr name="button_left_drawable_width" format="dimension" />

+ 5 - 0
app/src/main/res/values/colors.xml

@@ -1197,4 +1197,9 @@
     <color name="color_FFDDFFB7">#FFDDFFB7</color>
     <color name="color_CCDDFFB7">#FFDDFFB7</color>
     <color name="color_FF878A99">#FF878A99</color>
+
+    <color name="color_FF4ED2FF">#FF4ED2FF</color>
+    <color name="color_804ED2FF">#804ED2FF</color>
+    <color name="color_FFB1EF5D">#FFB1EF5D</color>
+    <color name="color_80B1EF5D">#80B1EF5D</color>
 </resources>

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

@@ -349,6 +349,8 @@
     <string name="common_this_week_income">This Week\'s Income</string>
     <string name="common_today_exposure">Today\'s Exposure</string>
     <string name="common_recent_visitor">Recent Visitors</string>
+    <string name="common_accept_order_opening_service">Opening…</string>
+    <string name="common_accept_order_opening_service_tips">Continuously recommended to more users</string>
     <string name="common_accept_order_open_service">Open For Business</string>
     <string name="common_accept_order_open_service_tips">Activate the status of grabbing orders</string>
 </resources>

+ 5 - 0
app/src/main/res/values/styles.xml

@@ -175,4 +175,9 @@
         <item name="ripple_circle_count">2</item>
         <item name="ripple_circle_stroke_width">2dp</item>
     </style>
+
+    <style name="CommonSwitchButton">
+        <item name="android:layout_width">29dp</item>
+        <item name="android:layout_height">17dp</item>
+    </style>
 </resources>

+ 4 - 4
module/joinus/src/main/java/com/adealink/weparty/joinus/datasource/remote/JoinUsHttpService.kt

@@ -18,7 +18,7 @@ interface JoinUsHttpService {
     /**
      * 查询陪玩师申请1-3步骤现有信息
      */
-    @POST("playmate/curInfo")
+    @POST("playmate/apply/curInfo")
     suspend fun loadJoinUsProgress(): Rlt<Res<JoinUsData>>
 
     /**
@@ -35,18 +35,18 @@ interface JoinUsHttpService {
     @POST("user/bind/mobile")
     suspend fun bindPhone(@Body req: BindPhoneReq): Rlt<Res<Any>>
 
-    @POST("playmate/improve/info")
+    @POST("playmate/apply/improve/info")
     suspend fun improveUserInfo(@Body req: ImproveUserInfoReq): Rlt<Res<JoinUsData>>
 
     @POST("base/consts/config")
     suspend fun getLanguageConfig(): Rlt<Res<LanguageConfigRes>>
 
 
-    @POST("playmate/setp3/info/get")
+    @POST("playmate/apply/setp3/info/get")
     suspend fun getCategoryFormConfig(@Body req: CategoryFormReq): Rlt<Res<JoinStep3>>
 
 
-    @POST("playmate/apply")
+    @POST(" playmate/apply/submit")
     suspend fun submitPlaymateApplyForm(@Body req: SubmitFormReq): Rlt<Res<Any>>
 
 }

+ 5 - 1
module/order/src/main/AndroidManifest.xml

@@ -25,7 +25,7 @@
             android:screenOrientation="portrait"
             android:theme="@style/AppTheme" />
         <activity
-            android:name=".OrderDetailActivity"
+            android:name=".detail.OrderDetailActivity"
             android:screenOrientation="portrait"
             android:theme="@style/AppTheme" />
         <activity
@@ -44,5 +44,9 @@
             android:name=".qrcode.QRCodeOrderActivity"
             android:screenOrientation="portrait"
             android:theme="@style/AppTheme" />
+        <activity
+            android:name=".center.OrderCenterActivity"
+            android:screenOrientation="portrait"
+            android:theme="@style/AppTheme" />
     </application>
 </manifest>

+ 73 - 0
module/order/src/main/java/com/adealink/weparty/order/center/OrderCenterActivity.kt

@@ -0,0 +1,73 @@
+package com.adealink.weparty.order.center
+
+import androidx.activity.viewModels
+import androidx.constraintlayout.widget.ConstraintLayout
+import androidx.core.view.updateLayoutParams
+import com.adealink.frame.base.Rlt
+import com.adealink.frame.base.fastLazy
+import com.adealink.frame.mvvm.view.viewBinding
+import com.adealink.frame.router.Router
+import com.adealink.frame.router.annotation.RouterUri
+import com.adealink.frame.util.statusBarHeight
+import com.adealink.weparty.commonui.BaseActivity
+import com.adealink.weparty.commonui.toast.util.showFailedToast
+import com.adealink.weparty.module.order.Order
+import com.adealink.weparty.module.playmate.PlaymateModule
+import com.adealink.weparty.order.center.comp.OrderCenterDashboardComp
+import com.adealink.weparty.order.center.comp.OrderCenterRecordComp
+import com.adealink.weparty.order.center.comp.OrderCenterSkillComp
+import com.adealink.weparty.order.center.viewmodel.OrderCenterViewModel
+import com.adealink.weparty.order.databinding.ActivityOrderCenterBinding
+import com.adealink.weparty.order.viewmodel.OrderViewModelFactory
+
+@RouterUri(path = [Order.OrderCenter.PATH], desc = "接单中心")
+class OrderCenterActivity : BaseActivity() {
+
+    private val binding by viewBinding(ActivityOrderCenterBinding::inflate)
+
+    private val playmateViewModel by fastLazy { PlaymateModule.getPlaymateViewModel(this) }
+
+    private val orderCenterViewModel by viewModels<OrderCenterViewModel> { OrderViewModelFactory() }
+
+    override fun onBeforeCreate() {
+        super.onBeforeCreate()
+        Router.bind(this)
+    }
+
+    override fun initViews() {
+        super.initViews()
+        setContentView(binding.root)
+        binding.topBar.updateLayoutParams<ConstraintLayout.LayoutParams> {
+            topMargin = this@OrderCenterActivity.statusBarHeight()
+        }
+    }
+
+    override fun onResume() {
+        super.onResume()
+        loadData()
+    }
+
+    override fun initComponents() {
+        super.initComponents()
+        OrderCenterDashboardComp(this, binding.vDashboard).attach()
+        OrderCenterSkillComp(this, binding.vSkills).attach()
+        OrderCenterRecordComp(this, binding.vRecord).attach()
+    }
+
+    override fun loadData() {
+        super.loadData()
+        playmateViewModel?.getBusinessInfo()?.observe(this) { rlt ->
+            when (rlt) {
+                is Rlt.Failed -> {
+                    showFailedToast(rlt)
+                }
+
+                is Rlt.Success -> {
+                    orderCenterViewModel.updateBusinessData(rlt.data)
+                }
+            }
+        }
+    }
+
+
+}

+ 34 - 0
module/order/src/main/java/com/adealink/weparty/order/center/adapter/OrderSkillItemViewBinder.kt

@@ -0,0 +1,34 @@
+package com.adealink.weparty.order.center.adapter
+
+import android.view.LayoutInflater
+import android.view.ViewGroup
+import com.adealink.weparty.commonui.recycleview.adapter.BindingViewHolder
+import com.adealink.weparty.commonui.recycleview.adapter.multitype.ItemViewBinder
+import com.adealink.weparty.order.center.data.OrderSkillItem
+import com.adealink.weparty.order.databinding.LayoutOrderCenterSkillsItemBinding
+
+class OrderSkillItemViewBinder() :
+    ItemViewBinder<OrderSkillItem, BindingViewHolder<LayoutOrderCenterSkillsItemBinding>>() {
+
+    override fun onBindViewHolder(
+        holder: BindingViewHolder<LayoutOrderCenterSkillsItemBinding>,
+        item: OrderSkillItem,
+    ) {
+        holder.binding.ivIcon.setImageUrl(item.data.icon)
+        holder.binding.tvTitle.text = item.data.name
+        holder.binding.vPrice.setPrice(item.data.price, item.data.unit)
+    }
+
+    override fun onCreateViewHolder(
+        inflater: LayoutInflater,
+        parent: ViewGroup,
+    ): BindingViewHolder<LayoutOrderCenterSkillsItemBinding> {
+        return BindingViewHolder(
+            LayoutOrderCenterSkillsItemBinding.inflate(
+                inflater,
+                parent,
+                false
+            )
+        )
+    }
+}

+ 97 - 0
module/order/src/main/java/com/adealink/weparty/order/center/comp/OrderCenterDashboardComp.kt

@@ -0,0 +1,97 @@
+package com.adealink.weparty.order.center.comp
+
+import androidx.lifecycle.LifecycleOwner
+import com.adealink.frame.aab.util.getCompatString
+import com.adealink.frame.base.Rlt
+import com.adealink.frame.base.fastLazy
+import com.adealink.frame.mvvm.viewmodel.activityViewModels
+import com.adealink.frame.router.Router
+import com.adealink.frame.util.onClick
+import com.adealink.weparty.commonui.BaseViewComponent
+import com.adealink.weparty.commonui.toast.util.showFailedToast
+import com.adealink.weparty.commonui.widget.CommonButton
+import com.adealink.weparty.module.playmate.PlaymateModule
+import com.adealink.weparty.module.wallet.Wallet
+import com.adealink.weparty.module.wallet.data.Currency
+import com.adealink.weparty.order.center.viewmodel.OrderCenterViewModel
+import com.adealink.weparty.order.databinding.LayoutOrderCenterDashboardBinding
+import com.adealink.weparty.order.viewmodel.OrderViewModelFactory
+import com.adealink.weparty.util.formatNumberStr
+import com.adealink.weparty.R as APP_R
+
+class OrderCenterDashboardComp(
+    lifecycleOwner: LifecycleOwner,
+    val binding: LayoutOrderCenterDashboardBinding
+) : BaseViewComponent(lifecycleOwner) {
+
+    private val playmateViewModel by fastLazy { PlaymateModule.getPlaymateViewModel(requireActivity()) }
+    private val orderCenterViewModel by activityViewModels<OrderCenterViewModel> { OrderViewModelFactory() }
+    override fun initViews() {
+        super.initViews()
+        binding.clIncome.onClick {
+            goIncome()
+        }
+    }
+
+    override fun observeViewModel() {
+        super.observeViewModel()
+        orderCenterViewModel.businessDataLD.observe(viewLifecycleOwner) { business ->
+            binding.tvIncome.text = formatNumberStr(business?.weekIncome ?: 0.0, false)
+            binding.tvExposure.text = formatNumberStr(business?.todayExposure ?: 0, false)
+            binding.tvVisitor.text = formatNumberStr(business?.visitor ?: 0, false)
+            if (business == null) {
+                binding.btnService.buttonType = CommonButton.BUTTON_NORMAL_1
+                binding.btnService.isEnabled = false
+                binding.tvService.text =
+                    getCompatString(APP_R.string.common_accept_order_open_service)
+                binding.tvServiceTips.text =
+                    getCompatString(APP_R.string.common_accept_order_open_service_tips)
+            } else if (business.businessOpen) {
+                binding.btnService.buttonType = CommonButton.BUSINESS_OPEN
+                binding.btnService.isEnabled = true
+                binding.tvService.text =
+                    getCompatString(APP_R.string.common_accept_order_opening_service)
+                binding.tvServiceTips.text =
+                    getCompatString(APP_R.string.common_accept_order_opening_service_tips)
+                binding.btnService.onClick {
+                    switchBusinessOpen(false)
+                }
+            } else {
+                binding.btnService.buttonType = CommonButton.BUTTON_NORMAL_1
+                binding.btnService.isEnabled = true
+                binding.tvService.text =
+                    getCompatString(APP_R.string.common_accept_order_open_service)
+                binding.tvServiceTips.text =
+                    getCompatString(APP_R.string.common_accept_order_open_service_tips)
+                binding.btnService.onClick {
+                    switchBusinessOpen(true)
+                }
+            }
+        }
+    }
+
+    private fun switchBusinessOpen(open: Boolean) {
+        showLoading()
+        playmateViewModel?.openBusiness(open)?.observe(viewLifecycleOwner) { rlt ->
+            dismissLoading()
+            when (rlt) {
+                is Rlt.Failed -> {
+                    showFailedToast(rlt)
+                }
+
+                is Rlt.Success -> {
+                    loadData()
+                }
+            }
+        }
+    }
+
+
+    private fun goIncome() {
+        val act = activity ?: return
+        Router.build(act, Wallet.Recharge.PATH)
+            .putExtra(Wallet.Common.EXTRA_CURRENCY, Currency.BEAN.type)
+            .start()
+    }
+
+}

+ 28 - 0
module/order/src/main/java/com/adealink/weparty/order/center/comp/OrderCenterRecordComp.kt

@@ -0,0 +1,28 @@
+package com.adealink.weparty.order.center.comp
+
+import androidx.lifecycle.LifecycleOwner
+import com.adealink.frame.router.Router
+import com.adealink.frame.util.onClick
+import com.adealink.weparty.commonui.BaseViewComponent
+import com.adealink.weparty.module.order.Order
+import com.adealink.weparty.order.databinding.LayoutOrderCenterRecordBinding
+
+class OrderCenterRecordComp(
+    lifecycleOwner: LifecycleOwner,
+    val binding: LayoutOrderCenterRecordBinding
+) : BaseViewComponent(lifecycleOwner) {
+
+    override fun initViews() {
+        super.initViews()
+        binding.root.onClick {
+            goOrderList()
+        }
+
+    }
+
+    private fun goOrderList() {
+        val act = activity ?: return
+        Router.build(act, Order.PlaymateList.PATH).start()
+    }
+
+}

+ 63 - 0
module/order/src/main/java/com/adealink/weparty/order/center/comp/OrderCenterSkillComp.kt

@@ -0,0 +1,63 @@
+package com.adealink.weparty.order.center.comp
+
+import androidx.lifecycle.LifecycleOwner
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.adealink.frame.base.fastLazy
+import com.adealink.frame.router.Router
+import com.adealink.frame.util.onClick
+import com.adealink.weparty.commonui.BaseViewComponent
+import com.adealink.weparty.commonui.ext.dp
+import com.adealink.weparty.commonui.ext.gone
+import com.adealink.weparty.commonui.ext.show
+import com.adealink.weparty.commonui.recycleview.adapter.MultiTypeListAdapter
+import com.adealink.weparty.commonui.recycleview.itemdecoration.VerticalSpaceItemDecoration
+import com.adealink.weparty.module.playmate.Playmate
+import com.adealink.weparty.module.profile.ProfileModule
+import com.adealink.weparty.order.center.adapter.OrderSkillItemViewBinder
+import com.adealink.weparty.order.center.data.OrderSkillItem
+import com.adealink.weparty.order.databinding.LayoutOrderCenterSkillsBinding
+
+class OrderCenterSkillComp(
+    lifecycleOwner: LifecycleOwner,
+    val binding: LayoutOrderCenterSkillsBinding
+) : BaseViewComponent(lifecycleOwner) {
+    private val skillAdapter by fastLazy { MultiTypeListAdapter<OrderSkillItem>() }
+
+    private val profileViewModel by fastLazy { ProfileModule.getProfileViewModel(requireActivity()) }
+
+    override fun initViews() {
+        super.initViews()
+        binding.root.onClick {
+            goSkillSetting()
+        }
+        skillAdapter.register(OrderSkillItemViewBinder())
+        binding.rvSkills.adapter = skillAdapter
+        binding.rvSkills.layoutManager = LinearLayoutManager(context, RecyclerView.VERTICAL, false)
+        binding.rvSkills.addItemDecoration(
+            VerticalSpaceItemDecoration(8.dp())
+        )
+    }
+
+    override fun observeViewModel() {
+        super.observeViewModel()
+        profileViewModel?.userInfoLD?.observe(viewLifecycleOwner) { userInfo ->
+            submitSkills(userInfo?.skills?.map { OrderSkillItem(it) })
+        }
+    }
+
+    private fun submitSkills(items: List<OrderSkillItem>?) {
+        if (items.isNullOrEmpty()) {
+            binding.rvSkills.gone()
+        } else {
+            binding.rvSkills.show()
+            skillAdapter.submitList(items)
+        }
+    }
+
+    private fun goSkillSetting() {
+        val act = activity ?: return
+        Router.build(act, Playmate.SkillSetting.PATH).start()
+    }
+
+}

+ 7 - 0
module/order/src/main/java/com/adealink/weparty/order/center/data/OrderCenterData.kt

@@ -0,0 +1,7 @@
+package com.adealink.weparty.order.center.data
+
+import com.adealink.weparty.module.profile.data.UserPlaymateSkill
+
+data class OrderSkillItem(
+    val data: UserPlaymateSkill
+)

+ 14 - 0
module/order/src/main/java/com/adealink/weparty/order/center/viewmodel/OrderCenterViewModel.kt

@@ -0,0 +1,14 @@
+package com.adealink.weparty.order.center.viewmodel
+
+import com.adealink.frame.mvvm.livedata.ExtMutableLiveData
+import com.adealink.frame.mvvm.viewmodel.BaseViewModel
+import com.adealink.weparty.module.playmate.data.PlaymateBusinessData
+
+class OrderCenterViewModel : BaseViewModel() {
+
+    val businessDataLD = ExtMutableLiveData<PlaymateBusinessData?>()
+    fun updateBusinessData(data: PlaymateBusinessData?) {
+        businessDataLD.send(data)
+    }
+
+}

+ 33 - 26
module/order/src/main/java/com/adealink/weparty/order/OrderDetailActivity.kt → module/order/src/main/java/com/adealink/weparty/order/detail/OrderDetailActivity.kt

@@ -1,4 +1,4 @@
-package com.adealink.weparty.order
+package com.adealink.weparty.order.detail
 
 import android.annotation.SuppressLint
 import android.os.Build
@@ -23,6 +23,7 @@ import com.adealink.frame.util.formatTime
 import com.adealink.frame.util.onClick
 import com.adealink.frame.util.removeUiCallbacks
 import com.adealink.frame.util.statusBarHeight
+import com.adealink.weparty.R
 import com.adealink.weparty.commonui.BaseActivity
 import com.adealink.weparty.commonui.DEFAULT_FONT_BOLD
 import com.adealink.weparty.commonui.ext.dp
@@ -42,7 +43,7 @@ import com.adealink.weparty.module.order.data.OrderStatus
 import com.adealink.weparty.module.order.util.getUserOrderStatusText
 import com.adealink.weparty.order.databinding.ActivityOrderDetailBinding
 import com.adealink.weparty.order.dialog.EvaluateOrderDialog
-import com.adealink.weparty.order.refund.PlaymateEvidenceActivity.Companion.PICTURE_SPAN
+import com.adealink.weparty.order.refund.PlaymateEvidenceActivity
 import com.adealink.weparty.order.refund.adapter.PhotoItemViewBinder
 import com.adealink.weparty.order.refund.data.BasePhotoItemData
 import com.adealink.weparty.order.refund.data.PhotoItemData
@@ -54,7 +55,6 @@ import com.adealink.weparty.util.TIME_FORMAT_DMY_HMS
 import com.adealink.weparty.util.goImagePreviewActivity
 import okhttp3.internal.format
 import kotlin.math.max
-import com.adealink.weparty.R as APP_R
 
 @RouterUri(path = [Order.Detail.PATH], desc = "订单详情")
 class OrderDetailActivity : BaseActivity() {
@@ -88,7 +88,7 @@ class OrderDetailActivity : BaseActivity() {
         val statusBarHeight = this@OrderDetailActivity.statusBarHeight()
         binding.topBar.setPadding(0, statusBarHeight, 0, 0)
         binding.topBar.updateLayoutParams<ConstraintLayout.LayoutParams> {
-            height = statusBarHeight + getCompatDimension(APP_R.dimen.common_top_bar_height).toInt()
+            height = statusBarHeight + getCompatDimension(R.dimen.common_top_bar_height).toInt()
         }
 
         binding.btnCancel.onClick {
@@ -113,9 +113,15 @@ class OrderDetailActivity : BaseActivity() {
                 }
             ))
         binding.rvReasonPicture.adapter = pictureAdapter
-        binding.rvReasonPicture.layoutManager = GridLayoutManager(this, PICTURE_SPAN)
+        binding.rvReasonPicture.layoutManager =
+            GridLayoutManager(this, PlaymateEvidenceActivity.Companion.PICTURE_SPAN)
         binding.rvReasonPicture.addItemDecoration(
-            GridSpacingItemDecoration(PICTURE_SPAN, 4.dp(), 4.dp(), false)
+            GridSpacingItemDecoration(
+                PlaymateEvidenceActivity.Companion.PICTURE_SPAN,
+                4.dp(),
+                4.dp(),
+                false
+            )
         )
 
         val orderData = this@OrderDetailActivity.orderInfo
@@ -152,7 +158,7 @@ class OrderDetailActivity : BaseActivity() {
     @SuppressLint("SetTextI18n")
     private fun updateOrderDetail(data: OrderDetailData?) {
         this.orderDetail = data
-        val orderStatus = OrderStatus.map(data?.order?.status)
+        val orderStatus = OrderStatus.Companion.map(data?.order?.status)
         binding.ivOrderStatus.setImageResource(
             getUserOrderStatusIcon(
                 orderStatus,
@@ -166,9 +172,9 @@ class OrderDetailActivity : BaseActivity() {
             || data?.order?.status == OrderStatus.PLAYMATE_REFUSE.status
             || data?.order?.status == OrderStatus.USER_CANCEL.status
         ) {
-            binding.ivTopBg.setImageResource(R.drawable.order_detail_top_cancel_bg)
+            binding.ivTopBg.setImageResource(com.adealink.weparty.order.R.drawable.order_detail_top_cancel_bg)
         } else {
-            binding.ivTopBg.setImageResource(R.drawable.order_detail_top_bg)
+            binding.ivTopBg.setImageResource(com.adealink.weparty.order.R.drawable.order_detail_top_bg)
         }
 
         binding.ivOrderAvatar.setImageUrl(data?.order?.avatar)
@@ -288,47 +294,47 @@ class OrderDetailActivity : BaseActivity() {
         isRefundApply: Boolean? //是否处于申请退款中
     ): Int {
         if (isRefundApply == true) {
-            return R.drawable.order_status_in_progress_ic
+            return com.adealink.weparty.order.R.drawable.order_status_in_progress_ic
         }
         return when (status) {
             OrderStatus.CREATE_ORDER -> {
-                R.drawable.order_status_in_progress_ic
+                com.adealink.weparty.order.R.drawable.order_status_in_progress_ic
             }
 
             OrderStatus.WAIT_FOR_ACCEPT -> {
-                R.drawable.order_status_in_progress_ic
+                com.adealink.weparty.order.R.drawable.order_status_in_progress_ic
             }
 
             OrderStatus.PLAYMATE_ACCEPT -> {
-                R.drawable.order_status_accept_ic
+                com.adealink.weparty.order.R.drawable.order_status_accept_ic
             }
 
             OrderStatus.PLAYMATE_IN_SERVICE -> {
-                R.drawable.order_status_in_progress_ic
+                com.adealink.weparty.order.R.drawable.order_status_in_progress_ic
             }
 
             OrderStatus.PLAYMATE_END_SERVICE -> {
-                R.drawable.order_status_in_progress_ic
+                com.adealink.weparty.order.R.drawable.order_status_in_progress_ic
             }
 
             OrderStatus.PLAYMATE_REFUSE -> {
-                R.drawable.order_status_cancel_ic
+                com.adealink.weparty.order.R.drawable.order_status_cancel_ic
             }
 
             OrderStatus.COMPLETE -> {
-                R.drawable.order_status_finish_ic
+                com.adealink.weparty.order.R.drawable.order_status_finish_ic
             }
 
             OrderStatus.USER_REFUND -> {
-                R.drawable.order_status_finish_ic
+                com.adealink.weparty.order.R.drawable.order_status_finish_ic
             }
 
             OrderStatus.USER_CANCEL -> {
-                R.drawable.order_status_cancel_ic
+                com.adealink.weparty.order.R.drawable.order_status_cancel_ic
             }
 
             null -> {
-                R.drawable.order_status_in_progress_ic
+                com.adealink.weparty.order.R.drawable.order_status_in_progress_ic
             }
         }
     }
@@ -365,13 +371,14 @@ class OrderDetailActivity : BaseActivity() {
         val second = countDownSecond % 60
 
         val timeStr = "${format("%02d", minute)}:${format("%02d", second)}"
-        val text = getCompatString(R.string.order_auto_cancel_title, timeStr)
+        val text =
+            getCompatString(com.adealink.weparty.order.R.string.order_auto_cancel_title, timeStr)
         binding.tvAcceptCountDown.text = SpannableStringBuilder(text).apply {
             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
                 findAndSetSpan(TypefaceSpan(DEFAULT_FONT_BOLD), timeStr)
             }
             findAndSetSpan(
-                ForegroundColorSpan(getCompatColor(APP_R.color.color_FF1789FF)),
+                ForegroundColorSpan(getCompatColor(R.color.color_FF1789FF)),
                 timeStr
             )
         }
@@ -388,8 +395,8 @@ class OrderDetailActivity : BaseActivity() {
         }
 
         CommonDialog.Builder()
-            .title(getCompatString(APP_R.string.common_user_cancel_order_tips))
-            .positiveText(getCompatString(APP_R.string.commonui_confirm))
+            .title(getCompatString(R.string.common_user_cancel_order_tips))
+            .positiveText(getCompatString(R.string.commonui_confirm))
             .setShowDefaultCancel(true)
             .onPositive {
                 cancel()
@@ -415,8 +422,8 @@ class OrderDetailActivity : BaseActivity() {
         }
 
         CommonDialog.Builder()
-            .title(getCompatString(APP_R.string.common_user_complete_order_tips))
-            .positiveText(getCompatString(APP_R.string.commonui_confirm))
+            .title(getCompatString(R.string.common_user_complete_order_tips))
+            .positiveText(getCompatString(R.string.commonui_confirm))
             .setShowDefaultCancel(true)
             .onPositive {
                 complete()

+ 4 - 0
module/order/src/main/java/com/adealink/weparty/order/viewmodel/OrderViewModelFactory.kt

@@ -2,6 +2,7 @@ package com.adealink.weparty.order.viewmodel
 
 import androidx.lifecycle.ViewModel
 import androidx.lifecycle.ViewModelProvider
+import com.adealink.weparty.order.center.viewmodel.OrderCenterViewModel
 
 @Suppress("UNCHECKED_CAST")
 class OrderViewModelFactory : ViewModelProvider.NewInstanceFactory() {
@@ -27,6 +28,9 @@ class OrderViewModelFactory : ViewModelProvider.NewInstanceFactory() {
                 isAssignableFrom(QRCodeOrderViewModel::class.java) ->
                     QRCodeOrderViewModel()
 
+                isAssignableFrom(OrderCenterViewModel::class.java) ->
+                    OrderCenterViewModel()
+
                 else ->
                     throw IllegalArgumentException("Unknown ViewModel class: ${modelClass.name}")
             } as T

+ 9 - 0
module/order/src/main/res/drawable/order_center_item_bg.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+
+    <corners android:radius="12dp" />
+
+    <solid android:color="@color/white" />
+
+</shape>

+ 11 - 0
module/order/src/main/res/drawable/order_center_skill_item_bg.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+
+    <corners android:radius="12dp" />
+
+    <stroke
+        android:width="1dp"
+        android:color="@color/color_FFC9CDD4" />
+
+</shape>

+ 74 - 0
module/order/src/main/res/layout/activity_order_center.xml

@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout 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="match_parent"
+    android:background="@color/color_FFF1F2F5">
+
+    <androidx.appcompat.widget.AppCompatImageView
+        android:layout_width="0dp"
+        android:layout_height="0dp"
+        app:layout_constraintDimensionRatio="375:173"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        app:srcCompat="@drawable/common_app_top_bg_ic" />
+
+    <com.adealink.weparty.commonui.widget.CommonTopBar
+        android:id="@+id/top_bar"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/common_top_bar_height"
+        app:bar_background="@color/transparent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        app:top_bar_title="@string/order_center" />
+
+    <androidx.core.widget.NestedScrollView
+        style="@style/CommonVerticalFade"
+        android:layout_width="0dp"
+        android:layout_height="0dp"
+        android:orientation="vertical"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/top_bar">
+
+        <androidx.appcompat.widget.LinearLayoutCompat
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical">
+
+            <include
+                android:id="@+id/v_dashboard"
+                layout="@layout/layout_order_center_dashboard"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginHorizontal="16dp"
+                android:layout_marginTop="10dp"
+                app:layout_constraintTop_toBottomOf="@id/top_bar" />
+
+
+            <include
+                android:id="@+id/v_skills"
+                layout="@layout/layout_order_center_skills"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginHorizontal="16dp"
+                android:layout_marginTop="12dp"
+                app:layout_constraintTop_toBottomOf="@id/top_bar" />
+
+            <include
+                android:id="@+id/v_record"
+                layout="@layout/layout_order_center_record"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginHorizontal="16dp"
+                android:layout_marginTop="12dp"
+                app:layout_constraintTop_toBottomOf="@id/top_bar" />
+
+        </androidx.appcompat.widget.LinearLayoutCompat>
+
+    </androidx.core.widget.NestedScrollView>
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 246 - 0
module/order/src/main/res/layout/layout_order_center_dashboard.xml

@@ -0,0 +1,246 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout 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:background="@drawable/order_center_item_bg"
+    android:padding="12dp"
+    tools:ignore="HardcodedText">
+
+    <!--本周收入-->
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/cl_income"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:paddingHorizontal="12dp"
+        android:paddingBottom="16dp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintHorizontal_weight="2"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent">
+
+        <androidx.appcompat.widget.AppCompatImageView
+            android:id="@+id/iv_income"
+            android:layout_width="20dp"
+            android:layout_height="20dp"
+            app:layout_constraintBottom_toBottomOf="@id/tv_income"
+            app:layout_constraintEnd_toStartOf="@id/tv_income"
+            app:layout_constraintHorizontal_chainStyle="packed"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="@id/tv_income"
+            app:srcCompat="@drawable/common_wallet_bean_ic" />
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tv_income"
+            android:layout_width="wrap_content"
+            android:layout_height="36dp"
+            android:layout_marginStart="3dp"
+            android:ellipsize="end"
+            android:fontFamily="@font/poppins_semibold"
+            android:gravity="center"
+            android:includeFontPadding="false"
+            android:singleLine="true"
+            android:text="0"
+            android:textColor="@color/color_FF1D2129"
+            android:textSize="24sp"
+            app:layout_constrainedWidth="true"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toEndOf="@id/iv_income"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tv_income_desc"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginHorizontal="4dp"
+            android:layout_marginTop="6dp"
+            android:ellipsize="end"
+            android:gravity="center"
+            android:includeFontPadding="false"
+            android:maxLines="2"
+            android:text="@string/common_this_week_income"
+            android:textColor="@color/color_FF4E5969"
+            android:textSize="12sp"
+            app:layout_constrainedWidth="true"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@id/tv_income" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+    <!--今日曝光-->
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/cl_exposure"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:paddingHorizontal="12dp"
+        android:paddingBottom="16dp"
+        app:layout_constraintEnd_toStartOf="@id/cl_visitor"
+        app:layout_constraintHorizontal_weight="1"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/cl_income">
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tv_exposure"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="3dp"
+            android:layout_marginTop="4dp"
+            android:ellipsize="end"
+            android:fontFamily="@font/poppins_semibold"
+            android:gravity="center"
+            android:includeFontPadding="false"
+            android:singleLine="true"
+            android:text="0"
+            android:textColor="@color/color_FF1D2129"
+            android:textSize="18sp"
+            app:layout_constrainedWidth="true"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="2dp"
+            android:ellipsize="end"
+            android:gravity="center"
+            android:includeFontPadding="false"
+            android:maxLines="2"
+            android:text="@string/common_today_exposure"
+            android:textColor="@color/color_FF4E5969"
+            android:textSize="12sp"
+            app:layout_constrainedWidth="true"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@id/tv_exposure" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+    <View
+        android:layout_width="1dp"
+        android:layout_height="36dp"
+        android:background="@color/color_FFD9D9D9"
+        app:layout_constraintBottom_toBottomOf="@id/cl_exposure"
+        app:layout_constraintStart_toEndOf="@id/cl_exposure"
+        app:layout_constraintTop_toTopOf="@id/cl_exposure" />
+
+    <!--本周收入-->
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/cl_visitor"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginEnd="16dp"
+        android:paddingHorizontal="12dp"
+        android:paddingBottom="16dp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintHorizontal_weight="1"
+        app:layout_constraintStart_toEndOf="@id/cl_exposure"
+        app:layout_constraintTop_toBottomOf="@id/cl_income">
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tv_visitor"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="3dp"
+            android:layout_marginTop="4dp"
+            android:ellipsize="end"
+            android:fontFamily="@font/poppins_semibold"
+            android:gravity="center"
+            android:includeFontPadding="false"
+            android:singleLine="true"
+            android:text="0"
+            android:textColor="@color/color_FF1D2129"
+            android:textSize="18sp"
+            app:layout_constrainedWidth="true"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="2dp"
+            android:ellipsize="end"
+            android:gravity="center"
+            android:includeFontPadding="false"
+            android:maxLines="2"
+            android:text="@string/common_recent_visitor"
+            android:textColor="@color/color_FF4E5969"
+            android:textSize="12sp"
+            app:layout_constrainedWidth="true"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@id/tv_visitor" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+    <androidx.constraintlayout.widget.Barrier
+        android:id="@+id/barrier_bottom"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        app:barrierDirection="bottom"
+        app:constraint_referenced_ids="cl_income,cl_exposure,cl_visitor" />
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginHorizontal="12dp"
+        android:layout_marginTop="12dp"
+        android:minHeight="54dp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/barrier_bottom">
+
+        <com.adealink.weparty.commonui.widget.CommonButton
+            android:id="@+id/btn_service"
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tv_service"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="3dp"
+            android:ellipsize="end"
+            android:fontFamily="@font/poppins_semibold"
+            android:gravity="center"
+            android:includeFontPadding="false"
+            android:singleLine="true"
+            android:text="@string/common_accept_order_open_service"
+            android:textColor="@color/white"
+            android:textSize="16sp"
+            app:layout_constrainedWidth="true"
+            app:layout_constraintBottom_toTopOf="@id/tv_service_tips"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintVertical_chainStyle="packed" />
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tv_service_tips"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:ellipsize="end"
+            android:gravity="center"
+            android:includeFontPadding="false"
+            android:maxLines="2"
+            android:singleLine="true"
+            android:text="@string/common_accept_order_open_service_tips"
+            android:textColor="@color/white"
+            android:textSize="11sp"
+            app:layout_constrainedWidth="true"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@id/tv_service" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 50 - 0
module/order/src/main/res/layout/layout_order_center_record.xml

@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout 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:background="@drawable/order_center_item_bg"
+    android:paddingHorizontal="16dp"
+    tools:ignore="HardcodedText">
+
+    <androidx.appcompat.widget.AppCompatTextView
+        android:id="@+id/tv_accept_order"
+        android:layout_width="wrap_content"
+        android:layout_height="40dp"
+        android:layout_marginEnd="8dp"
+        android:ellipsize="end"
+        android:fontFamily="@font/poppins_semibold"
+        android:gravity="start|center_vertical"
+        android:includeFontPadding="false"
+        android:text="@string/playmate_order_title"
+        android:textColor="@color/color_FF1D2129"
+        android:textSize="16sp"
+        app:layout_constrainedWidth="true"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toStartOf="@id/v_dot"
+        app:layout_constraintHorizontal_bias="0"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <com.adealink.frame.dot.DotView
+        android:id="@+id/v_dot"
+        style="@style/CommonRedDot"
+        android:layout_marginEnd="2dp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toStartOf="@id/iv_go"
+        app:layout_constraintTop_toTopOf="parent"
+        tools:text="Now" />
+
+    <androidx.appcompat.widget.AppCompatImageView
+        android:id="@+id/iv_go"
+        android:layout_width="16dp"
+        android:layout_height="16dp"
+        android:rotationY="@integer/locale_mirror_flip"
+        app:layout_constraintBottom_toBottomOf="@id/tv_accept_order"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintTop_toTopOf="@id/tv_accept_order"
+        app:srcCompat="@drawable/common_go_ic" />
+
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 45 - 0
module/order/src/main/res/layout/layout_order_center_skills.xml

@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout 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:background="@drawable/order_center_item_bg"
+    tools:ignore="HardcodedText">
+
+    <androidx.appcompat.widget.AppCompatTextView
+        android:id="@+id/tv_title"
+        android:layout_width="wrap_content"
+        android:layout_height="40dp"
+        android:layout_marginStart="16dp"
+        android:fontFamily="@font/poppins_semibold"
+        android:gravity="start|center_vertical"
+        android:includeFontPadding="false"
+        android:text="@string/order_center_skills"
+        android:textColor="@color/color_FF1D2129"
+        android:textSize="16sp"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <androidx.appcompat.widget.AppCompatImageView
+        android:layout_width="16dp"
+        android:layout_height="16dp"
+        android:layout_marginEnd="16dp"
+        app:layout_constraintBottom_toBottomOf="@id/tv_title"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintTop_toTopOf="@id/tv_title"
+        app:srcCompat="@drawable/common_go_ic" />
+
+    <androidx.recyclerview.widget.RecyclerView
+        android:id="@+id/rv_skills"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginHorizontal="12dp"
+        android:paddingBottom="12dp"
+        android:visibility="gone"
+        app:layout_constraintTop_toBottomOf="@id/tv_title"
+        tools:itemCount="3"
+        tools:listitem="@layout/layout_order_center_skills_item"
+        tools:visibility="visible" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 50 - 0
module/order/src/main/res/layout/layout_order_center_skills_item.xml

@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout 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="54dp"
+    android:background="@drawable/order_center_skill_item_bg"
+    tools:ignore="HardcodedText">
+
+    <com.adealink.frame.image.view.NetworkImageView
+        android:id="@+id/iv_icon"
+        android:layout_width="50dp"
+        android:layout_height="50dp"
+        android:layout_marginStart="10dp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <androidx.appcompat.widget.AppCompatTextView
+        android:id="@+id/tv_title"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="4dp"
+        android:layout_marginEnd="8dp"
+        android:fontFamily="@font/poppins_semibold"
+        android:gravity="start|center_vertical"
+        android:includeFontPadding="false"
+        android:textColor="@color/color_FF1D2129"
+        android:textSize="14sp"
+        app:layout_constrainedWidth="true"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toStartOf="@id/v_price"
+        app:layout_constraintHorizontal_bias="0"
+        app:layout_constraintStart_toEndOf="@id/iv_icon"
+        app:layout_constraintTop_toTopOf="parent"
+        tools:text="Ludo King" />
+
+    <com.adealink.weparty.module.playmate.widget.PriceView
+        android:id="@+id/v_price"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintBottom_toTopOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:price_icon_size="12.8dp"
+        app:price_text_bold="true"
+        app:price_text_size="14sp"
+        app:unit_text_size="12sp" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 2 - 0
module/order/src/main/res/values/strings.xml

@@ -40,4 +40,6 @@
     <string name="order_evaluation_hint">Please fill in the review.</string>
     <string name="order_user_request">Request</string>
     <string name="order_auto_cancel_title">Automatically cancel after %s</string>
+    <string name="order_center">接单中心</string>
+    <string name="order_center_skills">My Skills</string>
 </resources>

+ 7 - 0
module/playmate/src/main/AndroidManifest.xml

@@ -26,5 +26,12 @@
             android:launchMode="singleTop"
             android:screenOrientation="portrait"
             android:theme="@style/AppTheme" />
+
+        <activity
+            android:name=".setting.PlaymateSkillSettingActivity"
+            android:launchMode="singleTop"
+            android:screenOrientation="portrait"
+            android:theme="@style/AppTheme" />
+
     </application>
 </manifest>

+ 0 - 7
module/playmate/src/main/java/com/adealink/weparty/playmate/PlaymateServiceImpl.kt

@@ -3,22 +3,15 @@ package com.adealink.weparty.playmate
 import androidx.lifecycle.ViewModelProvider
 import androidx.lifecycle.ViewModelStoreOwner
 import com.adealink.frame.spi.RegisterService
-import com.adealink.weparty.App
 import com.adealink.weparty.module.playmate.IPlaymateService
 import com.adealink.weparty.module.playmate.viewmodel.IPlaymateDetailViewModel
 import com.adealink.weparty.module.playmate.viewmodel.IPlaymateViewModel
-import com.adealink.weparty.playmate.datasource.remote.PlaymateHttpService
 import com.adealink.weparty.playmate.detail.viewmodel.PlaymateDetailViewModel
 import com.adealink.weparty.playmate.viewmodel.PlaymateViewModel
 
 @RegisterService(IPlaymateService::class)
 class PlaymateServiceImpl : IPlaymateService {
 
-    private val playmateHttpService by lazy {
-        App.instance.networkService.getHttpService(PlaymateHttpService::class.java)
-    }
-
-
     override fun getService(): IPlaymateService {
         return this
     }

+ 26 - 0
module/playmate/src/main/java/com/adealink/weparty/playmate/comment/data/CommentData.kt

@@ -1,6 +1,7 @@
 package com.adealink.weparty.playmate.comment.data
 
 import com.adealink.frame.network.data.PageReq
+import com.adealink.weparty.module.profile.data.UserPlaymateSkill
 import com.google.gson.annotations.GsonNullable
 import com.google.gson.annotations.SerializedName
 
@@ -24,3 +25,28 @@ data class PlaymateCommentData(
     @SerializedName("star") val star: Float,
     @SerializedName("comment") val comment: String
 )
+
+
+data class SwitchBusinessReq(
+    @SerializedName("open") val open: Boolean
+)
+
+data class SetupBusinessTimeReq(
+    @SerializedName("timeRange") val timeRange: String, //时间范围格式:00:00-12:30,24小时制-0点到12:30点
+    @SerializedName("weekNums") val weekDays: List<Int>, //1:周日,2:周一,3:周二,4:周三,5:周四,6:周五,7:周六
+)
+
+
+data class SkillSettingListReq(
+    @SerializedName("open") val isOpen: Boolean?, //true: 查询已开启服务的技能列表
+)
+
+data class SettingSkillListRes(
+    @SerializedName("list") val list: List<UserPlaymateSkill>
+)
+
+data class SwitchSkillReq(
+    @SerializedName("skillId") val skillId: String,
+    @SerializedName("open") val open: Boolean,
+    @SerializedName("mainSkill") val mainSkill: Boolean?,
+)

+ 21 - 0
module/playmate/src/main/java/com/adealink/weparty/playmate/datasource/remote/PlaymateHttpService.kt

@@ -2,9 +2,15 @@ package com.adealink.weparty.playmate.datasource.remote
 
 import com.adealink.frame.base.Rlt
 import com.adealink.frame.network.data.Res
+import com.adealink.weparty.module.playmate.data.PlaymateBusinessData
 import com.adealink.weparty.module.playmate.data.PlaymateDetailData
 import com.adealink.weparty.playmate.comment.data.PlaymateCommentReq
 import com.adealink.weparty.playmate.comment.data.PlaymateCommentRes
+import com.adealink.weparty.playmate.comment.data.SettingSkillListRes
+import com.adealink.weparty.playmate.comment.data.SetupBusinessTimeReq
+import com.adealink.weparty.playmate.comment.data.SkillSettingListReq
+import com.adealink.weparty.playmate.comment.data.SwitchBusinessReq
+import com.adealink.weparty.playmate.comment.data.SwitchSkillReq
 import com.adealink.weparty.playmate.data.PlaymateCategoryRes
 import com.adealink.weparty.playmate.data.PlaymateDetailReq
 import com.adealink.weparty.playmate.data.PlaymateListReq
@@ -35,4 +41,19 @@ interface PlaymateHttpService {
     @POST("skill/goods/comments")
     suspend fun getPlaymateComment(@Body req: PlaymateCommentReq): Rlt<Res<PlaymateCommentRes>>
 
+    @POST("playmate/business/switch")
+    suspend fun switchBusiness(@Body req: SwitchBusinessReq): Rlt<Res<Any>>
+
+    @POST("playmate/acceptSet")
+    suspend fun setupBusinessTime(@Body req: SetupBusinessTimeReq): Rlt<Res<Any>>
+
+    @POST("playmate/business/info")
+    suspend fun getPlaymateBusinessInfo(): Rlt<Res<PlaymateBusinessData>>
+
+    @POST("playmate/skill/list")
+    suspend fun getSkillSettingList(@Body req: SkillSettingListReq): Rlt<Res<SettingSkillListRes>>
+
+    @POST("skill/switch/set")
+    suspend fun switchSkill(@Body req: SwitchSkillReq): Rlt<Res<Any>>
+
 }

+ 120 - 0
module/playmate/src/main/java/com/adealink/weparty/playmate/setting/PlaymateSkillSettingActivity.kt

@@ -0,0 +1,120 @@
+package com.adealink.weparty.playmate.setting
+
+import androidx.activity.viewModels
+import androidx.constraintlayout.widget.ConstraintLayout
+import androidx.core.view.updateLayoutParams
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.adealink.frame.base.Rlt
+import com.adealink.frame.base.fastLazy
+import com.adealink.frame.mvvm.view.viewBinding
+import com.adealink.frame.router.Router
+import com.adealink.frame.router.annotation.RouterUri
+import com.adealink.frame.util.statusBarHeight
+import com.adealink.weparty.R
+import com.adealink.weparty.commonui.BaseActivity
+import com.adealink.weparty.commonui.ext.dp
+import com.adealink.weparty.commonui.ext.gone
+import com.adealink.weparty.commonui.ext.show
+import com.adealink.weparty.commonui.recycleview.adapter.MultiTypeListAdapter
+import com.adealink.weparty.commonui.recycleview.itemdecoration.VerticalSpaceItemDecoration
+import com.adealink.weparty.commonui.toast.util.showFailedToast
+import com.adealink.weparty.module.playmate.Playmate
+import com.adealink.weparty.playmate.databinding.ActivityPlaymateSkillSettingBinding
+import com.adealink.weparty.playmate.setting.adapter.SkillItemViewBinder
+import com.adealink.weparty.playmate.setting.data.SkillSettingItemData
+import com.adealink.weparty.playmate.setting.viewmodel.SkillSettingViewModel
+import com.adealink.weparty.playmate.viewmodel.PlaymateViewModelFactory
+import com.scwang.smart.refresh.layout.api.RefreshLayout
+import com.scwang.smart.refresh.layout.listener.OnRefreshLoadMoreListener
+import com.adealink.weparty.R as APP_R
+
+@RouterUri(path = [Playmate.SkillSetting.PATH], desc = "我的技能-设置")
+class PlaymateSkillSettingActivity : BaseActivity() {
+
+    private val binding by viewBinding(ActivityPlaymateSkillSettingBinding::inflate)
+
+    private val skillAdapter by fastLazy { MultiTypeListAdapter<SkillSettingItemData>() }
+
+    private val viewModel by viewModels<SkillSettingViewModel> { PlaymateViewModelFactory() }
+    override fun onBeforeCreate() {
+        super.onBeforeCreate()
+        Router.bind(this)
+    }
+
+    override fun initViews() {
+        super.initViews()
+        setContentView(binding.root)
+        binding.topBar.updateLayoutParams<ConstraintLayout.LayoutParams> {
+            topMargin = this@PlaymateSkillSettingActivity.statusBarHeight()
+        }
+
+        binding.vRefresh.setEnableRefresh(true)
+        binding.vRefresh.setEnableLoadMore(false)
+        binding.vRefresh.setEnableAutoLoadMore(false)
+        binding.vRefresh.setOnRefreshLoadMoreListener(object : OnRefreshLoadMoreListener {
+            override fun onRefresh(refreshLayout: RefreshLayout) {
+                viewModel.loadSettingList()
+            }
+
+
+            override fun onLoadMore(refreshLayout: RefreshLayout) {
+                //
+            }
+        })
+
+        skillAdapter.register(SkillItemViewBinder { item, position ->
+            switch(item, position)
+        })
+        binding.rvSkill.adapter = skillAdapter
+        binding.rvSkill.layoutManager = LinearLayoutManager(this, RecyclerView.VERTICAL, false)
+        binding.rvSkill.addItemDecoration(
+            VerticalSpaceItemDecoration(10.dp(), 0, 12.dp())
+        )
+    }
+
+    override fun observeViewModel() {
+        super.observeViewModel()
+        viewModel.settingListRltLD.observeWithoutCache(this) { rlt ->
+            binding.vRefresh.finishRefresh()
+            binding.vRefresh.finishLoadMore()
+            when (rlt) {
+                is Rlt.Failed -> {
+                    showFailedToast(rlt)
+                    binding.rvSkill.gone()
+                    binding.vErrorView.show(
+                        errorEmptyResId = APP_R.drawable.common_net_error_ic,
+                        title = APP_R.string.common_net_error
+                    )
+                }
+
+                is Rlt.Success -> {
+
+                }
+            }
+        }
+        viewModel.settingListLD.observeWithoutCache(this) {
+            skillAdapter.submitList(it)
+            if (it.isNullOrEmpty()) {
+                binding.rvSkill.gone()
+                binding.vErrorView.show(
+                    errorEmptyResId = APP_R.drawable.common_list_empty_ic,
+                    title = APP_R.string.commonui_list_empty
+                )
+            } else {
+                binding.rvSkill.show()
+                binding.vErrorView.gone()
+            }
+        }
+    }
+
+    override fun loadData() {
+        super.loadData()
+        viewModel.loadSettingList()
+    }
+
+    private fun switch(item: SkillSettingItemData, position: Int) {
+        viewModel
+    }
+
+}

+ 34 - 0
module/playmate/src/main/java/com/adealink/weparty/playmate/setting/adapter/SkillItemViewBinder.kt

@@ -0,0 +1,34 @@
+package com.adealink.weparty.playmate.setting.adapter
+
+import android.view.LayoutInflater
+import android.view.ViewGroup
+import com.adealink.weparty.commonui.recycleview.adapter.BindingViewHolder
+import com.adealink.weparty.commonui.recycleview.adapter.multitype.ItemViewBinder
+import com.adealink.weparty.playmate.databinding.LayoutPlaymateSkillSettingItemBinding
+import com.adealink.weparty.playmate.setting.data.SkillSettingItemData
+
+class SkillItemViewBinder(
+    switch: (item: SkillSettingItemData, position: Int) -> Unit
+) : ItemViewBinder<SkillSettingItemData, BindingViewHolder<LayoutPlaymateSkillSettingItemBinding>>() {
+
+    override fun onBindViewHolder(
+        holder: BindingViewHolder<LayoutPlaymateSkillSettingItemBinding>,
+        item: SkillSettingItemData,
+    ) {
+
+
+    }
+
+    override fun onCreateViewHolder(
+        inflater: LayoutInflater,
+        parent: ViewGroup,
+    ): BindingViewHolder<LayoutPlaymateSkillSettingItemBinding> {
+        return BindingViewHolder(
+            LayoutPlaymateSkillSettingItemBinding.inflate(
+                inflater,
+                parent,
+                false
+            )
+        )
+    }
+}

+ 11 - 0
module/playmate/src/main/java/com/adealink/weparty/playmate/setting/data/SkillSettingData.kt

@@ -0,0 +1,11 @@
+package com.adealink.weparty.playmate.setting.data
+
+import com.google.gson.annotations.SerializedName
+
+data class SkillSettingData(
+    @SerializedName("open") var open: Boolean
+)
+
+data class SkillSettingItemData(
+    val data: SkillSettingData
+)

+ 54 - 0
module/playmate/src/main/java/com/adealink/weparty/playmate/setting/viewmodel/SkillSettingViewModel.kt

@@ -0,0 +1,54 @@
+package com.adealink.weparty.playmate.setting.viewmodel
+
+import androidx.lifecycle.LiveData
+import com.adealink.frame.base.Rlt
+import com.adealink.frame.mvvm.livedata.ExtMutableLiveData
+import com.adealink.frame.mvvm.livedata.OnceMutableLiveData
+import com.adealink.frame.mvvm.viewmodel.BaseViewModel
+import com.adealink.weparty.App
+import com.adealink.weparty.playmate.comment.data.SkillSettingListReq
+import com.adealink.weparty.playmate.comment.data.SwitchBusinessReq
+import com.adealink.weparty.playmate.datasource.remote.PlaymateHttpService
+import com.adealink.weparty.playmate.setting.data.SkillSettingItemData
+import kotlinx.coroutines.launch
+
+class SkillSettingViewModel : BaseViewModel() {
+
+    private val playmateHttpService by lazy {
+        App.instance.networkService.getHttpService(PlaymateHttpService::class.java)
+    }
+
+    val settingListRltLD = ExtMutableLiveData<Rlt<Any>>()
+    val settingListLD = ExtMutableLiveData<List<SkillSettingItemData>>()
+
+    private val settingList = mutableListOf<SkillSettingItemData>()
+
+    fun loadSettingList() {
+        viewModelScope.launch {
+            val rlt = playmateHttpService.getSkillSettingList(SkillSettingListReq(null))
+            when (rlt) {
+                is Rlt.Failed -> {
+                    settingListRltLD.send(rlt)
+                }
+
+                is Rlt.Success -> {
+                    settingListRltLD.send(rlt)
+                    settingList.clear()
+
+                }
+            }
+        }
+    }
+
+    fun openBusiness(open: Boolean): LiveData<Rlt<Any>> {
+        val liveData = OnceMutableLiveData<Rlt<Any>>()
+        viewModelScope.launch {
+            liveData.send(
+                playmateHttpService.switchBusiness(SwitchBusinessReq(open))
+            )
+        }
+        return liveData
+    }
+
+
+}

+ 52 - 0
module/playmate/src/main/java/com/adealink/weparty/playmate/viewmodel/PlaymateViewModel.kt

@@ -7,10 +7,13 @@ import com.adealink.frame.base.Rlt
 import com.adealink.frame.mvvm.livedata.OnceMutableLiveData
 import com.adealink.frame.mvvm.viewmodel.BaseViewModel
 import com.adealink.weparty.App
+import com.adealink.weparty.module.playmate.data.PlaymateBusinessData
 import com.adealink.weparty.module.playmate.data.PlaymateCategoryData
 import com.adealink.weparty.module.playmate.data.PlaymateDetailData
 import com.adealink.weparty.module.playmate.data.UserPlaymateCategoryData
 import com.adealink.weparty.module.playmate.viewmodel.IPlaymateViewModel
+import com.adealink.weparty.playmate.comment.data.SetupBusinessTimeReq
+import com.adealink.weparty.playmate.comment.data.SwitchBusinessReq
 import com.adealink.weparty.playmate.data.PlaymateDetailReq
 import com.adealink.weparty.playmate.datasource.remote.PlaymateHttpService
 import com.adealink.weparty.playmate.manager.playmateManager
@@ -69,4 +72,53 @@ class PlaymateViewModel : BaseViewModel(), IPlaymateViewModel {
         return liveData
     }
 
+    override fun openBusiness(open: Boolean): LiveData<Rlt<Any>> {
+        val liveData = OnceMutableLiveData<Rlt<Any>>()
+        viewModelScope.launch {
+            liveData.send(playmateHttpService.switchBusiness(SwitchBusinessReq(open)))
+        }
+        return liveData
+    }
+
+    override fun setBusinessTime(
+        fromTime: String,
+        toTime: String,
+        weekDays: List<Int>
+    ): LiveData<Rlt<Any>> {
+        val liveData = OnceMutableLiveData<Rlt<Any>>()
+        viewModelScope.launch {
+            liveData.send(
+                playmateHttpService.setupBusinessTime(
+                    SetupBusinessTimeReq(
+                        timeRange = "${fromTime}-${toTime}",
+                        weekDays = weekDays
+                    )
+                )
+            )
+        }
+        return liveData
+    }
+
+    override fun getBusinessInfo(): LiveData<Rlt<PlaymateBusinessData>> {
+        val liveData = OnceMutableLiveData<Rlt<PlaymateBusinessData>>()
+        viewModelScope.launch {
+            val rlt = playmateHttpService.getPlaymateBusinessInfo()
+            when (rlt) {
+                is Rlt.Failed -> {
+                    liveData.send(rlt)
+                }
+
+                is Rlt.Success -> {
+                    val data = rlt.data.data
+                    if (data == null) {
+                        liveData.send(Rlt.Failed(CommonDataNullError()))
+                    } else {
+                        liveData.send(Rlt.Success(data))
+                    }
+                }
+            }
+        }
+        return liveData
+    }
+
 }

+ 4 - 0
module/playmate/src/main/java/com/adealink/weparty/playmate/viewmodel/PlaymateViewModelFactory.kt

@@ -6,6 +6,7 @@ import com.adealink.weparty.playmate.comment.viewmodel.CommentViewModel
 import com.adealink.weparty.playmate.detail.viewmodel.PlaymateDetailViewModel
 import com.adealink.weparty.playmate.list.viewmodel.GuestPlaymateListViewModel
 import com.adealink.weparty.playmate.list.viewmodel.PlaymateListViewModel
+import com.adealink.weparty.playmate.setting.viewmodel.SkillSettingViewModel
 
 @Suppress("UNCHECKED_CAST")
 class PlaymateViewModelFactory : ViewModelProvider.NewInstanceFactory() {
@@ -28,6 +29,9 @@ class PlaymateViewModelFactory : ViewModelProvider.NewInstanceFactory() {
                 isAssignableFrom(CommentViewModel::class.java) ->
                     CommentViewModel()
 
+                isAssignableFrom(SkillSettingViewModel::class.java) ->
+                    SkillSettingViewModel()
+
                 else ->
                     throw IllegalArgumentException("Unknown ViewModel class: ${modelClass.name}")
             } as T

+ 47 - 0
module/playmate/src/main/res/layout/activity_playmate_skill_setting.xml

@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout 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">
+
+    <com.adealink.weparty.commonui.widget.CommonTopBar
+        android:id="@+id/top_bar"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/common_top_bar_height"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        app:right_drawable="@drawable/common_setting_ic"
+        app:top_bar_title="@string/playmate_skill_setting" />
+
+    <com.scwang.smart.refresh.layout.SmartRefreshLayout
+        android:id="@+id/v_refresh"
+        android:layout_width="0dp"
+        android:layout_height="0dp"
+        android:background="@color/color_FFF1F2F5"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/top_bar">
+
+        <androidx.recyclerview.widget.RecyclerView
+            android:id="@+id/rv_skill"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_marginHorizontal="16dp"
+            tools:itemCount="3" />
+
+    </com.scwang.smart.refresh.layout.SmartRefreshLayout>
+
+    <com.adealink.weparty.commonui.widget.CommonEmptyErrorView
+        android:id="@+id/v_error_view"
+        android:layout_width="0dp"
+        android:layout_height="0dp"
+        android:visibility="gone"
+        app:layout_constraintBottom_toBottomOf="@id/v_refresh"
+        app:layout_constraintEnd_toEndOf="@id/v_refresh"
+        app:layout_constraintStart_toStartOf="@id/v_refresh"
+        app:layout_constraintTop_toTopOf="@id/v_refresh" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 110 - 0
module/playmate/src/main/res/layout/layout_playmate_skill_setting_item.xml

@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout 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:background="@drawable/common_white_radius_16_bg"
+    android:paddingHorizontal="12dp">
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/cl_top"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:paddingVertical="7dp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent">
+
+        <com.adealink.frame.image.view.NetworkImageView
+            android:id="@+id/iv_icon"
+            android:layout_width="50dp"
+            android:layout_height="50dp"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tv_name"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="4dp"
+            android:layout_marginEnd="12dp"
+            android:ellipsize="end"
+            android:fontFamily="@font/poppins_semibold"
+            android:gravity="start|center_vertical"
+            android:includeFontPadding="false"
+            android:textColor="@color/color_FF1D2129"
+            android:textSize="14sp"
+            app:layout_constrainedWidth="true"
+            app:layout_constraintBottom_toTopOf="@id/v_price"
+            app:layout_constraintEnd_toStartOf="@id/iv_go"
+            app:layout_constraintHorizontal_bias="0"
+            app:layout_constraintStart_toEndOf="@id/iv_icon"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintVertical_chainStyle="packed"
+            tools:text="Rank: Ace" />
+
+        <com.adealink.weparty.module.playmate.widget.PriceView
+            android:id="@+id/v_price"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="4dp"
+            android:layout_marginTop="4dp"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintStart_toEndOf="@id/iv_icon"
+            app:layout_constraintTop_toBottomOf="@id/tv_name"
+            app:price_icon_size="11.2dp"
+            app:price_text_bold="true"
+            app:price_text_size="12sp"
+            app:unit_text_size="12sp" />
+
+        <androidx.appcompat.widget.AppCompatImageView
+            android:id="@+id/iv_go"
+            android:layout_width="16dp"
+            android:layout_height="16dp"
+            android:src="@drawable/common_go_ic"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/cl_bottom"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:paddingTop="10dp"
+        android:paddingBottom="14dp"
+        app:layout_constraintTop_toBottomOf="@id/cl_top">
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginEnd="12dp"
+            android:ellipsize="end"
+            android:fontFamily="@font/poppins_semibold"
+            android:gravity="start|center_vertical"
+            android:includeFontPadding="false"
+            android:text="@string/playmate_skill_order_status"
+            android:textColor="@color/color_FF1D2129"
+            android:textSize="12sp"
+            app:layout_constrainedWidth="true"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toStartOf="@id/v_switch"
+            app:layout_constraintHorizontal_bias="0"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintVertical_chainStyle="packed" />
+
+        <com.adealink.weparty.commonui.widget.switchbutton.SwitchButton
+            android:id="@+id/v_switch"
+            style="@style/CommonSwitchButton"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 2 - 0
module/playmate/src/main/res/values/strings.xml

@@ -22,4 +22,6 @@
     <string name="playmate_all_comment">All Reviews</string>
     <string name="playmate_list_title">Playmate List</string>
     <string name="playamte_order_count">Order %s</string>
+    <string name="playmate_skill_setting">技能管理</string>
+    <string name="playmate_skill_order_status">Order Status</string>
 </resources>

+ 2 - 1
module/profile/src/main/java/com/adealink/weparty/profile/me/MeFragment.kt

@@ -16,6 +16,7 @@ import com.adealink.weparty.profile.databinding.FragmentMeBinding
 import com.adealink.weparty.profile.me.comp.MeFunctionCenterComp
 import com.adealink.weparty.profile.me.comp.MeHeaderComp
 import com.adealink.weparty.profile.me.comp.MeWalletComp
+import com.adealink.weparty.profile.me.comp.OrderCenterComp
 import com.adealink.weparty.profile.me.comp.PlaymateShareComp
 import com.adealink.weparty.profile.viewmodel.ProfileViewModel
 import com.adealink.weparty.profile.viewmodel.ProfileViewModelFactory
@@ -55,8 +56,8 @@ class MeFragment : BaseFragment(R.layout.fragment_me) {
         MeHeaderComp(this, binding.vHeader).attach()
         PlaymateShareComp(this, binding.vPlaymateShare).attach()
         MeWalletComp(this, binding.vWallet).attach()
+        OrderCenterComp(this, binding.vOrderCenter).attach()
         MeFunctionCenterComp(this, binding.vFunctionCenter).attach()
-
     }
 
 }

+ 127 - 0
module/profile/src/main/java/com/adealink/weparty/profile/me/comp/OrderCenterComp.kt

@@ -0,0 +1,127 @@
+package com.adealink.weparty.profile.me.comp
+
+import androidx.lifecycle.LifecycleOwner
+import com.adealink.frame.aab.util.getCompatString
+import com.adealink.frame.base.Rlt
+import com.adealink.frame.base.fastLazy
+import com.adealink.frame.mvvm.viewmodel.activityViewModels
+import com.adealink.frame.router.Router
+import com.adealink.frame.util.onClick
+import com.adealink.weparty.commonui.BaseViewComponent
+import com.adealink.weparty.commonui.ext.gone
+import com.adealink.weparty.commonui.ext.show
+import com.adealink.weparty.commonui.toast.util.showFailedToast
+import com.adealink.weparty.commonui.widget.CommonButton
+import com.adealink.weparty.module.order.Order
+import com.adealink.weparty.module.playmate.PlaymateModule
+import com.adealink.weparty.module.playmate.data.PlaymateBusinessData
+import com.adealink.weparty.module.profile.ProfileModule
+import com.adealink.weparty.module.profile.data.UserInfo
+import com.adealink.weparty.profile.databinding.LayoutMeOrderCenterBinding
+import com.adealink.weparty.profile.viewmodel.ProfileViewModel
+import com.adealink.weparty.profile.viewmodel.ProfileViewModelFactory
+import com.adealink.weparty.util.formatNumberStr
+import com.adealink.weparty.R as APP_R
+
+class OrderCenterComp(
+    lifecycleOwner: LifecycleOwner,
+    val binding: LayoutMeOrderCenterBinding
+) : BaseViewComponent(lifecycleOwner) {
+
+    private val profileViewModel by activityViewModels<ProfileViewModel> {
+        ProfileViewModelFactory()
+    }
+
+    private val playmateViewModel by fastLazy { PlaymateModule.getPlaymateViewModel(requireActivity()) }
+    private var businessData: PlaymateBusinessData? = null
+
+    override fun initViews() {
+        super.initViews()
+        binding.root.onClick {
+            goOrderCenter()
+        }
+    }
+
+    override fun onResume() {
+        super.onResume()
+        loadData()
+    }
+
+    override fun observeViewModel() {
+        profileViewModel.userInfoLD.observe(viewLifecycleOwner) { user ->
+            updateUI(user)
+        }
+    }
+
+    override fun loadData() {
+        updateUI(ProfileModule.getMyUserInfo())
+        playmateViewModel?.getBusinessInfo()?.observe(viewLifecycleOwner) { rlt ->
+            businessData = (rlt as? Rlt.Success)?.data
+            updateBusiness(businessData)
+        }
+    }
+
+
+    private fun updateUI(userInfo: UserInfo?) {
+        userInfo ?: return
+        if (userInfo.isPlaymate()) {
+            binding.root.show()
+        } else {
+            binding.root.gone()
+        }
+    }
+
+    private fun updateBusiness(business: PlaymateBusinessData?) {
+        binding.tvIncome.text = formatNumberStr(business?.weekIncome ?: 0.0)
+        binding.tvExposure.text = formatNumberStr(business?.todayExposure ?: 0)
+        binding.tvVisitor.text = formatNumberStr(business?.visitor ?: 0)
+        if (business == null) {
+            binding.btnService.buttonType = CommonButton.BUTTON_NORMAL_1
+            binding.btnService.isEnabled = false
+            binding.tvService.text = getCompatString(APP_R.string.common_accept_order_open_service)
+            binding.tvServiceTips.text =
+                getCompatString(APP_R.string.common_accept_order_open_service_tips)
+        } else if (business.businessOpen) {
+            binding.btnService.buttonType = CommonButton.BUSINESS_OPEN
+            binding.btnService.isEnabled = true
+            binding.tvService.text =
+                getCompatString(APP_R.string.common_accept_order_opening_service)
+            binding.tvServiceTips.text =
+                getCompatString(APP_R.string.common_accept_order_opening_service_tips)
+            binding.btnService.onClick {
+                switchBusinessOpen(false)
+            }
+        } else {
+            binding.btnService.buttonType = CommonButton.BUTTON_NORMAL_1
+            binding.btnService.isEnabled = true
+            binding.tvService.text = getCompatString(APP_R.string.common_accept_order_open_service)
+            binding.tvServiceTips.text =
+                getCompatString(APP_R.string.common_accept_order_open_service_tips)
+            binding.btnService.onClick {
+                switchBusinessOpen(true)
+            }
+        }
+    }
+
+    private fun switchBusinessOpen(open: Boolean) {
+        showLoading()
+        playmateViewModel?.openBusiness(open)?.observe(viewLifecycleOwner) { rlt ->
+            dismissLoading()
+            when (rlt) {
+                is Rlt.Failed -> {
+                    showFailedToast(rlt)
+                }
+
+                is Rlt.Success -> {
+                    loadData()
+                }
+            }
+        }
+    }
+
+    private fun goOrderCenter() {
+        val act = activity ?: return
+        Router.build(act, Order.OrderCenter.PATH).start()
+    }
+
+}

+ 9 - 7
module/profile/src/main/res/layout/fragment_me.xml

@@ -44,12 +44,12 @@
                 layout="@layout/layout_me_share"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:visibility="gone"
-                tools:visibility="visible"
                 android:layout_marginTop="16dp"
+                android:visibility="gone"
                 app:layout_constraintEnd_toEndOf="parent"
                 app:layout_constraintStart_toStartOf="parent"
-                app:layout_constraintTop_toBottomOf="@id/v_header" />
+                app:layout_constraintTop_toBottomOf="@id/v_header"
+                tools:visibility="visible" />
 
             <!-- 钱包 -->
             <include
@@ -64,14 +64,16 @@
 
             <!-- 接单中心 -->
             <include
-                android:id="@+id/v_order_manager"
-                layout="@layout/layout_me_accept_order"
+                android:id="@+id/v_order_center"
+                layout="@layout/layout_me_order_center"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_marginTop="16dp"
+                android:visibility="gone"
                 app:layout_constraintEnd_toEndOf="parent"
                 app:layout_constraintStart_toStartOf="parent"
-                app:layout_constraintTop_toBottomOf="@id/v_wallet" />
+                app:layout_constraintTop_toBottomOf="@id/v_wallet"
+                tools:visibility="visible" />
 
             <!-- 功能中心 -->
             <include
@@ -82,7 +84,7 @@
                 android:layout_marginTop="16dp"
                 app:layout_constraintEnd_toEndOf="parent"
                 app:layout_constraintStart_toStartOf="parent"
-                app:layout_constraintTop_toBottomOf="@id/v_order_manager" />
+                app:layout_constraintTop_toBottomOf="@id/v_order_center" />
 
         </androidx.constraintlayout.widget.ConstraintLayout>
 

+ 0 - 0
module/profile/src/main/res/layout/layout_me_accept_order.xml → module/profile/src/main/res/layout/layout_me_order_center.xml