From 35996556a9bd5711042698409a74bfb0d9ad2ce7 Mon Sep 17 00:00:00 2001 From: wlh <646507849@qq.com> Date: Wed, 17 Jan 2024 09:04:47 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=AD=E5=BB=BA365-=E4=BA=8C=E6=9C=9F?= =?UTF-8?q?=E5=BC=80=E5=8F=91-=E5=95=86=E5=9F=8E=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 4 + .../com/zj365/dc/activity/MainActivity.kt | 12 +- .../dc/activity/shop/ShopCategoryActivity.kt | 181 ++++++++++++++++++ .../dc/adapter/shop/ShopCategoryAdapter.kt | 40 ++++ .../adapter/shop/ShopChildCategoryAdapter.kt | 21 ++ .../zj365/dc/adapter/shop/ShopGoodsAdapter.kt | 21 ++ .../dc/adapter/shop/ShopGoodsTwoAdapter.kt | 21 ++ .../com/zj365/dc/fragment/ShopFragment.kt | 106 ++++++++++ .../main/java/com/zj365/dc/vm/ShopMallVm.kt | 37 ++++ app/src/main/res/layout/act_shop_category.xml | 100 ++++++++++ app/src/main/res/layout/frag_shop.xml | 85 ++++++++ .../main/res/layout/item_category_child.xml | 14 ++ .../res/layout/item_goods_list_two_style.xml | 70 +++++++ .../main/res/layout/item_shop_categroy.xml | 32 ++++ app/src/main/res/layout/item_shop_list.xml | 64 +++++++ app/src/main/res/menu/bottom_nav_bar.xml | 4 +- .../com/xty/base/fragment/BaseFragList.kt | 2 + build.gradle | 4 +- .../java/com/xty/common/arouter/ARouterUrl.kt | 3 + .../com/xty/common/util/SpannableUtils.kt | 9 + common/src/main/res/color/color_02c_333.xml | 5 + .../res/drawable/selector_ele_setting.xml | 20 ++ .../res/mipmap-xxhdpi/icon_seekbar_drawer.png | Bin 0 -> 3609 bytes .../java/com/zj365/mime/act/DevInfoAct.kt | 19 +- mine/src/main/res/layout/act_wear_manager.xml | 1 + .../activity_electronic_fence_setting.xml | 4 +- .../res/layout/layout_ele_fence_setting.xml | 41 ++++ .../main/java/com/xty/network/ApiInterface.kt | 12 ++ .../com/xty/network/model/GoodsRecordsBean.kt | 19 ++ .../com/xty/network/model/ShopCategoryBean.kt | 15 ++ 30 files changed, 952 insertions(+), 14 deletions(-) create mode 100644 app/src/main/java/com/zj365/dc/activity/shop/ShopCategoryActivity.kt create mode 100644 app/src/main/java/com/zj365/dc/adapter/shop/ShopCategoryAdapter.kt create mode 100644 app/src/main/java/com/zj365/dc/adapter/shop/ShopChildCategoryAdapter.kt create mode 100644 app/src/main/java/com/zj365/dc/adapter/shop/ShopGoodsAdapter.kt create mode 100644 app/src/main/java/com/zj365/dc/adapter/shop/ShopGoodsTwoAdapter.kt create mode 100644 app/src/main/java/com/zj365/dc/fragment/ShopFragment.kt create mode 100644 app/src/main/java/com/zj365/dc/vm/ShopMallVm.kt create mode 100644 app/src/main/res/layout/act_shop_category.xml create mode 100644 app/src/main/res/layout/frag_shop.xml create mode 100644 app/src/main/res/layout/item_category_child.xml create mode 100644 app/src/main/res/layout/item_goods_list_two_style.xml create mode 100644 app/src/main/res/layout/item_shop_categroy.xml create mode 100644 app/src/main/res/layout/item_shop_list.xml create mode 100644 common/src/main/res/color/color_02c_333.xml create mode 100644 common/src/main/res/drawable/selector_ele_setting.xml create mode 100644 common/src/main/res/mipmap-xxhdpi/icon_seekbar_drawer.png create mode 100644 network/src/main/java/com/xty/network/model/GoodsRecordsBean.kt create mode 100644 network/src/main/java/com/xty/network/model/ShopCategoryBean.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 66b5c95..9849609 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -159,6 +159,10 @@ android:launchMode="singleTop" android:screenOrientation="portrait" /> + + (), Consumer { listOf( HealthHomeFrag(), // Fragment(), + ShopFragment(), DynamicManagementFrag(), MessageFragment(), MineFrag() @@ -226,28 +228,28 @@ class MainActivity : BaseVmAct(), Consumer { return@setOnNavigationItemSelectedListener true } - /* R.id.nav_server -> { + R.id.nav_server -> { binding.mVp2.setCurrentItem(1, false) return@setOnNavigationItemSelectedListener true - }*/ + } R.id.nav_dynamic_management -> { if (MMkvHelper.getLong(Const.USER_ID).toString() == "0"){ RouteManager.goAct(ARouterUrl.LOGIN_ACT) }else{ - binding.mVp2.setCurrentItem(1, false) + binding.mVp2.setCurrentItem(2, false) return@setOnNavigationItemSelectedListener true } } R.id.nav_message -> { - binding.mVp2.setCurrentItem(2, false) + binding.mVp2.setCurrentItem(3, false) return@setOnNavigationItemSelectedListener true } R.id.nav_mine -> { - binding.mVp2.setCurrentItem(3, false) + binding.mVp2.setCurrentItem(4, false) return@setOnNavigationItemSelectedListener true } diff --git a/app/src/main/java/com/zj365/dc/activity/shop/ShopCategoryActivity.kt b/app/src/main/java/com/zj365/dc/activity/shop/ShopCategoryActivity.kt new file mode 100644 index 0000000..befa94d --- /dev/null +++ b/app/src/main/java/com/zj365/dc/activity/shop/ShopCategoryActivity.kt @@ -0,0 +1,181 @@ +package com.zj365.dc.activity.shop + +import android.view.LayoutInflater +import android.view.View +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.LinearLayoutManager +import com.alibaba.android.arouter.facade.annotation.Route +import com.xty.base.act.BaseListAct +import com.xty.base.act.BaseVmAct +import com.xty.common.Const +import com.xty.common.R +import com.xty.common.arouter.ARouterUrl +import com.xty.network.model.ShopCategoryBean +import com.zj365.dc.adapter.shop.ShopCategoryAdapter +import com.zj365.dc.adapter.shop.ShopChildCategoryAdapter +import com.zj365.dc.adapter.shop.ShopGoodsTwoAdapter +import com.zj365.dc.databinding.ActShopCategoryBinding +import com.zj365.dc.vm.ShopMallVm +import okhttp3.internal.notify +import java.util.ArrayList + +@Route(path = ARouterUrl.SHOP_CATEGORY) +class ShopCategoryActivity : BaseVmAct() { + + val binding by lazy { ActShopCategoryBinding.inflate(layoutInflater) } + + val mCategoryAdapter by lazy { ShopCategoryAdapter() } + + val mGoodsAdapter by lazy { ShopGoodsTwoAdapter() } + + val mChildCategoryAdapter by lazy { ShopChildCategoryAdapter() } + + var goodsName:String? = null + + var categoryId:Long = 0L + var mCategoryList = ArrayList() + var parentId:Long = 0L + + var index = 0 + var page:Int = 1 + + fun initAdapter() { + + + + binding.recyclerView.adapter = mGoodsAdapter + binding.recyclerView.layoutManager = LinearLayoutManager(this@ShopCategoryActivity) + + binding.childRecyclerView.adapter = mChildCategoryAdapter + binding.childRecyclerView.layoutManager = LinearLayoutManager(this@ShopCategoryActivity) + + mChildCategoryAdapter.setOnItemClickListener { adapter, view, position -> + var bean = adapter.data[position] as ShopCategoryBean + (adapter.data as ArrayList).forEach { + it.isChecked = false + + } + bean.isChecked = true + categoryId = bean.id + mViewModel.getGoodsList(goodsName,categoryId,0,page) + mChildCategoryAdapter.notifyDataSetChanged() + } + + binding.mRefresh.setOnRefreshListener { + page = 1 + loadData() + binding.mRefresh.finishRefresh(1000) + } + binding.mRefresh.setEnableLoadMore(true) + binding.mRefresh.setOnLoadMoreListener { + page++ + loadData() + binding.mRefresh.finishLoadMore(1000) + } + + } + + fun loadData(){ + mViewModel.getGoodsList(goodsName,categoryId,0,page) + + } + + override fun initView() { + super.initView() + statusBar(binding.title.mView) + binding.title.mTvTitle.text ="商品分类" + binding.title.mIvBack.setOnClickListener { + finish() + } + categoryId = intent.getLongExtra("id",0) + parentId = categoryId + + mCategoryList = intent.getParcelableArrayListExtra("categoryList")!! + initAdapter() + mCategoryList.forEachIndexed { index, shopCategoryBean -> + if (shopCategoryBean.id == categoryId){ + this.index = index + shopCategoryBean.isChecked = true + } + } + + binding.categoryRecyclerView.adapter = mCategoryAdapter + + if(mCategoryList.size != 8){ + binding.categoryRecyclerView.layoutManager = LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false) + }else if(mCategoryList.size == 8){ + binding.categoryRecyclerView.layoutManager = GridLayoutManager(this,4) + } + mCategoryAdapter.setNewInstance(mCategoryList) + binding.categoryRecyclerView.scrollToPosition(index) + + mCategoryAdapter.setOnItemClickListener { adapter, view, position -> + var bean = adapter.data[position] as ShopCategoryBean + (adapter.data as ArrayList).forEach { + it.isChecked = false + + } + bean.isChecked = true + parentId = bean.id + mViewModel.getGoodsCategory(bean.id) + mCategoryAdapter.notifyDataSetChanged() + } + mViewModel.getGoodsCategory(categoryId) + + } + + + override fun liveObserver() { + mViewModel.categoryLiveDate.observe(this){ + it.data.add(0,ShopCategoryBean(parentId,parentId,"全部",0,null,true)) + it.data.forEachIndexed { index, shopCategoryBean -> + + if (shopCategoryBean.isChecked){ + categoryId = shopCategoryBean.id + mViewModel.getGoodsList(goodsName,shopCategoryBean.id,0,page) + + } + } + mChildCategoryAdapter.setNewInstance(it.data) + } + + + mViewModel.goodsLiveData.observe(this){ + + if (page == 1) { + if (it.data.records.isNullOrEmpty()) { + mGoodsAdapter.setNewInstance(null) + mGoodsAdapter.setEmptyView(getNoneView()) + binding.mRefresh?.setEnableLoadMore(false) + } else { + if (it.data.records.size < Const.PAGE_SIZE) { + binding.mRefresh?.setEnableLoadMore(false) + } else { + binding.mRefresh?.setEnableLoadMore(true) + ++page + } + mGoodsAdapter.setNewInstance(it.data.records) + } + } else { + if (it.data.records.isNullOrEmpty()) { + binding.mRefresh?.setEnableLoadMore(false) + }else{ + if (it.data.records.size < Const.PAGE_SIZE) { + binding.mRefresh?.setEnableLoadMore(false) + }else{ + ++page + } + mGoodsAdapter.addData(it.data.records) + + } + + } + } + + } + + fun getNoneView() = + LayoutInflater.from(this).inflate(R.layout.view_none_data, binding.recyclerView, false) + + override fun setLayout() = binding.root +} \ No newline at end of file diff --git a/app/src/main/java/com/zj365/dc/adapter/shop/ShopCategoryAdapter.kt b/app/src/main/java/com/zj365/dc/adapter/shop/ShopCategoryAdapter.kt new file mode 100644 index 0000000..e362800 --- /dev/null +++ b/app/src/main/java/com/zj365/dc/adapter/shop/ShopCategoryAdapter.kt @@ -0,0 +1,40 @@ +package com.zj365.dc.adapter.shop + +import android.widget.LinearLayout +import android.widget.TextView +import com.chad.library.adapter.base.viewholder.BaseViewHolder +import com.ruffian.library.widget.RImageView +import com.xty.base.adapter.BaseAdapter +import com.xty.common.setImage +import com.xty.network.model.ShopCategoryBean +import com.zj365.dc.R +import de.hdodenhof.circleimageview.CircleImageView + +class ShopCategoryAdapter : BaseAdapter(R.layout.item_shop_categroy) { + override fun convert(holder: BaseViewHolder, item: ShopCategoryBean) { + + if (data.size != 8){ + var screenWidth = context.resources.displayMetrics.widthPixels + val layoutParam = holder.getView(R.id.root).layoutParams + layoutParam.width = screenWidth /4 + holder.getView(R.id.root).layoutParams = layoutParam + } + + var img = holder.getView(R.id.img_category) + var categoryName = holder.getView(R.id.tv_category) + if (item.isChecked){ + img.borderColor = context.getColor(R.color.col_02c) + categoryName.setTextColor(context.getColor(R.color.col_02c)) + }else{ + img.borderColor = context.getColor(R.color.white) + categoryName.setTextColor(context.getColor(R.color.col_313)) + + } + item.pic?.let { + img.setImage(context,it) + + } + holder.setText(R.id.tv_category,item.categoryName) + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/zj365/dc/adapter/shop/ShopChildCategoryAdapter.kt b/app/src/main/java/com/zj365/dc/adapter/shop/ShopChildCategoryAdapter.kt new file mode 100644 index 0000000..ebd09ed --- /dev/null +++ b/app/src/main/java/com/zj365/dc/adapter/shop/ShopChildCategoryAdapter.kt @@ -0,0 +1,21 @@ +package com.zj365.dc.adapter.shop + +import android.graphics.Color +import com.chad.library.adapter.base.viewholder.BaseViewHolder +import com.xty.base.adapter.BaseAdapter +import com.xty.network.model.ShopCategoryBean +import com.zj365.dc.R + +class ShopChildCategoryAdapter : BaseAdapter(R.layout.item_category_child) { + override fun convert(holder: BaseViewHolder, item: ShopCategoryBean) { + holder.setText(R.id.tv_child_category,item.categoryName) + if (item.isChecked){ + holder.setTextColor(R.id.tv_child_category,context.getColor(R.color.col_02c)) + holder.setBackgroundColor(R.id.tv_child_category, Color.parseColor("#2102C191")) + }else{ + holder.setTextColor(R.id.tv_child_category,context.getColor(R.color.col_313)) + holder.setBackgroundColor(R.id.tv_child_category,context.getColor(R.color.white)) + + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/zj365/dc/adapter/shop/ShopGoodsAdapter.kt b/app/src/main/java/com/zj365/dc/adapter/shop/ShopGoodsAdapter.kt new file mode 100644 index 0000000..2b7116c --- /dev/null +++ b/app/src/main/java/com/zj365/dc/adapter/shop/ShopGoodsAdapter.kt @@ -0,0 +1,21 @@ +package com.zj365.dc.adapter.shop + +import android.widget.TextView +import com.chad.library.adapter.base.viewholder.BaseViewHolder +import com.ruffian.library.widget.RImageView +import com.xty.base.adapter.BaseAdapter +import com.xty.common.setImage +import com.xty.common.util.SpannableUtils +import com.xty.network.model.GoodsRecordsBean +import com.zj365.dc.R +import org.w3c.dom.Text + +class ShopGoodsAdapter : BaseAdapter(R.layout.item_shop_list) { + override fun convert(holder: BaseViewHolder, item: GoodsRecordsBean.GoodsBean) { + holder.getView(R.id.img_goods).setImage(context,item.imgs) + holder.setText(R.id.tv_goods_name,item.prodName) + holder.setText(R.id.tv_price,"¥ ${item.price}") + SpannableUtils.setMoney(holder.getView(R.id.tv_line_price),item.oriPrice) + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/zj365/dc/adapter/shop/ShopGoodsTwoAdapter.kt b/app/src/main/java/com/zj365/dc/adapter/shop/ShopGoodsTwoAdapter.kt new file mode 100644 index 0000000..b567d2c --- /dev/null +++ b/app/src/main/java/com/zj365/dc/adapter/shop/ShopGoodsTwoAdapter.kt @@ -0,0 +1,21 @@ +package com.zj365.dc.adapter.shop + +import android.widget.TextView +import com.chad.library.adapter.base.viewholder.BaseViewHolder +import com.ruffian.library.widget.RImageView +import com.xty.base.adapter.BaseAdapter +import com.xty.common.setImage +import com.xty.common.util.SpannableUtils +import com.xty.network.model.GoodsRecordsBean +import com.zj365.dc.R + +class ShopGoodsTwoAdapter : BaseAdapter(R.layout.item_goods_list_two_style) { + override fun convert(holder: BaseViewHolder, item: GoodsRecordsBean.GoodsBean) { + holder.getView(R.id.img_goods).setImage(context,item.imgs) + holder.setText(R.id.tv_goods_name,item.prodName) + holder.setText(R.id.tv_price,"¥ ${item.price}") + SpannableUtils.setMoney(holder.getView(R.id.tv_line_price),item.oriPrice) + + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/zj365/dc/fragment/ShopFragment.kt b/app/src/main/java/com/zj365/dc/fragment/ShopFragment.kt new file mode 100644 index 0000000..2a5795c --- /dev/null +++ b/app/src/main/java/com/zj365/dc/fragment/ShopFragment.kt @@ -0,0 +1,106 @@ +package com.zj365.dc.fragment + +import android.os.Parcelable +import android.text.TextUtils +import android.view.KeyEvent +import android.view.View +import android.view.inputmethod.EditorInfo +import android.widget.TextView +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.LinearLayoutManager +import com.tamsiree.rxkit.RxKeyboardTool +import com.xty.base.fragment.BaseFragList +import com.xty.base.fragment.BaseVmFrag +import com.xty.base.vm.BaseVm +import com.xty.common.arouter.ARouterUrl +import com.xty.common.arouter.RouteManager +import com.xty.common.util.CommonToastUtils +import com.xty.network.model.ShopCategoryBean +import com.zj365.dc.adapter.shop.ShopCategoryAdapter +import com.zj365.dc.adapter.shop.ShopGoodsAdapter +import com.zj365.dc.databinding.FragShopBinding +import com.zj365.dc.vm.ShopMallVm +import java.util.ArrayList + +class ShopFragment: BaseFragList() { + val binding by lazy { FragShopBinding.inflate(layoutInflater) } + + val mCategoryAdapter by lazy { ShopCategoryAdapter() } + + val mGoodsAdapter by lazy { ShopGoodsAdapter() } + + + var goodsName:String? = null + + override fun initAdapter() { + binding.recyclerView.adapter = mGoodsAdapter + binding.recyclerView.layoutManager = GridLayoutManager(requireContext(),2) + + binding.categoryRecyclerView.adapter = mCategoryAdapter + + mCategoryAdapter.setOnItemClickListener { adapter, view, position -> + var bean = adapter.data[position] as ShopCategoryBean + bundle.clear() + bundle.putLong("id",bean.id) + bundle.putParcelableArrayList("categoryList",adapter.data as ArrayList) + RouteManager.goAct(ARouterUrl.SHOP_CATEGORY,bundle) + } + + setRecycleRefresh(binding.recyclerView,binding.mRefresh,true) + } + + override fun refresh() { + mViewModel.getGoodsList(null,0L,1,page) + } + + override fun initView() { + super.initView() + mViewModel.getGoodsCategory(0L) + mViewModel.getGoodsList(null,0L,0,page) + + binding.etSearch.setOnEditorActionListener(object : TextView.OnEditorActionListener { + override fun onEditorAction(p0: TextView?, p1: Int, p2: KeyEvent?): Boolean { + if(p1 == EditorInfo.IME_ACTION_SEARCH){ + goodsName = binding.etSearch.text.toString().trim() + if(TextUtils.isEmpty(goodsName)){ + CommonToastUtils.showToast("请输入搜索内容") + return true + } + + mViewModel.getGoodsList(goodsName,0L,0,page) + + RxKeyboardTool.hideSoftInput(requireActivity()) + return true + + } + return false + } + + }) + } + + override fun setViewModel()= ShopMallVm() + override fun observer() { + mViewModel.categoryLiveDate.observe(this){ + if(it.data.size != 8){ + binding.categoryRecyclerView.layoutManager = LinearLayoutManager(requireContext(),LinearLayoutManager.HORIZONTAL,false) + }else if(it.data.size == 8){ + binding.categoryRecyclerView.layoutManager = GridLayoutManager(requireContext(),4) + + } + + mCategoryAdapter.setNewInstance(it.data) + } + + mViewModel.goodsLiveData.observe(this){ + if(page == 1){ + mGoodsAdapter.setNewInstance(it.data.records) + + }else{ + mGoodsAdapter.addData(it.data.records) + } + } + } + + override fun setLayout() = binding.root +} \ No newline at end of file diff --git a/app/src/main/java/com/zj365/dc/vm/ShopMallVm.kt b/app/src/main/java/com/zj365/dc/vm/ShopMallVm.kt new file mode 100644 index 0000000..a3ccb78 --- /dev/null +++ b/app/src/main/java/com/zj365/dc/vm/ShopMallVm.kt @@ -0,0 +1,37 @@ +package com.zj365.dc.vm + +import androidx.lifecycle.MutableLiveData +import com.alibaba.fastjson.JSONObject +import com.xty.base.vm.BaseVm +import com.xty.network.model.GoodsRecordsBean +import com.xty.network.model.RespBody +import com.xty.network.model.ShopCategoryBean + +class ShopMallVm : BaseVm() { + + val categoryLiveDate by lazy { MutableLiveData>>() } + + val goodsLiveData by lazy { MutableLiveData>() } + + fun getGoodsCategory(parentId:Long){ + startHttp { + var code = apiInterface().getGoodsCategory(parentId) + code.getCodeStatus(categoryLiveDate, nowData) + } + } + + fun getGoodsList(prodName:String?,categoryId:Long,isRec:Int,pageSize:Int){ + startHttp { + var json = JSONObject() + prodName?.let { + json.put("prodName",it) + } + json.put("categoryId",categoryId) + json.put("isRec",isRec) + json.put("pageSize",20) + json.put("pageNum",pageSize) + var code = apiInterface().getGoodsList(retrofits.getRequestBody(json.toString())) + code.getCodeStatus(goodsLiveData, nowData) + } + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/act_shop_category.xml b/app/src/main/res/layout/act_shop_category.xml new file mode 100644 index 0000000..2e6603c --- /dev/null +++ b/app/src/main/res/layout/act_shop_category.xml @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/frag_shop.xml b/app/src/main/res/layout/frag_shop.xml new file mode 100644 index 0000000..05b83cc --- /dev/null +++ b/app/src/main/res/layout/frag_shop.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_category_child.xml b/app/src/main/res/layout/item_category_child.xml new file mode 100644 index 0000000..198eb47 --- /dev/null +++ b/app/src/main/res/layout/item_category_child.xml @@ -0,0 +1,14 @@ + + + diff --git a/app/src/main/res/layout/item_goods_list_two_style.xml b/app/src/main/res/layout/item_goods_list_two_style.xml new file mode 100644 index 0000000..f28ec23 --- /dev/null +++ b/app/src/main/res/layout/item_goods_list_two_style.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_shop_categroy.xml b/app/src/main/res/layout/item_shop_categroy.xml new file mode 100644 index 0000000..f38a6cc --- /dev/null +++ b/app/src/main/res/layout/item_shop_categroy.xml @@ -0,0 +1,32 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_shop_list.xml b/app/src/main/res/layout/item_shop_list.xml new file mode 100644 index 0000000..dccd992 --- /dev/null +++ b/app/src/main/res/layout/item_shop_list.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/bottom_nav_bar.xml b/app/src/main/res/menu/bottom_nav_bar.xml index 980abb8..1f82fd1 100644 --- a/app/src/main/res/menu/bottom_nav_bar.xml +++ b/app/src/main/res/menu/bottom_nav_bar.xml @@ -7,11 +7,11 @@ android:icon="@drawable/sel_home" android:title="@string/home" app:showAsAction="ifRoom" /> - + app:showAsAction="ifRoom" /> :BaseVmFrag() { } refresh.setEnableLoadMore(isLoadMore) refresh.setOnLoadMoreListener { + page++ + refresh() refresh.finishLoadMore(1000) } } diff --git a/build.gradle b/build.gradle index ed99960..952b266 100644 --- a/build.gradle +++ b/build.gradle @@ -15,7 +15,7 @@ buildscript { maven { url "https://mirrors.tencent.com/nexus/repository/maven-public/" } maven {url 'https://developer.huawei.com/repo/'} maven{ url 'https://maven.aliyun.com/nexus/content/groups/public/'} - maven{ url 'https://oss.sonatype.org/content/repositories/snapshots'} + // maven{ url 'https://oss.sonatype.org/content/repositories/snapshots'} } dependencies { @@ -42,7 +42,7 @@ allprojects { maven { url "https://www.jitpack.io" } maven {url 'https://developer.huawei.com/repo/'} maven{ url 'https://maven.aliyun.com/nexus/content/groups/public/'} - maven{ url 'https://oss.sonatype.org/content/repositories/snapshots'} + // maven{ url 'https://oss.sonatype.org/content/repositories/snapshots'} flatDir{ dirs project(':common').file('lib') diff --git a/common/src/main/java/com/xty/common/arouter/ARouterUrl.kt b/common/src/main/java/com/xty/common/arouter/ARouterUrl.kt index 8674b58..066f520 100644 --- a/common/src/main/java/com/xty/common/arouter/ARouterUrl.kt +++ b/common/src/main/java/com/xty/common/arouter/ARouterUrl.kt @@ -22,6 +22,9 @@ class ARouterUrl { const val MESSAGE_DETAIL_NEW = "/com/zj365/dc/activity/MessageDetailNewAct" const val WATCH_FAMILY_HEALTH = "/com/zj365/dc/activity/WatchFamilyHealthAct" + //商城 + const val SHOP_CATEGORY = "/com/zj365/dc/activity/shop/ShopCategoryActivity" + // const val FAMILY_INFO="/com/zj365/dc/act/FamilyMainAct" const val AGAIN_SIGN = "/com/zj365/dc/act/AgainSignAct" diff --git a/common/src/main/java/com/xty/common/util/SpannableUtils.kt b/common/src/main/java/com/xty/common/util/SpannableUtils.kt index 93bb786..f16bc9b 100644 --- a/common/src/main/java/com/xty/common/util/SpannableUtils.kt +++ b/common/src/main/java/com/xty/common/util/SpannableUtils.kt @@ -1,11 +1,13 @@ package com.xty.common.util +import android.graphics.Paint import android.graphics.Typeface import android.text.SpannableString import android.text.Spanned import android.text.style.AbsoluteSizeSpan import android.text.style.ForegroundColorSpan import android.text.style.StyleSpan +import android.widget.TextView object SpannableUtils { @@ -111,5 +113,12 @@ object SpannableUtils { return statuSpan } + fun setMoney(txtView: TextView, num:String){ + var statuSpan = SpannableString("¥ ${num}") + txtView.text = statuSpan + txtView.paint.flags = Paint.STRIKE_THRU_TEXT_FLAG + txtView.paint.isAntiAlias = true + } + } \ No newline at end of file diff --git a/common/src/main/res/color/color_02c_333.xml b/common/src/main/res/color/color_02c_333.xml new file mode 100644 index 0000000..1ad3800 --- /dev/null +++ b/common/src/main/res/color/color_02c_333.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/common/src/main/res/drawable/selector_ele_setting.xml b/common/src/main/res/drawable/selector_ele_setting.xml new file mode 100644 index 0000000..63e8a49 --- /dev/null +++ b/common/src/main/res/drawable/selector_ele_setting.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/common/src/main/res/mipmap-xxhdpi/icon_seekbar_drawer.png b/common/src/main/res/mipmap-xxhdpi/icon_seekbar_drawer.png new file mode 100644 index 0000000000000000000000000000000000000000..1e0e985be601cdf0dbcc9edbfc784c5e31d38806 GIT binary patch literal 3609 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 literal 0 HcmV?d00001 diff --git a/mine/src/main/java/com/zj365/mime/act/DevInfoAct.kt b/mine/src/main/java/com/zj365/mime/act/DevInfoAct.kt index 810d852..386c786 100644 --- a/mine/src/main/java/com/zj365/mime/act/DevInfoAct.kt +++ b/mine/src/main/java/com/zj365/mime/act/DevInfoAct.kt @@ -27,6 +27,7 @@ import com.xty.common.setImage import com.xty.common.util.PermissionUtils import com.xty.network.MyRetrofit import com.xty.network.model.SettingBean +import com.xty.network.model.UserEquipmentInformationizationBean import com.zj365.mime.BuildConfig import com.zj365.mime.R import com.zj365.mime.databinding.ActDevInfoBinding @@ -53,6 +54,8 @@ class DevInfoAct : BaseVmAct() { var user: SettingBean.User? = null var userId: String? = null + + var devInfo: UserEquipmentInformationizationBean? = null private val unBindDialog by lazy { FactorySettingDialog(this, getString(R.string.dialog_un_bind)) { //确认解除绑定 @@ -129,9 +132,16 @@ class DevInfoAct : BaseVmAct() { binding.tvContactKefu.text = span binding.tvDeviceSetting.setOnClickListener { - bundle.clear() - bundle.putString("web_site_url","${BuildConfig.h5url}pages/index/index?pageId=braceletSetting") - RouteManager.goAct(ARouterUrl.H5_ACT,bundle) + devInfo?.let { + if(it.bindType == 1){ + bundle.clear() + bundle.putString("web_site_url","${BuildConfig.h5url}pages/index/index?pageId=braceletSetting") + RouteManager.goAct(ARouterUrl.H5_ACT,bundle) + }else{ + RouteManager.goAct(ARouterUrl.WEAR_MANAGER) + } + } + } binding.tvRecharge.setOnClickListener { @@ -169,6 +179,7 @@ class DevInfoAct : BaseVmAct() { } mViewModel.deviceInfo.observe(this) { + devInfo = it.data if(it.data.bindType == 1){ binding.mNickName.text = "设备名称:${it.data.watchName?:""}" binding.mNum.text = "设备编码:${it.data.bluetooth?:""}" @@ -184,7 +195,7 @@ class DevInfoAct : BaseVmAct() { binding.mActiveCode.text = "设备激活码:${it.data.activationCode?:""}" binding.mActiveCode.visibility = View.GONE binding.tvRecharge.visibility = View.GONE - binding.tvDeviceSetting.visibility = View.GONE + binding.tvDeviceSetting.visibility = View.VISIBLE binding.ivDevice.setImage(this,it.data.deviceImageUrl) } diff --git a/mine/src/main/res/layout/act_wear_manager.xml b/mine/src/main/res/layout/act_wear_manager.xml index 16a4e93..a5fdad2 100644 --- a/mine/src/main/res/layout/act_wear_manager.xml +++ b/mine/src/main/res/layout/act_wear_manager.xml @@ -655,6 +655,7 @@ android:background="@color/col_f1f" /> - + + + + + + + + + + + diff --git a/network/src/main/java/com/xty/network/ApiInterface.kt b/network/src/main/java/com/xty/network/ApiInterface.kt index a48dfdb..fda81a1 100644 --- a/network/src/main/java/com/xty/network/ApiInterface.kt +++ b/network/src/main/java/com/xty/network/ApiInterface.kt @@ -1846,4 +1846,16 @@ interface ApiInterface { */ @POST("customer/material/index") suspend fun getEnterpriseInfoHomeList():RespBody> + + /** + * 商城分类 + */ + @GET("customer/mall/category/list") + suspend fun getGoodsCategory(@Query("parentId") parentId:Long):RespBody> + + /** + * 商品列表 + */ + @POST("customer/mall/prod/getProdList") + suspend fun getGoodsList(@Body rb: RequestBody):RespBody } \ No newline at end of file diff --git a/network/src/main/java/com/xty/network/model/GoodsRecordsBean.kt b/network/src/main/java/com/xty/network/model/GoodsRecordsBean.kt new file mode 100644 index 0000000..1719fe8 --- /dev/null +++ b/network/src/main/java/com/xty/network/model/GoodsRecordsBean.kt @@ -0,0 +1,19 @@ +package com.xty.network.model + +data class GoodsRecordsBean( + var records:ArrayList +) { + data class GoodsBean( + var id:Long, + var prodName:String, + var oriPrice:String, + var price:String, + var brief:String, + var content:String, + var pic:String, + var imgs:String, + var status:Int, + var categoryId:Long, + var prodType:Int, + var soldNum:String) +} \ No newline at end of file diff --git a/network/src/main/java/com/xty/network/model/ShopCategoryBean.kt b/network/src/main/java/com/xty/network/model/ShopCategoryBean.kt new file mode 100644 index 0000000..0cf5a4c --- /dev/null +++ b/network/src/main/java/com/xty/network/model/ShopCategoryBean.kt @@ -0,0 +1,15 @@ +package com.xty.network.model + +import android.os.Parcelable +import kotlinx.android.parcel.Parcelize + +@Parcelize +data class ShopCategoryBean( + var id:Long, + var parentId:Long, + var categoryName:String, + var categoryType:Int, //商品类型,1,普通商品,2,VIP商品,3,增值服务 + + var pic:String?, + var isChecked:Boolean = false +): Parcelable