Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
ShenghuoquanBusiness
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
bp
ShenghuoquanBusiness
Commits
ae789e9f
Commit
ae789e9f
authored
Jul 07, 2021
by
yinjiacheng
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add 商品管理功能
parent
8972a921
Changes
32
Hide whitespace changes
Inline
Side-by-side
Showing
32 changed files
with
1721 additions
and
4 deletions
+1721
-4
build.gradle
CommonLib/Common/build.gradle
+1
-1
XRouterPathConstants.kt
...n/src/main/java/com/yidian/common/XRouterPathConstants.kt
+3
-0
CommonTopBarView.kt
...rc/main/java/com/yidian/common/widget/CommonTopBarView.kt
+113
-0
shape_bg_common_btn.xml
...nLib/Common/src/main/res/drawable/shape_bg_common_btn.xml
+13
-0
shape_bg_common_card.xml
...Lib/Common/src/main/res/drawable/shape_bg_common_card.xml
+9
-0
view_common_top_bar.xml
CommonLib/Common/src/main/res/layout/view_common_top_bar.xml
+41
-0
attrs.xml
CommonLib/Common/src/main/res/values/attrs.xml
+7
-0
colors.xml
CommonLib/Common/src/main/res/values/colors.xml
+3
-0
AndroidManifest.xml
Components/commodity/src/main/AndroidManifest.xml
+1
-0
ClassMapUtil.kt
...ava/com/yidian/shenghuoquan/commodity/app/ClassMapUtil.kt
+2
-0
CommodityManagementListDto.kt
.../shenghuoquan/commodity/dto/CommodityManagementListDto.kt
+52
-0
CommodityStatusListDto.kt
...dian/shenghuoquan/commodity/dto/CommodityStatusListDto.kt
+17
-0
CouponDataSource.kt
...om/yidian/shenghuoquan/commodity/http/CouponDataSource.kt
+85
-0
CouponService.kt
...a/com/yidian/shenghuoquan/commodity/http/CouponService.kt
+46
-1
ICommodityOperationCallback.kt
...an/commodity/http/callback/ICommodityOperationCallback.kt
+13
-0
IGetCommodityManagementListCallback.kt
...dity/http/callback/IGetCommodityManagementListCallback.kt
+13
-0
IGetCommodityStatusListCallback.kt
...ommodity/http/callback/IGetCommodityStatusListCallback.kt
+13
-0
CommodityManagementActivity.kt
...uoquan/commodity/ui/coupon/CommodityManagementActivity.kt
+60
-0
CommodityListAdapter.kt
...oquan/commodity/ui/coupon/adapter/CommodityListAdapter.kt
+242
-0
CommodityListFragment.kt
...uan/commodity/ui/coupon/fragment/CommodityListFragment.kt
+71
-0
CommodityListItemViewModel.kt
...mmodity/ui/coupon/viewmodel/CommodityListItemViewModel.kt
+101
-0
CommodityListViewModel.kt
...n/commodity/ui/coupon/viewmodel/CommodityListViewModel.kt
+101
-0
CommodityManagementViewModel.kt
...odity/ui/coupon/viewmodel/CommodityManagementViewModel.kt
+37
-0
layer_commodity_list_indicator.xml
.../src/main/res/drawable/layer_commodity_list_indicator.xml
+12
-0
commodity_activity_commodity_management.xml
...in/res/layout/commodity_activity_commodity_management.xml
+66
-0
commodity_fragment_commodity_list.xml
...src/main/res/layout/commodity_fragment_commodity_list.xml
+35
-0
commodity_item_commodity_audit_list.xml
...c/main/res/layout/commodity_item_commodity_audit_list.xml
+116
-0
commodity_item_commodity_offline_list.xml
...main/res/layout/commodity_item_commodity_offline_list.xml
+151
-0
commodity_item_commodity_online_list.xml
.../main/res/layout/commodity_item_commodity_online_list.xml
+153
-0
commodity_item_commodity_reject_list.xml
.../main/res/layout/commodity_item_commodity_reject_list.xml
+128
-0
strings.xml
Components/commodity/src/main/res/values/strings.xml
+9
-2
styles.xml
Components/commodity/src/main/res/values/styles.xml
+7
-0
No files found.
CommonLib/Common/build.gradle
View file @
ae789e9f
...
...
@@ -90,6 +90,6 @@ dependencies {
exclude
(
group:
'com.yidian.android'
,
module:
'NetworkImageLib'
)
}
implementation
'com.github.bumptech.glide:glide:4.11.0'
api
'com.github.bumptech.glide:glide:4.11.0'
kapt
'com.github.bumptech.glide:compiler:4.11.0'
}
\ No newline at end of file
CommonLib/Common/src/main/java/com/yidian/common/XRouterPathConstants.kt
View file @
ae789e9f
...
...
@@ -85,5 +85,8 @@ class XRouterPathConstants {
// 商品 —— 优惠券选择类目
const
val
chooseCategoryActivity
=
"/commodity/ChooseCategoryActivity"
// 商品 —— 商品管理
const
val
commodityManagement
=
"/commodity/CommodityManagement"
}
}
CommonLib/Common/src/main/java/com/yidian/common/widget/CommonTopBarView.kt
0 → 100644
View file @
ae789e9f
package
com.yidian.common.widget
import
android.content.Context
import
android.util.AttributeSet
import
android.view.View
import
androidx.constraintlayout.widget.ConstraintLayout
import
androidx.core.view.isVisible
import
com.yidian.common.R
import
com.yidian.common.databinding.ViewCommonTopBarBinding
import
com.yidian.xpage.XPageManager
/**
* author: yinjiacheng
* date: 6/14/21 12:58 AM
* description: 顶部栏
*/
class
CommonTopBarView
@JvmOverloads
constructor
(
context
:
Context
,
attrs
:
AttributeSet
?
=
null
,
defStyle
:
Int
=
0
)
:
ConstraintLayout
(
context
,
attrs
,
defStyle
),
View
.
OnClickListener
{
private
val
viewBinding
by
lazy
{
ViewCommonTopBarBinding
.
bind
(
View
.
inflate
(
getContext
(),
R
.
layout
.
view_common_top_bar
,
this
)
)
}
/**
* 返回按钮点击回调
*/
private
var
backCallback
:
OnCommonTopBarBackCallback
?
=
null
/**
* 操作按钮点击回调
*/
private
var
actionCallback
:
OnCommonTopBarActionCallback
?
=
null
init
{
val
typeArray
=
context
.
obtainStyledAttributes
(
attrs
,
R
.
styleable
.
CommonTopBarView
)
viewBinding
.
tvTitle
.
text
=
typeArray
.
getText
(
R
.
styleable
.
CommonTopBarView_CommonTopBarView_title_text
)
typeArray
.
getText
(
R
.
styleable
.
CommonTopBarView_CommonTopBarView_action_text
)
?.
let
{
if
(
it
.
isNotEmpty
())
visibility
=
View
.
VISIBLE
viewBinding
.
tvAction
.
text
=
it
}
typeArray
.
recycle
()
viewBinding
.
ivBack
.
setOnClickListener
(
this
)
viewBinding
.
tvAction
.
setOnClickListener
(
this
)
}
/**
* 设置返回按钮是否可见
*/
fun
setBackVisibility
(
isVisible
:
Boolean
)
{
viewBinding
.
ivBack
.
isVisible
=
isVisible
}
/**
* 设置操作按钮是否可见
*/
fun
setActionVisibility
(
isVisible
:
Boolean
)
{
viewBinding
.
tvAction
.
isVisible
=
isVisible
}
/**
* 设置操作按钮是否可用
*/
fun
setActionEnable
(
isEnable
:
Boolean
)
{
viewBinding
.
tvAction
.
isEnabled
=
isEnable
viewBinding
.
tvAction
.
alpha
=
if
(
isEnable
)
1f
else
0.4f
}
override
fun
onClick
(
v
:
View
?)
{
if
(
v
?.
id
==
R
.
id
.
iv_back
)
{
// 若没有设置返回点击回调则默认pop
backCallback
?.
onDoBack
()
?:
XPageManager
.
pop
(
null
)
}
else
if
(
v
?.
id
==
R
.
id
.
tv_action
)
{
actionCallback
?.
onDoAction
()
}
}
/**
* 设置回调
* @param backCallback 返回按钮点击回调
* @param actionCallback 操作按钮点击回调
*/
fun
setOnCommonTopBarCallback
(
backCallback
:
OnCommonTopBarBackCallback
?,
actionCallback
:
OnCommonTopBarActionCallback
?)
{
this
.
backCallback
=
backCallback
this
.
actionCallback
=
actionCallback
}
interface
OnCommonTopBarActionCallback
{
/**
* 操作按钮回调
*/
fun
onDoAction
()
}
interface
OnCommonTopBarBackCallback
{
/**
* 返回按钮回调
*/
fun
onDoBack
()
}
}
CommonLib/Common/src/main/res/drawable/shape_bg_common_btn.xml
0 → 100644
View file @
ae789e9f
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:shape=
"rectangle"
>
<gradient
android:angle=
"0"
android:endColor=
"@color/color_3693FF"
android:startColor=
"@color/color_1751F1"
android:type=
"linear"
/>
<corners
android:radius=
"@dimen/dp22"
/>
</shape>
\ No newline at end of file
CommonLib/Common/src/main/res/drawable/shape_bg_common_card.xml
0 → 100644
View file @
ae789e9f
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:shape=
"rectangle"
>
<solid
android:color=
"@color/white"
/>
<corners
android:radius=
"@dimen/dp12"
/>
</shape>
\ No newline at end of file
CommonLib/Common/src/main/res/layout/view_common_top_bar.xml
0 → 100644
View file @
ae789e9f
<?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=
"@dimen/dp44"
android:paddingStart=
"@dimen/dp20"
android:paddingEnd=
"@dimen/dp20"
>
<ImageView
android:id=
"@+id/iv_back"
android:layout_width=
"@dimen/dp28"
android:layout_height=
"@dimen/dp28"
android:src=
"@drawable/icon_back"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
/>
<TextView
android:id=
"@+id/tv_title"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:includeFontPadding=
"false"
android:textColor=
"@color/color_333333"
android:textSize=
"@dimen/sp18"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
/>
<TextView
android:id=
"@+id/tv_action"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:includeFontPadding=
"false"
android:textColor=
"@color/color_1852F1"
android:textSize=
"@dimen/sp14"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
CommonLib/Common/src/main/res/values/attrs.xml
0 → 100644
View file @
ae789e9f
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable
name=
"CommonTopBarView"
>
<attr
name=
"CommonTopBarView_title_text"
format=
"string"
/>
<attr
name=
"CommonTopBarView_action_text"
format=
"string"
/>
</declare-styleable>
</resources>
\ No newline at end of file
CommonLib/Common/src/main/res/values/colors.xml
View file @
ae789e9f
...
...
@@ -45,4 +45,7 @@
<color
name=
"color_1A000000"
>
#1A000000
</color>
<color
name=
"color_DE000000"
>
#DE000000
</color>
<color
name=
"color_8F000000"
>
#8F000000
</color>
<color
name=
"color_F2F2F2"
>
#F2F2F2
</color>
<color
name=
"color_3693FF"
>
#3693FF
</color>
<color
name=
"color_1751F1"
>
#1751F1
</color>
</resources>
Components/commodity/src/main/AndroidManifest.xml
View file @
ae789e9f
...
...
@@ -7,5 +7,6 @@
<activity
android:name=
".ui.coupon.CategorySearchActivity"
android:windowSoftInputMode=
"adjustPan"
/>
<activity
android:name=
".ui.coupon.CommodityManagementActivity"
/>
</application>
</manifest>
\ No newline at end of file
Components/commodity/src/main/java/com/yidian/shenghuoquan/commodity/app/ClassMapUtil.kt
View file @
ae789e9f
...
...
@@ -3,6 +3,7 @@ package com.yidian.shenghuoquan.commodity.app
import
com.yidian.common.XRouterPathConstants
import
com.yidian.shenghuoquan.commodity.ui.coupon.ChooseCategoryActivity
import
com.yidian.shenghuoquan.commodity.ui.coupon.PublishCouponsActivity
import
com.yidian.shenghuoquan.commodity.ui.coupon.CommodityManagementActivity
/**
...
...
@@ -13,6 +14,7 @@ object ClassMapUtil {
val
xPageNodeMap
=
mapOf
(
XRouterPathConstants
.
Companion
.
publishCouponsActivity
to
PublishCouponsActivity
::
class
.
java
,
// 发布优惠券
XRouterPathConstants
.
Companion
.
chooseCategoryActivity
to
ChooseCategoryActivity
::
class
.
java
,
// 优惠券选择类目
XRouterPathConstants
.
Companion
.
commodityManagement
to
CommodityManagementActivity
::
class
.
java
,
// 商品管理
)
}
Components/commodity/src/main/java/com/yidian/shenghuoquan/commodity/dto/CommodityManagementListDto.kt
0 → 100644
View file @
ae789e9f
package
com.yidian.shenghuoquan.commodity.dto
import
com.google.gson.annotations.SerializedName
/**
* author: yinjiacheng
* date: 7/2/21 4:20 PM
* description: 商品管理列表数据结构
*/
data class
CommodityManagementListDto
(
@SerializedName
(
"goods_list"
)
val
goodsList
:
List
<
Goods
>,
@SerializedName
(
"last_id"
)
val
lastId
:
String
,
@SerializedName
(
"status_list"
)
val
statusList
:
List
<
Status
>
)
data class
Goods
(
@SerializedName
(
"audit_status"
)
val
auditStatus
:
Int
,
@SerializedName
(
"desc"
)
val
desc
:
String
,
@SerializedName
(
"desc_pic_url"
)
val
descPicUrl
:
String
,
@SerializedName
(
"desc_pic_url_list"
)
val
descPicUrlList
:
List
<
String
>,
@SerializedName
(
"goods_name"
)
val
goodsName
:
String
,
@SerializedName
(
"goods_sku_id"
)
val
goodsSkuId
:
String
,
@SerializedName
(
"goods_spu_id"
)
val
goodsSpuId
:
String
,
@SerializedName
(
"inventory_rest"
)
val
inventoryRest
:
Int
,
@SerializedName
(
"online_status"
)
val
onlineStatus
:
Int
,
@SerializedName
(
"original_price"
)
val
originalPrice
:
Double
,
@SerializedName
(
"price"
)
val
price
:
Double
,
@SerializedName
(
"total_amount_sold"
)
val
totalAmountSold
:
Int
)
data class
Status
(
@SerializedName
(
"name"
)
val
name
:
String
,
@SerializedName
(
"type"
)
val
type
:
String
)
Components/commodity/src/main/java/com/yidian/shenghuoquan/commodity/dto/CommodityStatusListDto.kt
0 → 100644
View file @
ae789e9f
package
com.yidian.shenghuoquan.commodity.dto
import
com.google.gson.annotations.SerializedName
/**
* author: yinjiacheng
* date: 7/6/21 10:46 AM
* description: 商品状态列表数据结构
*/
data class
CommodityStatus
(
@SerializedName
(
"tab_id"
)
val
tabId
:
Int
,
@SerializedName
(
"name"
)
val
name
:
String
,
@SerializedName
(
"type"
)
val
type
:
String
)
Components/commodity/src/main/java/com/yidian/shenghuoquan/commodity/http/CouponDataSource.kt
View file @
ae789e9f
...
...
@@ -6,7 +6,12 @@ import com.yidian.common.http.HttpResultSubscriber
import
com.yidian.common.http.TransformUtil
import
com.yidian.http.ServiceFactory
import
com.yidian.shenghuoquan.commodity.dto.CategoryListDto
import
com.yidian.shenghuoquan.commodity.dto.CommodityManagementListDto
import
com.yidian.shenghuoquan.commodity.dto.CommodityStatus
import
com.yidian.shenghuoquan.commodity.http.callback.ICategoryListCallback
import
com.yidian.shenghuoquan.commodity.http.callback.ICommodityOperationCallback
import
com.yidian.shenghuoquan.commodity.http.callback.IGetCommodityManagementListCallback
import
com.yidian.shenghuoquan.commodity.http.callback.IGetCommodityStatusListCallback
/**
* 优惠券数据源
...
...
@@ -34,4 +39,84 @@ object CouponDataSource {
}
})
}
/**
* 获取商品管理列表
*/
fun
getCommodityManagementList
(
apiCallback
:
IGetCommodityManagementListCallback
,
requestParams
:
HashMap
<
String
,
String
?
>)
{
val
timeStamp
=
System
.
currentTimeMillis
()
val
publicParamsMap
=
HttpParamsUtils
.
getPublicParamsMap
(
timeStamp
)
val
privateParamsMap
=
HttpParamsUtils
.
getPrivateParamsMap
(
requestParams
,
timeStamp
)
api
.
getCommodityManagementList
(
publicParamsMap
,
privateParamsMap
)
.
compose
(
TransformUtil
.
defaultSchedulers
())
.
subscribe
(
object
:
HttpResultSubscriber
<
CommodityManagementListDto
>()
{
override
fun
onSuccess
(
result
:
HttpResult
<
CommodityManagementListDto
>?)
{
apiCallback
.
getCommodityListSuccess
(
result
?.
result
)
}
override
fun
onFailer
(
result
:
HttpResult
<
CommodityManagementListDto
>?)
{
apiCallback
.
getCommodityListFailure
(
result
?.
reason
)
}
})
}
/**
* 获取商品状态列表
*/
fun
getCommodityStatusList
(
apiCallback
:
IGetCommodityStatusListCallback
)
{
val
timeStamp
=
System
.
currentTimeMillis
()
val
publicParamsMap
=
HttpParamsUtils
.
getPublicParamsMap
(
timeStamp
)
val
privateParamsMap
=
HttpParamsUtils
.
getPrivateParamsMap
(
hashMapOf
(),
timeStamp
)
api
.
getCommodityStatusList
(
publicParamsMap
,
privateParamsMap
)
.
compose
(
TransformUtil
.
defaultSchedulers
())
.
subscribe
(
object
:
HttpResultSubscriber
<
ArrayList
<
CommodityStatus
>>()
{
override
fun
onSuccess
(
result
:
HttpResult
<
ArrayList
<
CommodityStatus
>>?)
{
apiCallback
.
getCommodityStatusListSuccess
(
result
?.
result
)
}
override
fun
onFailer
(
result
:
HttpResult
<
ArrayList
<
CommodityStatus
>>?)
{
apiCallback
.
getCommodityStatusListFailure
(
result
?.
reason
)
}
})
}
/**
* 商品上架
*/
fun
commodityOnline
(
apiCallback
:
ICommodityOperationCallback
,
requestParams
:
HashMap
<
String
,
String
?
>)
{
val
timeStamp
=
System
.
currentTimeMillis
()
val
publicParamsMap
=
HttpParamsUtils
.
getPublicParamsMap
(
timeStamp
)
val
privateParamsMap
=
HttpParamsUtils
.
getPrivateParamsMap
(
requestParams
,
timeStamp
)
api
.
commodityOnline
(
publicParamsMap
,
privateParamsMap
)
.
compose
(
TransformUtil
.
defaultSchedulers
())
.
subscribe
(
object
:
HttpResultSubscriber
<
Any
>()
{
override
fun
onSuccess
(
result
:
HttpResult
<
Any
>?)
{
apiCallback
.
commodityOnlineSuccess
()
}
override
fun
onFailer
(
result
:
HttpResult
<
Any
>?)
{
apiCallback
.
commodityOnlineFailure
(
result
?.
reason
)
}
})
}
/**
* 商品下架
*/
fun
commodityOffline
(
apiCallback
:
ICommodityOperationCallback
,
requestParams
:
HashMap
<
String
,
String
?
>)
{
val
timeStamp
=
System
.
currentTimeMillis
()
val
publicParamsMap
=
HttpParamsUtils
.
getPublicParamsMap
(
timeStamp
)
val
privateParamsMap
=
HttpParamsUtils
.
getPrivateParamsMap
(
requestParams
,
timeStamp
)
api
.
commodityOffline
(
publicParamsMap
,
privateParamsMap
)
.
compose
(
TransformUtil
.
defaultSchedulers
())
.
subscribe
(
object
:
HttpResultSubscriber
<
Any
>()
{
override
fun
onSuccess
(
result
:
HttpResult
<
Any
>?)
{
apiCallback
.
commodityOfflineSuccess
()
}
override
fun
onFailer
(
result
:
HttpResult
<
Any
>?)
{
apiCallback
.
commodityOfflineFailure
(
result
?.
reason
)
}
})
}
}
Components/commodity/src/main/java/com/yidian/shenghuoquan/commodity/http/CouponService.kt
View file @
ae789e9f
...
...
@@ -3,6 +3,8 @@ package com.yidian.shenghuoquan.commodity.http
import
com.yidian.common.http.HttpResult
import
io.reactivex.rxjava3.core.Observable
import
retrofit2.http.GET
import
retrofit2.http.Headers
import
retrofit2.http.POST
import
retrofit2.http.QueryMap
interface
CouponService
{
...
...
@@ -10,7 +12,10 @@ interface CouponService {
private
companion
object
{
const
val
categoryList
=
"/goods/customer/get_goods_category_list"
const
val
searchCategoryList
=
"/merchant/enterprise/get_account_role_list"
const
val
getCommodityManagementList
=
"/goods/customer/my_goods"
const
val
getCommodityStatusList
=
"/goods/business/my_goods_status_list"
const
val
commodityOnline
=
"/goods/customer/online"
const
val
commodityOffline
=
"/goods/customer/offline"
}
/**
...
...
@@ -18,9 +23,49 @@ interface CouponService {
*/
@GET
(
categoryList
)
fun
getCategoryList
(
@QueryMap
commonParams
:
Map
<
String
,
String
>,
@QueryMap
params
:
Map
<
String
,
String
?
>):
Observable
<
HttpResult
<
Any
?
>>
/**
* 搜索类目列表(可能会共用上面的接口)
*/
@GET
(
searchCategoryList
)
fun
searchCategoryList
(
@QueryMap
commonParams
:
Map
<
String
,
String
>,
@QueryMap
params
:
Map
<
String
,
String
?
>):
Observable
<
HttpResult
<
Any
?
>>
/**
* 1016 获取商品列表
*/
@GET
(
getCommodityManagementList
)
fun
getCommodityManagementList
(
@QueryMap
commonParams
:
Map
<
String
,
String
>,
@QueryMap
requestParams
:
Map
<
String
,
String
?
>
):
Observable
<
HttpResult
<
Any
?
>>
/**
* 1025 获取商品状态列表
* e.g. 上架中,审核中,被驳回,已下架
*/
@GET
(
getCommodityStatusList
)
fun
getCommodityStatusList
(
@QueryMap
commonParams
:
Map
<
String
,
String
>,
@QueryMap
requestParams
:
Map
<
String
,
String
?
>
):
Observable
<
HttpResult
<
Any
?
>>
/**
* 1012 商品上架
*/
@POST
(
commodityOnline
)
@Headers
(
"Content-Type: application/json"
)
fun
commodityOnline
(
@QueryMap
commonParams
:
Map
<
String
,
String
>,
@QueryMap
requestParams
:
Map
<
String
,
String
?
>
):
Observable
<
HttpResult
<
Any
?
>>
/**
* 1013 商品下架
*/
@POST
(
commodityOffline
)
@Headers
(
"Content-Type: application/json"
)
fun
commodityOffline
(
@QueryMap
commonParams
:
Map
<
String
,
String
>,
@QueryMap
requestParams
:
Map
<
String
,
String
?
>
):
Observable
<
HttpResult
<
Any
?
>>
}
Components/commodity/src/main/java/com/yidian/shenghuoquan/commodity/http/callback/ICommodityOperationCallback.kt
0 → 100644
View file @
ae789e9f
package
com.yidian.shenghuoquan.commodity.http.callback
/**
* author: yinjiacheng
* date: 7/7/21 8:40 AM
* description: /goods/customer/online /goods/customer/offline
*/
interface
ICommodityOperationCallback
{
fun
commodityOnlineSuccess
()
fun
commodityOnlineFailure
(
message
:
String
?)
fun
commodityOfflineSuccess
()
fun
commodityOfflineFailure
(
message
:
String
?)
}
Components/commodity/src/main/java/com/yidian/shenghuoquan/commodity/http/callback/IGetCommodityManagementListCallback.kt
0 → 100644
View file @
ae789e9f
package
com.yidian.shenghuoquan.commodity.http.callback
import
com.yidian.shenghuoquan.commodity.dto.CommodityManagementListDto
/**
* author: yinjiacheng
* date: 7/4/21 3:28 PM
* description: /goods/customer/my_goods
*/
interface
IGetCommodityManagementListCallback
{
fun
getCommodityListSuccess
(
result
:
CommodityManagementListDto
?)
fun
getCommodityListFailure
(
message
:
String
?)
}
Components/commodity/src/main/java/com/yidian/shenghuoquan/commodity/http/callback/IGetCommodityStatusListCallback.kt
0 → 100644
View file @
ae789e9f
package
com.yidian.shenghuoquan.commodity.http.callback
import
com.yidian.shenghuoquan.commodity.dto.CommodityStatus
/**
* author: yinjiacheng
* date: 7/6/21 10:45 AM
* description: /goods/business/my_goods_status_list
*/
interface
IGetCommodityStatusListCallback
{
fun
getCommodityStatusListSuccess
(
result
:
ArrayList
<
CommodityStatus
>?)
fun
getCommodityStatusListFailure
(
message
:
String
?)
}
Components/commodity/src/main/java/com/yidian/shenghuoquan/commodity/ui/coupon/CommodityManagementActivity.kt
0 → 100644
View file @
ae789e9f
package
com.yidian.shenghuoquan.commodity.ui.coupon
import
androidx.activity.viewModels
import
androidx.fragment.app.Fragment
import
androidx.viewpager2.adapter.FragmentStateAdapter
import
com.google.android.material.tabs.TabLayoutMediator
import
com.yidian.common.XRouterPathConstants
import
com.yidian.common.mvvm.BaseMvvmActivity
import
com.yidian.shenghuoquan.commodity.R
import
com.yidian.shenghuoquan.commodity.databinding.CommodityActivityCommodityManagementBinding
import
com.yidian.shenghuoquan.commodity.ui.coupon.fragment.CommodityListFragment
import
com.yidian.shenghuoquan.commodity.ui.coupon.viewmodel.CommodityManagementViewModel
import
com.yidian.utils.ToastUtil
import
com.yidian.xpage.XPageViewProtocol
/**
* author: yinjiacheng
* date: 7/1/21 8:05 PM
* description: 商品管理
*/
class
CommodityManagementActivity
:
BaseMvvmActivity
<
CommodityActivityCommodityManagementBinding
,
CommodityManagementViewModel
>(),
XPageViewProtocol
{
override
val
layoutId
:
Int
=
R
.
layout
.
commodity_activity_commodity_management
override
val
vm
:
CommodityManagementViewModel
by
viewModels
()
override
fun
initView
()
{
vm
.
commodityStatusList
.
observe
(
this
,
{
// ViewPager2设置适配器
binding
.
vpCommodityList
.
adapter
=
object
:
FragmentStateAdapter
(
this
)
{
override
fun
getItemCount
()
=
it
.
size
override
fun
createFragment
(
position
:
Int
):
Fragment
{
return
CommodityListFragment
(
it
[
position
])
}
}
// TabLayout与ViewPager2绑定
TabLayoutMediator
(
binding
.
tlCommodityList
,
binding
.
vpCommodityList
)
{
tab
,
position
->
tab
.
text
=
it
[
position
].
name
}.
attach
()
})
// 请求商品状态列表
vm
.
requestCommodityStatusList
()
//发布商品
binding
.
tvCommodityPublish
.
setOnClickListener
{
// TODO: 7/7/21 跳转H5
// Test
ToastUtil
.
showToast
(
this
,
"跳转商品发布"
)
}
}
override
fun
getXPageName
():
String
{
return
XRouterPathConstants
.
commodityManagement
}
}
Components/commodity/src/main/java/com/yidian/shenghuoquan/commodity/ui/coupon/adapter/CommodityListAdapter.kt
0 → 100644
View file @
ae789e9f
package
com.yidian.shenghuoquan.commodity.ui.coupon.adapter
import
android.content.Context
import
android.graphics.Paint
import
android.graphics.Rect
import
android.view.LayoutInflater
import
android.view.View
import
android.view.ViewGroup
import
android.widget.ImageView
import
androidx.databinding.BindingAdapter
import
androidx.databinding.DataBindingUtil
import
androidx.databinding.ViewDataBinding
import
androidx.lifecycle.LifecycleOwner
import
androidx.recyclerview.widget.RecyclerView
import
com.bumptech.glide.Glide
import
com.bumptech.glide.load.resource.bitmap.CenterCrop
import
com.bumptech.glide.load.resource.bitmap.RoundedCorners
import
com.bumptech.glide.request.RequestOptions
import
com.yidian.common.mvvm.BaseViewModel
import
com.yidian.common.widget.CommonHintDialog
import
com.yidian.shenghuoquan.commodity.BR
import
com.yidian.shenghuoquan.commodity.R
import
com.yidian.shenghuoquan.commodity.databinding.CommodityItemCommodityAuditListBinding
import
com.yidian.shenghuoquan.commodity.databinding.CommodityItemCommodityOfflineListBinding
import
com.yidian.shenghuoquan.commodity.databinding.CommodityItemCommodityOnlineListBinding
import
com.yidian.shenghuoquan.commodity.databinding.CommodityItemCommodityRejectListBinding
import
com.yidian.shenghuoquan.commodity.dto.CommodityStatus
import
com.yidian.shenghuoquan.commodity.dto.Goods
import
com.yidian.shenghuoquan.commodity.ui.coupon.viewmodel.CommodityListItemViewModel
import
com.yidian.utils.DensityUtil
import
com.yidian.utils.ToastUtil
/**
* author: yinjiacheng
* date: 7/2/21 2:33 PM
* description: 商品管理列表adapter
*/
class
CommodityListAdapter
(
private
val
context
:
Context
,
private
val
status
:
CommodityStatus
)
:
RecyclerView
.
Adapter
<
RecyclerView
.
ViewHolder
>()
{
companion
object
{
// 商品状态标识
private
const
val
ID_COMMODITY_ONLINE
=
1
private
const
val
ID_COMMODITY_AUDIT
=
2
private
const
val
ID_COMMODITY_REJECT
=
3
private
const
val
ID_COMMODITY_OFFLINE
=
4
/**
* 加载圆角图片
* @param url 图片url
* @param corner 圆角值
* @param target 目标ImageView
*/
@BindingAdapter
(
value
=
[
"url"
,
"corner"
],
requireAll
=
true
)
@JvmStatic
fun
loadRoundCornerImage
(
target
:
ImageView
,
url
:
String
,
corner
:
Int
=
12
)
{
Glide
.
with
(
target
.
context
).
load
(
url
)
.
apply
(
RequestOptions
().
transform
(
CenterCrop
(),
RoundedCorners
(
DensityUtil
.
dp2px
(
corner
.
toFloat
()))))
.
into
(
target
)
}
/**
* 加载圆角图片
* @param urlList 图片urlList
* @param corner 圆角值
* @param target 目标ImageView
*/
@BindingAdapter
(
value
=
[
"urlList"
,
"corner"
],
requireAll
=
true
)
@JvmStatic
fun
loadRoundCornerImage
(
target
:
ImageView
,
urlList
:
List
<
String
>,
corner
:
Int
=
12
)
{
if
(
urlList
.
isEmpty
())
return
Glide
.
with
(
target
.
context
).
load
(
urlList
[
0
])
.
apply
(
RequestOptions
().
transform
(
CenterCrop
(),
RoundedCorners
(
DensityUtil
.
dp2px
(
corner
.
toFloat
()))))
.
into
(
target
)
}
}
/**
* 商品数据
*/
private
val
commodityData
by
lazy
{
ArrayList
<
Goods
>()
}
/**
* 更新数据
*/
fun
updateData
(
data
:
List
<
Goods
>?)
{
data
?.
let
{
notifyItemRangeRemoved
(
0
,
commodityData
.
size
)
commodityData
.
clear
()
commodityData
.
addAll
(
it
)
notifyItemRangeInserted
(
0
,
commodityData
.
size
)
}
}
/**
* 插入数据
*/
fun
insertData
(
data
:
List
<
Goods
>?)
{
data
?.
let
{
commodityData
.
addAll
(
it
)
notifyItemRangeInserted
(
commodityData
.
size
-
it
.
size
,
it
.
size
)
}
}
/**
* 获取DataBinding
*/
private
fun
<
VB
:
ViewDataBinding
>
getBinding
(
parent
:
ViewGroup
,
layoutResId
:
Int
,
viewModel
:
BaseViewModel
):
VB
{
val
binding
=
DataBindingUtil
.
inflate
<
VB
>(
LayoutInflater
.
from
(
parent
.
context
),
layoutResId
,
parent
,
false
)
binding
.
setVariable
(
BR
.
vm
,
viewModel
)
// binding.lifecycleOwner = context as LifecycleOwner
return
binding
}
override
fun
onCreateViewHolder
(
parent
:
ViewGroup
,
viewType
:
Int
):
RecyclerView
.
ViewHolder
{
when
(
viewType
)
{
// 上架中
ID_COMMODITY_ONLINE
->
{
return
getBinding
<
CommodityItemCommodityOnlineListBinding
>(
parent
,
R
.
layout
.
commodity_item_commodity_online_list
,
CommodityListItemViewModel
()
).
let
{
CommodityOnlineItemViewHolder
(
it
,
it
.
root
)
}
}
// 被驳回
ID_COMMODITY_REJECT
->
{
return
getBinding
<
CommodityItemCommodityRejectListBinding
>(
parent
,
R
.
layout
.
commodity_item_commodity_reject_list
,
CommodityListItemViewModel
()
).
let
{
CommodityRejectItemViewHolder
(
it
,
it
.
root
)
}
}
// 已下架
ID_COMMODITY_OFFLINE
->
{
return
getBinding
<
CommodityItemCommodityOfflineListBinding
>(
parent
,
R
.
layout
.
commodity_item_commodity_offline_list
,
CommodityListItemViewModel
()
).
let
{
CommodityOfflineItemViewHolder
(
it
,
it
.
root
)
}
}
// 默认审核中
else
->
{
return
getBinding
<
CommodityItemCommodityAuditListBinding
>(
parent
,
R
.
layout
.
commodity_item_commodity_audit_list
,
CommodityListItemViewModel
()
).
let
{
CommodityAuditItemViewHolder
(
it
,
it
.
root
)
}
}
}
}
override
fun
onBindViewHolder
(
holder
:
RecyclerView
.
ViewHolder
,
position
:
Int
)
{
// 绑定数据
val
data
=
commodityData
[
position
]
when
(
holder
)
{
is
CommodityOnlineItemViewHolder
->
{
holder
.
binding
.
data
=
data
holder
.
binding
.
vm
?.
commodityOfflineOperationEvent
?.
observe
(
context
as
LifecycleOwner
,
{
// 弹出确认下架弹窗
CommonHintDialog
(
context
,
"确认下架优惠券?"
,
arrayListOf
(
"取消"
,
"下架"
),
object
:
CommonHintDialog
.
OnHintOptionCallback
{
override
fun
onLeftOption
()
{
}
override
fun
onRightOption
()
{
// 下架商品
holder
.
binding
.
vm
?.
requestCommodityOffline
(
it
.
goodsSpuId
)
}
}).
show
()
})
holder
.
binding
.
vm
?.
commodityOfflineSuccessEvent
?.
observe
(
context
as
LifecycleOwner
,
{
// 下架成功 刷新列表
ToastUtil
.
showToast
(
context
,
"下架成功"
)
commodityData
.
remove
(
data
)
notifyItemRemoved
(
position
)
})
}
is
CommodityAuditItemViewHolder
->
{
holder
.
binding
.
data
=
data
}
is
CommodityRejectItemViewHolder
->
{
holder
.
binding
.
data
=
data
}
is
CommodityOfflineItemViewHolder
->
{
holder
.
binding
.
data
=
data
holder
.
binding
.
vm
?.
commodityOnlineSuccessEvent
?.
observe
(
context
as
LifecycleOwner
,
{
// 上架成功 刷新列表
ToastUtil
.
showToast
(
context
,
"上架成功"
)
commodityData
.
remove
(
data
)
notifyItemRemoved
(
position
)
})
}
}
}
override
fun
getItemCount
():
Int
{
return
commodityData
.
size
}
override
fun
getItemViewType
(
position
:
Int
):
Int
{
return
status
.
tabId
}
/**
* ViewHolder定义
*/
class
CommodityOnlineItemViewHolder
(
val
binding
:
CommodityItemCommodityOnlineListBinding
,
itemView
:
View
)
:
RecyclerView
.
ViewHolder
(
itemView
)
{
init
{
// 商品原价加删除线
binding
.
tvCommodityOriginalPrice
.
paint
.
flags
=
Paint
.
STRIKE_THRU_TEXT_FLAG
binding
.
tvCommodityOriginalPrice
.
paint
.
isAntiAlias
=
true
}
}
class
CommodityAuditItemViewHolder
(
val
binding
:
CommodityItemCommodityAuditListBinding
,
itemView
:
View
)
:
RecyclerView
.
ViewHolder
(
itemView
)
{
init
{
binding
.
tvCommodityOriginalPrice
.
paint
.
flags
=
Paint
.
STRIKE_THRU_TEXT_FLAG
binding
.
tvCommodityOriginalPrice
.
paint
.
isAntiAlias
=
true
}
}
class
CommodityRejectItemViewHolder
(
val
binding
:
CommodityItemCommodityRejectListBinding
,
itemView
:
View
)
:
RecyclerView
.
ViewHolder
(
itemView
)
{
init
{
binding
.
tvCommodityOriginalPrice
.
paint
.
flags
=
Paint
.
STRIKE_THRU_TEXT_FLAG
binding
.
tvCommodityOriginalPrice
.
paint
.
isAntiAlias
=
true
}
}
class
CommodityOfflineItemViewHolder
(
val
binding
:
CommodityItemCommodityOfflineListBinding
,
itemView
:
View
)
:
RecyclerView
.
ViewHolder
(
itemView
)
{
init
{
binding
.
tvCommodityOriginalPrice
.
paint
.
flags
=
Paint
.
STRIKE_THRU_TEXT_FLAG
binding
.
tvCommodityOriginalPrice
.
paint
.
isAntiAlias
=
true
}
}
class
CommodityItemDecoration
:
RecyclerView
.
ItemDecoration
()
{
override
fun
getItemOffsets
(
outRect
:
Rect
,
view
:
View
,
parent
:
RecyclerView
,
state
:
RecyclerView
.
State
)
{
outRect
.
bottom
=
DensityUtil
.
dp2px
(
10f
)
}
}
}
Components/commodity/src/main/java/com/yidian/shenghuoquan/commodity/ui/coupon/fragment/CommodityListFragment.kt
0 → 100644
View file @
ae789e9f
package
com.yidian.shenghuoquan.commodity.ui.coupon.fragment
import
androidx.fragment.app.viewModels
import
androidx.recyclerview.widget.LinearLayoutManager
import
com.scwang.smart.refresh.layout.api.RefreshLayout
import
com.scwang.smart.refresh.layout.listener.OnLoadMoreListener
import
com.scwang.smart.refresh.layout.listener.OnRefreshListener
import
com.yidian.common.mvvm.BaseMvvmFragment
import
com.yidian.shenghuoquan.commodity.R
import
com.yidian.shenghuoquan.commodity.databinding.CommodityFragmentCommodityListBinding
import
com.yidian.shenghuoquan.commodity.dto.CommodityStatus
import
com.yidian.shenghuoquan.commodity.ui.coupon.adapter.CommodityListAdapter
import
com.yidian.shenghuoquan.commodity.ui.coupon.viewmodel.CommodityListViewModel
/**
* author: yinjiacheng
* date: 7/2/21 10:44 AM
* description: 商品列表
*/
class
CommodityListFragment
(
private
val
status
:
CommodityStatus
)
:
BaseMvvmFragment
<
CommodityFragmentCommodityListBinding
,
CommodityListViewModel
>(
R
.
layout
.
commodity_fragment_commodity_list
),
OnRefreshListener
,
OnLoadMoreListener
{
private
val
adapter
by
lazy
{
activity
?.
let
{
CommodityListAdapter
(
it
,
status
)
}
}
override
val
vm
:
CommodityListViewModel
by
viewModels
()
override
fun
initView
()
{
initRecyclerView
()
initRefresh
()
subscribeLiveData
()
// 首次加载
binding
.
rlCommodityList
.
autoRefresh
()
}
private
fun
initRecyclerView
()
{
binding
.
rvCommodityList
.
layoutManager
=
LinearLayoutManager
(
activity
,
LinearLayoutManager
.
VERTICAL
,
false
)
binding
.
rvCommodityList
.
adapter
=
adapter
binding
.
rvCommodityList
.
addItemDecoration
(
CommodityListAdapter
.
CommodityItemDecoration
())
}
private
fun
initRefresh
()
{
binding
.
rlCommodityList
.
setOnRefreshListener
(
this
)
binding
.
rlCommodityList
.
setOnLoadMoreListener
(
this
)
}
/**
* 订阅数据
*/
private
fun
subscribeLiveData
()
{
vm
.
refreshFinish
.
observe
(
this
,
{
binding
.
rlCommodityList
.
finishRefresh
()
adapter
?.
updateData
(
it
)
})
vm
.
loadMoreFinish
.
observe
(
this
,
{
binding
.
rlCommodityList
.
finishLoadMore
()
adapter
?.
insertData
(
it
)
})
}
override
fun
onRefresh
(
refreshLayout
:
RefreshLayout
)
{
// 触发下拉刷新
vm
.
requestCommodityManagementList
(
status
,
null
,
CommodityListViewModel
.
LoadType
.
REFRESH
)
}
override
fun
onLoadMore
(
refreshLayout
:
RefreshLayout
)
{
// 触发上拉加载更多
vm
.
requestCommodityManagementList
(
status
,
null
,
CommodityListViewModel
.
LoadType
.
LOAD_MORE
)
}
}
Components/commodity/src/main/java/com/yidian/shenghuoquan/commodity/ui/coupon/viewmodel/CommodityListItemViewModel.kt
0 → 100644
View file @
ae789e9f
package
com.yidian.shenghuoquan.commodity.ui.coupon.viewmodel
import
androidx.lifecycle.MutableLiveData
import
com.yidian.common.YdBaseApplication
import
com.yidian.common.mvvm.BaseViewModel
import
com.yidian.shenghuoquan.commodity.dto.Goods
import
com.yidian.shenghuoquan.commodity.http.CouponDataSource
import
com.yidian.shenghuoquan.commodity.http.callback.ICommodityOperationCallback
import
com.yidian.utils.ToastUtil
/**
* author: yinjiacheng
* date: 7/3/21 2:18 PM
* description: 商品
*/
class
CommodityListItemViewModel
:
BaseViewModel
(),
ICommodityOperationCallback
{
companion
object
{
// 商品spu_id
private
const
val
PARAMS_COMMODITY_ID
=
"goods_spu_id"
}
// 商品上架操作事件
val
commodityOnlineOperationEvent
by
lazy
{
MutableLiveData
<
Goods
>()
}
// 商品上架成功事件
val
commodityOnlineSuccessEvent
by
lazy
{
MutableLiveData
<
Unit
>()
}
// 商品下架操作事件
val
commodityOfflineOperationEvent
by
lazy
{
MutableLiveData
<
Goods
>()
}
// 商品下架成功事件
val
commodityOfflineSuccessEvent
by
lazy
{
MutableLiveData
<
Unit
>()
}
// 商品编辑操作事件
val
commodityEditOperationEvent
by
lazy
{
MutableLiveData
<
Goods
>()
}
/**
* 商品上架
*/
fun
commodityOnline
(
item
:
Goods
)
{
requestCommodityOnline
(
item
.
goodsSpuId
)
}
/**
* 商品下架
*/
fun
commodityOffline
(
item
:
Goods
)
{
// 发送数据
commodityOfflineOperationEvent
.
value
=
item
}
/**
* 商品编辑
*/
fun
commodityEdit
(
item
:
Goods
)
{
startCommodityEdit
(
item
.
goodsSpuId
)
}
/**
* 请求商品上架
*/
fun
requestCommodityOnline
(
commodityId
:
String
)
{
CouponDataSource
.
commodityOnline
(
this
,
hashMapOf
(
Pair
(
PARAMS_COMMODITY_ID
,
commodityId
)))
}
/**
* 请求商品下架
*/
fun
requestCommodityOffline
(
commodityId
:
String
)
{
CouponDataSource
.
commodityOffline
(
this
,
hashMapOf
(
Pair
(
PARAMS_COMMODITY_ID
,
commodityId
)))
}
/**
* 跳转商品编辑页面
*/
private
fun
startCommodityEdit
(
commodityId
:
String
)
{
// TODO: 7/7/21 跳转H5
// Test
ToastUtil
.
showToast
(
YdBaseApplication
.
context
,
"跳转商品编辑"
)
}
override
fun
commodityOnlineSuccess
()
{
// 商品上架成功 发送事件
commodityOnlineSuccessEvent
.
value
=
Unit
}
override
fun
commodityOnlineFailure
(
message
:
String
?)
{
}
override
fun
commodityOfflineSuccess
()
{
// 商品下架成功 发送事件
commodityOfflineSuccessEvent
.
value
=
Unit
}
override
fun
commodityOfflineFailure
(
message
:
String
?)
{
}
}
Components/commodity/src/main/java/com/yidian/shenghuoquan/commodity/ui/coupon/viewmodel/CommodityListViewModel.kt
0 → 100644
View file @
ae789e9f
package
com.yidian.shenghuoquan.commodity.ui.coupon.viewmodel
import
androidx.lifecycle.MutableLiveData
import
com.yidian.common.mvvm.BaseViewModel
import
com.yidian.shenghuoquan.commodity.dto.CommodityManagementListDto
import
com.yidian.shenghuoquan.commodity.dto.CommodityStatus
import
com.yidian.shenghuoquan.commodity.dto.Goods
import
com.yidian.shenghuoquan.commodity.http.CouponDataSource
import
com.yidian.shenghuoquan.commodity.http.callback.IGetCommodityManagementListCallback
/**
* author: yinjiacheng
* date: 7/2/21 10:44 AM
* description: 商品列表
*/
class
CommodityListViewModel
:
BaseViewModel
(),
IGetCommodityManagementListCallback
{
companion
object
{
// 商品类型
private
const
val
PARAMS_COMMODITY_TYPE
=
"type"
// 当前生活号id
private
const
val
PARAMS_LIFE_ACCOUNT_ID
=
"life_account_id"
// 每页数量
private
const
val
PARAMS_COMMODITY_LIST_PAGE_SIZE
=
"num"
// 上一次列表中最后一个goods_spu_id
private
const
val
PARAMS_COMMODITY_LIST_LAST_ID
=
"last_id"
}
/**
* 记录上一次请求列表中最后一项id
*/
private
var
lastId
:
String
?
=
null
/**
* 列表加载类型
*/
private
var
loadType
:
LoadType
?
=
null
/**
* 刷新完成和上拉加载完成LiveData
*/
val
refreshFinish
by
lazy
{
MutableLiveData
<
List
<
Goods
>>()
}
val
loadMoreFinish
by
lazy
{
MutableLiveData
<
List
<
Goods
>>()
}
/**
* 请求商品管理列表
* @param status 商品状态
* @param pageSize 每页数据量 分页加载用
* @param type 列表加载类型
*/
fun
requestCommodityManagementList
(
status
:
CommodityStatus
,
pageSize
:
Int
?,
type
:
LoadType
)
{
// 记录加载类型
loadType
=
type
// 下拉刷新重置lastRequestIndex
if
(
type
==
LoadType
.
REFRESH
)
lastId
=
null
val
requestParams
=
HashMap
<
String
,
String
?>(
4
)
requestParams
[
PARAMS_COMMODITY_TYPE
]
=
status
.
type
// TODO: 7/7/21 入参生活号id
// requestParams[PARAMS_LIFE_ACCOUNT_ID] = Hawk.get(HawkConfig.LifeAccountId, null)
pageSize
?.
let
{
requestParams
[
PARAMS_COMMODITY_LIST_PAGE_SIZE
]
=
it
.
toString
()
}
lastId
?.
let
{
requestParams
[
PARAMS_COMMODITY_LIST_LAST_ID
]
=
it
}
CouponDataSource
.
getCommodityManagementList
(
this
,
requestParams
)
}
override
fun
getCommodityListSuccess
(
result
:
CommodityManagementListDto
?)
{
// lastId为-1时即没有下一页数据 此时不记录
result
?.
lastId
?.
let
{
if
(
it
!=
"-1"
)
lastId
=
it
}
// 通知下拉刷新或上拉加载更多完成
when
(
loadType
)
{
LoadType
.
REFRESH
->
refreshFinish
.
value
=
result
?.
goodsList
LoadType
.
LOAD_MORE
->
loadMoreFinish
.
value
=
result
?.
goodsList
else
->
return
}
}
override
fun
getCommodityListFailure
(
message
:
String
?)
{
when
(
loadType
)
{
LoadType
.
REFRESH
->
refreshFinish
.
value
=
null
LoadType
.
LOAD_MORE
->
loadMoreFinish
.
value
=
null
else
->
return
}
}
/**
* 列表加载类型
*/
enum
class
LoadType
{
// 初次加载
INITIALIZE
,
// 下拉刷新
REFRESH
,
// 上拉加载更多
LOAD_MORE
}
}
Components/commodity/src/main/java/com/yidian/shenghuoquan/commodity/ui/coupon/viewmodel/CommodityManagementViewModel.kt
0 → 100644
View file @
ae789e9f
package
com.yidian.shenghuoquan.commodity.ui.coupon.viewmodel
import
androidx.lifecycle.MutableLiveData
import
com.yidian.common.mvvm.BaseViewModel
import
com.yidian.shenghuoquan.commodity.dto.CommodityStatus
import
com.yidian.shenghuoquan.commodity.http.CouponDataSource
import
com.yidian.shenghuoquan.commodity.http.callback.IGetCommodityStatusListCallback
/**
* author: yinjiacheng
* date: 7/1/21 8:01 PM
* description: 商品管理
*/
class
CommodityManagementViewModel
:
BaseViewModel
(),
IGetCommodityStatusListCallback
{
/**
* 商品状态数据
*/
val
commodityStatusList
by
lazy
{
MutableLiveData
<
ArrayList
<
CommodityStatus
>>()
}
/**
* 请求商品状态列表
*/
fun
requestCommodityStatusList
()
{
CouponDataSource
.
getCommodityStatusList
(
this
)
}
override
fun
getCommodityStatusListSuccess
(
result
:
ArrayList
<
CommodityStatus
>?)
{
// 数据回传
commodityStatusList
.
value
=
result
}
override
fun
getCommodityStatusListFailure
(
message
:
String
?)
{
}
}
Components/commodity/src/main/res/drawable/layer_commodity_list_indicator.xml
0 → 100644
View file @
ae789e9f
<?xml version="1.0" encoding="utf-8"?>
<layer-list
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<!-- 若不设置 gravity,则 Indicator 宽度会填满整个 item -->
<item
android:gravity=
"center_horizontal"
>
<shape>
<corners
android:radius=
"@dimen/dp10"
/>
<size
android:width=
"@dimen/dp12"
android:height=
"@dimen/dp3"
/>
</shape>
</item>
</layer-list>
\ No newline at end of file
Components/commodity/src/main/res/layout/commodity_activity_commodity_management.xml
0 → 100644
View file @
ae789e9f
<?xml version="1.0" encoding="utf-8"?>
<layout
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"
>
<data>
<variable
name=
"vm"
type=
"com.yidian.shenghuoquan.commodity.ui.coupon.viewmodel.CommodityManagementViewModel"
/>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
<com.yidian.common.widget.CommonTopBarView
android:id=
"@+id/bv_top_bar"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
app:CommonTopBarView_title_text=
"@string/coupon_management"
app:layout_constraintTop_toTopOf=
"parent"
/>
<com.google.android.material.tabs.TabLayout
android:id=
"@+id/tl_commodity_list"
android:layout_width=
"match_parent"
android:layout_height=
"@dimen/dp46"
android:layout_marginStart=
"@dimen/dp20"
android:layout_marginEnd=
"@dimen/dp20"
app:layout_constraintTop_toBottomOf=
"@id/bv_top_bar"
app:tabBackground=
"@color/transparent"
app:tabIndicator=
"@drawable/layer_commodity_list_indicator"
app:tabIndicatorColor=
"@color/color_333333"
app:tabIndicatorFullWidth=
"false"
app:tabMode=
"scrollable"
app:tabRippleColor=
"@color/transparent"
app:tabSelectedTextColor=
"@color/color_333333"
app:tabTextAppearance=
"@style/Commodity.Manager.Indicator"
app:tabTextColor=
"@color/color_666666"
/>
<androidx.viewpager2.widget.ViewPager2
android:id=
"@+id/vp_commodity_list"
android:layout_width=
"match_parent"
android:layout_height=
"0dp"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@id/tl_commodity_list"
/>
<TextView
android:id=
"@+id/tv_commodity_publish"
android:layout_width=
"@dimen/dp160"
android:layout_height=
"@dimen/dp44"
android:layout_marginBottom=
"@dimen/dp34"
android:background=
"@drawable/shape_bg_common_btn"
android:gravity=
"center"
android:text=
"@string/publish_coupon"
android:textColor=
"@color/white"
android:textSize=
"@dimen/sp18"
android:textStyle=
"bold"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
\ No newline at end of file
Components/commodity/src/main/res/layout/commodity_fragment_commodity_list.xml
0 → 100644
View file @
ae789e9f
<?xml version="1.0" encoding="utf-8"?>
<layout
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"
>
<data>
<variable
name=
"vm"
type=
"com.yidian.shenghuoquan.commodity.ui.coupon.viewmodel.CommodityListViewModel"
/>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
<com.scwang.smart.refresh.layout.SmartRefreshLayout
android:id=
"@+id/rl_commodity_list"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
<androidx.recyclerview.widget.RecyclerView
android:id=
"@+id/rv_commodity_list"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:paddingStart=
"@dimen/dp16"
android:paddingTop=
"@dimen/dp8"
android:paddingEnd=
"@dimen/dp16"
android:paddingBottom=
"@dimen/dp8"
/>
</com.scwang.smart.refresh.layout.SmartRefreshLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
\ No newline at end of file
Components/commodity/src/main/res/layout/commodity_item_commodity_audit_list.xml
0 → 100644
View file @
ae789e9f
<?xml version="1.0" encoding="utf-8"?>
<layout
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"
>
<data>
<variable
name=
"vm"
type=
"com.yidian.shenghuoquan.commodity.ui.coupon.viewmodel.CommodityListItemViewModel"
/>
<variable
name=
"data"
type=
"com.yidian.shenghuoquan.commodity.dto.Goods"
/>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:background=
"@drawable/shape_bg_common_card"
android:minHeight=
"@dimen/dp112"
android:padding=
"@dimen/dp16"
>
<ImageView
android:id=
"@+id/iv_commodity_pic"
android:layout_width=
"@dimen/dp80"
android:layout_height=
"@dimen/dp80"
app:corner=
"@{12}"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
app:urlList=
"@{data.descPicUrlList}"
tools:src=
"@mipmap/news_icon"
/>
<TextView
android:id=
"@+id/tv_commodity_name"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"@dimen/dp12"
android:ellipsize=
"end"
android:maxLines=
"2"
android:text=
"@{data.goodsName}"
android:textColor=
"@color/color_333333"
android:textSize=
"@dimen/sp16"
android:textStyle=
"bold"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toEndOf=
"@id/iv_commodity_pic"
app:layout_constraintTop_toTopOf=
"parent"
tools:text=
"北蔡街 -0.99抢北蔡街 -0.99抢北蔡街 -0.99抢北蔡街 -0.99抢"
/>
<TextView
android:id=
"@+id/tv_commodity_count_sold"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"@{@string/commodity_count_sold(data.totalAmountSold)}"
android:textColor=
"@color/color_999999"
android:textSize=
"@dimen/sp12"
app:layout_constraintStart_toStartOf=
"@id/tv_commodity_name"
app:layout_constraintTop_toBottomOf=
"@id/tv_commodity_name"
tools:text=
"已售 100000"
/>
<TextView
android:id=
"@+id/tv_commodity_count_inventory"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"@dimen/dp12"
android:text=
"@{@string/commodity_count_inventory(data.inventoryRest)}"
android:textColor=
"@color/color_999999"
android:textSize=
"@dimen/sp12"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintHorizontal_bias=
"0"
app:layout_constraintStart_toEndOf=
"@id/tv_commodity_count_sold"
app:layout_constraintTop_toTopOf=
"@id/tv_commodity_count_sold"
tools:text=
"库存 100000000000000"
/>
<TextView
android:id=
"@+id/tv_commodity_price_symbol"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"¥"
android:textColor=
"@color/color_F26E3D"
android:textSize=
"@dimen/sp16"
app:layout_constraintBaseline_toBaselineOf=
"@id/tv_commodity_price"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintStart_toStartOf=
"@id/tv_commodity_name"
/>
<TextView
android:id=
"@+id/tv_commodity_price"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/dp4"
android:text=
"@{@string/commodity_price(data.price)}"
android:textColor=
"@color/color_F26E3D"
android:textSize=
"@dimen/sp24"
android:textStyle=
"bold"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintStart_toEndOf=
"@id/tv_commodity_price_symbol"
app:layout_constraintTop_toBottomOf=
"@id/tv_commodity_count_sold"
tools:text=
"10.00"
/>
<TextView
android:id=
"@+id/tv_commodity_original_price"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"@dimen/dp6"
android:text=
"@{@string/commodity_original_price((int) data.originalPrice)}"
android:textColor=
"@color/color_999999"
android:textSize=
"@dimen/sp12"
app:layout_constraintBaseline_toBaselineOf=
"@id/tv_commodity_price"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintStart_toEndOf=
"@id/tv_commodity_price"
tools:text=
"12.00"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
\ No newline at end of file
Components/commodity/src/main/res/layout/commodity_item_commodity_offline_list.xml
0 → 100644
View file @
ae789e9f
<?xml version="1.0" encoding="utf-8"?>
<layout
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"
>
<data>
<variable
name=
"vm"
type=
"com.yidian.shenghuoquan.commodity.ui.coupon.viewmodel.CommodityListItemViewModel"
/>
<variable
name=
"data"
type=
"com.yidian.shenghuoquan.commodity.dto.Goods"
/>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:background=
"@drawable/shape_bg_common_card"
android:minHeight=
"@dimen/dp112"
android:padding=
"@dimen/dp16"
>
<ImageView
android:id=
"@+id/iv_commodity_pic"
android:layout_width=
"@dimen/dp80"
android:layout_height=
"@dimen/dp80"
app:corner=
"@{12}"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
app:urlList=
"@{data.descPicUrlList}"
tools:src=
"@mipmap/news_icon"
/>
<TextView
android:id=
"@+id/tv_commodity_name"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"@dimen/dp12"
android:ellipsize=
"end"
android:maxLines=
"2"
android:text=
"@{data.goodsName}"
android:textColor=
"@color/color_333333"
android:textSize=
"@dimen/sp16"
android:textStyle=
"bold"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toEndOf=
"@id/iv_commodity_pic"
app:layout_constraintTop_toTopOf=
"parent"
tools:text=
"北蔡街 -0.99抢北蔡街 -0.99抢北蔡街 -0.99抢北蔡街 -0.99抢"
/>
<TextView
android:id=
"@+id/tv_commodity_count_sold"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"@{@string/commodity_count_sold(data.totalAmountSold)}"
android:textColor=
"@color/color_999999"
android:textSize=
"@dimen/sp12"
app:layout_constraintStart_toStartOf=
"@id/tv_commodity_name"
app:layout_constraintTop_toBottomOf=
"@id/tv_commodity_name"
tools:text=
"已售 100000"
/>
<TextView
android:id=
"@+id/tv_commodity_count_inventory"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"@dimen/dp12"
android:text=
"@{@string/commodity_count_inventory(data.inventoryRest)}"
android:textColor=
"@color/color_999999"
android:textSize=
"@dimen/sp12"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintHorizontal_bias=
"0"
app:layout_constraintStart_toEndOf=
"@id/tv_commodity_count_sold"
app:layout_constraintTop_toTopOf=
"@id/tv_commodity_count_sold"
tools:text=
"库存 100000000000000"
/>
<TextView
android:id=
"@+id/tv_commodity_price_symbol"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"¥"
android:textColor=
"@color/color_F26E3D"
android:textSize=
"@dimen/sp16"
app:layout_constraintBaseline_toBaselineOf=
"@id/tv_commodity_price"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintStart_toStartOf=
"@id/tv_commodity_name"
/>
<TextView
android:id=
"@+id/tv_commodity_price"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/dp4"
android:text=
"@{@string/commodity_price(data.price)}"
android:textColor=
"@color/color_F26E3D"
android:textSize=
"@dimen/sp24"
android:textStyle=
"bold"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintStart_toEndOf=
"@id/tv_commodity_price_symbol"
app:layout_constraintTop_toBottomOf=
"@id/tv_commodity_count_sold"
tools:text=
"10.00"
/>
<TextView
android:id=
"@+id/tv_commodity_original_price"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"@dimen/dp6"
android:text=
"@{@string/commodity_original_price((int) data.originalPrice)}"
android:textColor=
"@color/color_999999"
android:textSize=
"@dimen/sp12"
app:layout_constraintBaseline_toBaselineOf=
"@id/tv_commodity_price"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintStart_toEndOf=
"@id/tv_commodity_price"
tools:text=
"12.00"
/>
<TextView
android:id=
"@+id/tv_commodity_action"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginEnd=
"@dimen/dp25"
android:onClick=
"@{() -> vm.commodityOnline(data)}"
android:text=
"@string/up_shelves"
android:textColor=
"@color/color_333333"
android:textSize=
"@dimen/sp14"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toStartOf=
"@id/tv_commodity_edit"
tools:text=
"上架"
/>
<View
android:id=
"@+id/view_divider"
android:layout_width=
"@dimen/dp1"
android:layout_height=
"@dimen/dp9"
android:background=
"@color/color_F2F2F2"
app:layout_constraintBottom_toBottomOf=
"@id/tv_commodity_action"
app:layout_constraintEnd_toStartOf=
"@id/tv_commodity_edit"
app:layout_constraintStart_toEndOf=
"@id/tv_commodity_action"
app:layout_constraintTop_toTopOf=
"@id/tv_commodity_action"
/>
<TextView
android:id=
"@+id/tv_commodity_edit"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:onClick=
"@{() -> vm.commodityEdit(data)}"
android:text=
"@string/edit"
android:textColor=
"@color/color_1852F1"
android:textSize=
"@dimen/sp14"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
tools:text=
"编辑"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
\ No newline at end of file
Components/commodity/src/main/res/layout/commodity_item_commodity_online_list.xml
0 → 100644
View file @
ae789e9f
<?xml version="1.0" encoding="utf-8"?>
<layout
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"
>
<data>
<variable
name=
"vm"
type=
"com.yidian.shenghuoquan.commodity.ui.coupon.viewmodel.CommodityListItemViewModel"
/>
<variable
name=
"data"
type=
"com.yidian.shenghuoquan.commodity.dto.Goods"
/>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:background=
"@drawable/shape_bg_common_card"
android:minHeight=
"@dimen/dp112"
android:padding=
"@dimen/dp16"
>
<ImageView
android:id=
"@+id/iv_commodity_pic"
android:layout_width=
"@dimen/dp80"
android:layout_height=
"@dimen/dp80"
app:corner=
"@{12}"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
app:urlList=
"@{data.descPicUrlList}"
tools:src=
"@mipmap/news_icon"
/>
<TextView
android:id=
"@+id/tv_commodity_name"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"@dimen/dp12"
android:ellipsize=
"end"
android:maxLines=
"2"
android:text=
"@{data.goodsName}"
android:textColor=
"@color/color_333333"
android:textSize=
"@dimen/sp16"
android:textStyle=
"bold"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toEndOf=
"@id/iv_commodity_pic"
app:layout_constraintTop_toTopOf=
"parent"
tools:text=
"北蔡街 -0.99抢北蔡街 -0.99抢北蔡街 -0.99抢北蔡街 -0.99抢"
/>
<TextView
android:id=
"@+id/tv_commodity_count_sold"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"@{@string/commodity_count_sold(data.totalAmountSold)}"
android:textColor=
"@color/color_999999"
android:textSize=
"@dimen/sp12"
app:layout_constraintStart_toStartOf=
"@id/tv_commodity_name"
app:layout_constraintTop_toBottomOf=
"@id/tv_commodity_name"
tools:text=
"已售 100000"
/>
<TextView
android:id=
"@+id/tv_commodity_count_inventory"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"@dimen/dp12"
android:text=
"@{@string/commodity_count_inventory(data.inventoryRest)}"
android:textColor=
"@color/color_999999"
android:textSize=
"@dimen/sp12"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintHorizontal_bias=
"0"
app:layout_constraintStart_toEndOf=
"@id/tv_commodity_count_sold"
app:layout_constraintTop_toTopOf=
"@id/tv_commodity_count_sold"
tools:text=
"库存 100000000000000"
/>
<TextView
android:id=
"@+id/tv_commodity_price_symbol"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"¥"
android:textColor=
"@color/color_F26E3D"
android:textSize=
"@dimen/sp16"
app:layout_constraintBaseline_toBaselineOf=
"@id/tv_commodity_price"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintStart_toStartOf=
"@id/tv_commodity_name"
/>
<TextView
android:id=
"@+id/tv_commodity_price"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/dp4"
android:text=
"@{@string/commodity_price(data.price)}"
android:textColor=
"@color/color_F26E3D"
android:textSize=
"@dimen/sp24"
android:textStyle=
"bold"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintStart_toEndOf=
"@id/tv_commodity_price_symbol"
app:layout_constraintTop_toBottomOf=
"@id/tv_commodity_count_sold"
tools:text=
"10.00"
/>
<TextView
android:id=
"@+id/tv_commodity_original_price"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"@dimen/dp6"
android:text=
"@{@string/commodity_original_price((int) data.originalPrice)}"
android:textColor=
"@color/color_999999"
android:textSize=
"@dimen/sp12"
app:layout_constraintBaseline_toBaselineOf=
"@id/tv_commodity_price"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintStart_toEndOf=
"@id/tv_commodity_price"
tools:text=
"12.00"
/>
<TextView
android:id=
"@+id/tv_commodity_action"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginEnd=
"@dimen/dp25"
android:clickable=
"true"
android:focusable=
"true"
android:onClick=
"@{() -> vm.commodityOffline(data)}"
android:text=
"@string/down_shelves"
android:textColor=
"@color/color_333333"
android:textSize=
"@dimen/sp14"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toStartOf=
"@id/tv_commodity_edit"
tools:text=
"下架"
/>
<View
android:id=
"@+id/view_divider"
android:layout_width=
"@dimen/dp1"
android:layout_height=
"@dimen/dp9"
android:background=
"@color/color_F2F2F2"
app:layout_constraintBottom_toBottomOf=
"@id/tv_commodity_action"
app:layout_constraintEnd_toStartOf=
"@id/tv_commodity_edit"
app:layout_constraintStart_toEndOf=
"@id/tv_commodity_action"
app:layout_constraintTop_toTopOf=
"@id/tv_commodity_action"
/>
<TextView
android:id=
"@+id/tv_commodity_edit"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:onClick=
"@{() -> vm.commodityEdit(data)}"
android:text=
"@string/edit"
android:textColor=
"@color/color_1852F1"
android:textSize=
"@dimen/sp14"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
tools:text=
"编辑"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
\ No newline at end of file
Components/commodity/src/main/res/layout/commodity_item_commodity_reject_list.xml
0 → 100644
View file @
ae789e9f
<?xml version="1.0" encoding="utf-8"?>
<layout
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"
>
<data>
<variable
name=
"vm"
type=
"com.yidian.shenghuoquan.commodity.ui.coupon.viewmodel.CommodityListItemViewModel"
/>
<variable
name=
"data"
type=
"com.yidian.shenghuoquan.commodity.dto.Goods"
/>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:background=
"@drawable/shape_bg_common_card"
android:minHeight=
"@dimen/dp112"
android:padding=
"@dimen/dp16"
>
<ImageView
android:id=
"@+id/iv_commodity_pic"
android:layout_width=
"@dimen/dp80"
android:layout_height=
"@dimen/dp80"
app:corner=
"@{12}"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
app:urlList=
"@{data.descPicUrlList}"
tools:src=
"@mipmap/news_icon"
/>
<TextView
android:id=
"@+id/tv_commodity_name"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"@dimen/dp12"
android:ellipsize=
"end"
android:maxLines=
"2"
android:text=
"@{data.goodsName}"
android:textColor=
"@color/color_333333"
android:textSize=
"@dimen/sp16"
android:textStyle=
"bold"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toEndOf=
"@id/iv_commodity_pic"
app:layout_constraintTop_toTopOf=
"parent"
tools:text=
"北蔡街 -0.99抢北蔡街 -0.99抢北蔡街 -0.99抢北蔡街 -0.99抢"
/>
<TextView
android:id=
"@+id/tv_commodity_count_sold"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"@{@string/commodity_count_sold(data.totalAmountSold)}"
android:textColor=
"@color/color_999999"
android:textSize=
"@dimen/sp12"
app:layout_constraintStart_toStartOf=
"@id/tv_commodity_name"
app:layout_constraintTop_toBottomOf=
"@id/tv_commodity_name"
tools:text=
"已售 100000"
/>
<TextView
android:id=
"@+id/tv_commodity_count_inventory"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"@dimen/dp12"
android:text=
"@{@string/commodity_count_inventory(data.inventoryRest)}"
android:textColor=
"@color/color_999999"
android:textSize=
"@dimen/sp12"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintHorizontal_bias=
"0"
app:layout_constraintStart_toEndOf=
"@id/tv_commodity_count_sold"
app:layout_constraintTop_toTopOf=
"@id/tv_commodity_count_sold"
tools:text=
"库存 100000000000000"
/>
<TextView
android:id=
"@+id/tv_commodity_price_symbol"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"¥"
android:textColor=
"@color/color_F26E3D"
android:textSize=
"@dimen/sp16"
app:layout_constraintBaseline_toBaselineOf=
"@id/tv_commodity_price"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintStart_toStartOf=
"@id/tv_commodity_name"
/>
<TextView
android:id=
"@+id/tv_commodity_price"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/dp4"
android:text=
"@{@string/commodity_price(data.price)}"
android:textColor=
"@color/color_F26E3D"
android:textSize=
"@dimen/sp24"
android:textStyle=
"bold"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintStart_toEndOf=
"@id/tv_commodity_price_symbol"
app:layout_constraintTop_toBottomOf=
"@id/tv_commodity_count_sold"
tools:text=
"10.00"
/>
<TextView
android:id=
"@+id/tv_commodity_original_price"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"@dimen/dp6"
android:text=
"@{@string/commodity_original_price((int) data.originalPrice)}"
android:textColor=
"@color/color_999999"
android:textSize=
"@dimen/sp12"
app:layout_constraintBaseline_toBaselineOf=
"@id/tv_commodity_price"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintStart_toEndOf=
"@id/tv_commodity_price"
tools:text=
"12.00"
/>
<TextView
android:id=
"@+id/tv_commodity_edit"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:onClick=
"@{() -> vm.commodityEdit(data)}"
android:text=
"@string/edit"
android:textColor=
"@color/color_1852F1"
android:textSize=
"@dimen/sp14"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
tools:text=
"编辑"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
\ No newline at end of file
Components/commodity/src/main/res/values/strings.xml
View file @
ae789e9f
<?xml version="1.0" encoding="utf-8"?>
<resources
xmlns:tools=
"http://schemas.android.com/tools"
tools:ignore=
"MissingTranslation"
>
<string
name=
"coupon_management"
>
优惠券管理
</string>
<string
name=
"commodity_count_sold"
>
已售 %d
</string>
<string
name=
"commodity_count_inventory"
>
库存 %d
</string>
<string
name=
"commodity_original_price"
>
¥%d
</string>
<string
name=
"commodity_price"
>
%.2f
</string>
<string
name=
"down_shelves"
>
下架
</string>
<string
name=
"edit"
>
编辑
</string>
<string
name=
"up_shelves"
>
上架
</string>
<string
name=
"publish_coupon"
>
发布优惠券
</string>
</resources>
\ No newline at end of file
Components/commodity/src/main/res/values/styles.xml
0 → 100644
View file @
ae789e9f
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style
name=
"Commodity.Manager.Indicator"
parent=
"TextAppearance.Design.Tab"
>
<item
name=
"android:textSize"
>
@dimen/sp18
</item>
</style>
</resources>
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment