Commit 7c5430a7 authored by 王雪伟's avatar 王雪伟

[提交人]:王雪伟

[提交简述] :小象省钱
[实现方案] :加入盲盒
parent 772867a7
......@@ -91,17 +91,17 @@
android:authorities="${applicationId}.TTMultiProvider"
android:exported="false" />
<!-- <uses-library-->
<!-- android:name="org.apache.http.legacy"-->
<!-- android:required="false" />-->
<!-- <meta-data-->
<!-- android:name="design_width_in_dp"-->
<!-- android:value="420"/>-->
<!-- <meta-data-->
<!-- android:name="design_height_in_dp"-->
<!-- android:value="740"/>-->
<uses-library
android:name="org.apache.http.legacy"
android:required="false" />
<meta-data
android:name="design_width_in_dp"
android:value="420"/>
<meta-data
android:name="design_height_in_dp"
android:value="740"/>
</application>
</manifest>
\ No newline at end of file
......@@ -202,6 +202,7 @@ public class NetConfig {
public static String WEB_URL_BUYER_KNOW = "https://newspool.zhangxinhulian.com/sspapiNovel/su/custom/xingyunmohe/buyerKnow.html?version=" + Constant.Param.vn + "&appName=幸运魔盒&company=北京志信博文科技发展有限公司";
public static String WEB_URL_WEEK_RULE = "https://newspool.zhangxinhulian.com/sspapiNovel/su/custom/xingyunmohe/week_activity_rule.html";
public static String WEB_URL_INVITE;
public static String WEB_URL_H5_PAY = "https://newspool.zhangxinhulian.com/sspapiNovel/su/custom/xingyunmohe/pay_order.html";
}
......@@ -272,6 +273,7 @@ public class NetConfig {
public static final String XX_GOODS_GUESS_LIKE = "app/v1/game/xiaoxiang/guessLike";//猜你喜欢
public static final String XX_GOODS_CONVERT_LINK = "app/v1/game/xiaoxiang/convertLink";//转链
public static final String XX_GOODS_ITEM_DETAIL = "app/v1/game/xiaoxiang/itemDetail";//图文详情
public static final String XX_HOME_BANNER = "app/v1/game/xiaoxiang/banner";//Banner
}
......
......@@ -5,9 +5,7 @@ import com.zxhl.cms.common.NetConfig
import com.zxhl.cms.net.model.box.*
import com.zxhl.cms.net.model.other.IsWeChatLoginEntity
import com.zxhl.cms.net.model.other.WxBindEntity
import com.zxhl.cms.net.model.qy.JgqQyEntity
import com.zxhl.cms.net.model.qy.RightsDetailEntity
import com.zxhl.cms.net.model.qy.TbGoodsEntity
import com.zxhl.cms.net.model.qy.*
import com.zxhl.cms.net.model.uc.UserInfo
import com.zxhl.cms.net.model.uc.VersionEntity
import io.reactivex.Observable
......@@ -359,7 +357,7 @@ interface IHomeApi {
@GET(NetConfig.QY.XX_GOODS_CONVERT_LINK)
fun getGoodsConvertLink(
@Query("link") link: String
): Observable<Response<TbGoodsEntity>>
): Observable<Response<ConvertLinkEntity>>
//图文详情
@GET(NetConfig.QY.XX_GOODS_ITEM_DETAIL)
......@@ -367,4 +365,8 @@ interface IHomeApi {
@Query("productId") productId: String
): Observable<Response<TbGoodsEntity>>
//Banner
@GET(NetConfig.QY.XX_HOME_BANNER)
fun getHomeBanner(): Observable<Response<List<HomeBannerEntity>>>
}
\ No newline at end of file
package com.zxhl.cms.net.model.qy
import java.io.Serializable
/**
* @author (wangXuewei)
* @detail :
*/
class ConvertLinkEntity : Serializable {
var msg: String? = ""
var result: String? = ""
var data: TbLinkEntity? = null
var error: String? = ""
var request_id: String? = ""
class TbLinkEntity {
var category_id: String? = ""
var coupon_click_url: String? = ""
var coupon_end_time: String? = ""
var coupon_info: String? = ""
var coupon_remain_count: String? = ""
var coupon_start_time: String? = ""
var coupon_total_count: String? = ""
var max_commission_rate: String? = ""
var reward_info: String? = ""
var commission_rate: String? = ""
var istaote: String? = ""
var num_iid: String? = ""
var sclick_url: String? = ""
var coupon_start_fee: String? = ""
var coupon_amount: String? = ""
var tbk_pwd: String? = ""
var ios_tbk_pwd: String? = ""
var global_tbk_pwd: String? = ""
var coupon_short_url: String? = ""
}
}
\ No newline at end of file
package com.zxhl.cms.net.model.qy
import com.zxhl.cms.net.model.box.GoodList
import com.zxhl.cms.net.model.box.HomeBoxListEntity
class HomeBannerEntity {
var id: String? = ""
var boxId: String? = ""
var mainImage: String? = ""
var boxName: String? = ""
var description: String? = ""
var onePrice: Double? =0.0
var fivePrice: Double? =0.0
var totalSalesVolume: String? =""
var goodsList:List<GoodList>?=null
var headImages:List<String>?=null
var otherList:List<HomeBoxListEntity>?=null
var maxPriceStr: String? = ""
var minPriceStr: String? = ""
var onePriceStr: String? = ""
var text: String? = ""
var fiveShow: Int? = 1
var activitiesType: Int? = 0
var activitiesPrice: String? = ""
var activitiesRefreshImage: String? = ""
var activitiesRefreshName: String? = ""
var newUserPrice: String? = ""
var activitiesTimes: Int? = 0
var activitiesRefreshId: String = ""
var activitiesDiscount: String = ""
var originalPrice: String = ""
var discount: String = ""
var bannerType: String = ""
var url: String? = ""
}
\ No newline at end of file
......@@ -8,14 +8,14 @@ import java.io.Serializable
*/
class TbGoodsEntity : Serializable {
var msg: String? = ""
var is_similar: String? = ""
var is_similar: String? = "" //是否是相似搜索:0-否,1-是
var result_list: List<TbGoodsItemEntity>? = null//普通tab
var data: List<TbGoodsItemEntity>? = null//猜你喜欢
var is_splitWord: String? = ""
var error: String? = ""
var search_type: String? = ""
var search_type: String? = "" //搜索类型:0表示未启动搜索,10表示搜索淘口令或链接中的产品,21和22表示搜索非淘客商品找相似结果,30表示搜索关键字,60其它
var request_id: String? = ""
var force_index: String? = ""
var total_results: String? = ""
var total_results: String? = "" //返回的商品数量。
}
\ No newline at end of file
......@@ -7,42 +7,43 @@ import java.io.Serializable
* @detail :
*/
class TbGoodsItemEntity : Serializable {
var presale_end_time: String? = ""
var presale_end_time: String? = ""//预售商品-付定金结束时间(毫秒)
var category_name: String? = ""
var zk_final_price: String? = ""
var coupon_remain_count: String? = ""
var coupon_remain_count: String? = ""//优惠券余量,如无此字段则表示没有优惠券
var num_iid: String? = ""
var shop_dsr: String? = ""
var title: String? = ""
var presale_tail_start_time: String? = ""
var presale_tail_start_time: String? = ""//预售商品-付尾款开始时间(毫秒)
var nick: String? = ""
var level_one_category_id: String? = ""
var presale_tail_end_time: String? = ""
var presale_deposit: String? = ""
var level_one_category_id: String? = ""//商品信息-一级类目ID
var presale_tail_end_time: String? = ""//预售商品-付定金结束时间(毫秒)
var presale_deposit: String? = "" //预售商品-定金(元),通常是双11时才有。
var short_title: String? = ""
var user_type: String? = ""
var user_type: String? = ""//店铺信息-卖家类型。0表示集市,1表示天猫
var category_id: String? = ""
var coupon_id: String? = ""
var coupon_id: String? = ""//优惠券ID,只有有券时才有此参数。
var shop_title: String? = ""
var small_images: List<String>? = null
var seller_id: String? = ""
var coupon_amount: String? = ""
var superior_brand: String? = ""
var superior_brand: String? = ""//是否品牌精选,0不是,1是
var item_id: String? = ""
var level_one_category_name: String? = ""
var presale_start_time: String? = ""
var coupon_total_count: String? = ""
var pict_url: String? = ""
var level_one_category_name: String? = ""//商品信息-一级类目名称
var presale_start_time: String? = ""//预售商品-付定金开始时间(毫秒)
var coupon_total_count: String? = ""////优惠券总量,如无此字段则表示没有优惠券
var cpa_reward_type: String? = "" //额外奖励活动类型,如果一个商品有多个奖励类型,返回结果使用空格分割,0=单单奖励,1=超级单单奖励
var pict_url: String? = ""//主图
var white_image: String? = ""
var coupon_info: String? = ""
var volume: String? = ""
var coupon_info: String? = ""////优惠券信息,比如“满200元减10元”。
var volume: String? = ""//商品信息-30天销量(饿了么卡券信息-总销量)
var coupon_start_fee: String? = ""
var real_post_fee: String? = ""
var provcity: String? = ""
var tk_total_sales: String? = ""
var item_url: String? = ""
var commission_rate: String? = ""
var tk_total_commi: String? = ""
var commission_rate: String? = ""////佣金率,需要除以100得到百分比例值,比如5000表示50%。这里200表示2%
var tk_total_commi: String? = ""//商品信息-月支出佣金(该字段废弃,请勿再用)
var item_description: String? = ""
var reserve_price: String? = ""
var coupon_start_time: String? = ""
......
......@@ -14,10 +14,12 @@ class PayContract {
fun updatePriceList(data: List<MemberEntity.ProductDetail>)
fun verifyOrderFail(errorMsg:String)
fun verifyOrderFail(errorMsg: String)
fun requestOrderSuc()
fun requestH5OrderSuc(form: String)
fun verifyOrderSuc(orsder: String)
......@@ -27,9 +29,9 @@ class PayContract {
}
interface Presenter {
fun requestMiniProgrom(goodsId: String,payType: String,payMode:String)
fun requestWechatPayOrder(goodsId: String,payType: String)
fun requestAliPay(activity: Activity, goodsId: String, payType: String,payMode:String)
fun requestMiniProgrom(goodsId: String, payType: String, payMode: String)
fun requestWechatPayOrder(goodsId: String, payType: String)
fun requestAliPay(activity: Activity, goodsId: String, payType: String, payMode: String)
fun verifyPay(order: String?, payType: Int)
......@@ -37,9 +39,28 @@ class PayContract {
fun getPriceList()
fun getVersifacation()
fun appInfo()
//商城购买
fun shoprequestWechatPayOrder(goodsId: String,payType: String,payMode: String,addressId:String,discount:String,goodIds:String,orderNotes:String)
fun shoprequestAliPay(activity: Activity,goodsId: String,payType: String,payMode: String,addressId:String,discount:String,goodIds:String,orderNotes:String)
fun shoprequestWechatPayOrder(
goodsId: String,
payType: String,
payMode: String,
addressId: String,
discount: String,
goodIds: String,
orderNotes: String
)
fun shoprequestAliPay(
activity: Activity,
goodsId: String,
payType: String,
payMode: String,
addressId: String,
discount: String,
goodIds: String,
orderNotes: String
)
}
}
\ No newline at end of file
......@@ -2,10 +2,12 @@ package com.zxhl.cms.pay
import android.app.Activity
import android.app.Dialog
import android.net.http.SslError
import android.os.Handler
import android.util.Log
import android.view.Gravity
import android.view.View
import android.webkit.*
import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.RelativeLayout
......@@ -26,7 +28,6 @@ import com.zxhl.cms.widget.LoadingDialog
import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.functions.Consumer
import kotlinx.android.synthetic.main.activity_member.*
/**
* @author (wangXuewei)
......@@ -40,6 +41,7 @@ object PayDialog : PayContract.View {
private var mPresenter: PayContract.Presenter? = null
private var pay_type: Int? = 0
private var id_pay_web_view: WebView? = null;
private var id_rl_zfb_pay: RelativeLayout? = null;
private var id_img_ali: ImageView? = null;
private var id_img_min_choose: ImageView? = null;
......@@ -97,6 +99,7 @@ object PayDialog : PayContract.View {
val tv_goods_pay_btn_price = mDialogView.findViewById<TextView>(R.id.id_activity_member_btn)
val id_rcl_payment_list = mDialogView.findViewById<RecyclerView>(R.id.id_rcl_payment_list)
id_pay_web_view = mDialogView.findViewById<WebView>(R.id.id_pay_web_view)
id_rl_zfb_pay = mDialogView.findViewById<RelativeLayout>(R.id.id_rl_zfb_pay)
id_img_ali = mDialogView.findViewById<ImageView>(R.id.id_img_ali)
id_img_min_choose = mDialogView.findViewById<ImageView>(R.id.id_img_min_choose)
......@@ -104,17 +107,6 @@ object PayDialog : PayContract.View {
id_rl_min_pay = mDialogView.findViewById<RelativeLayout>(R.id.id_rl_min_pay)
id_tv_zfb_2 = mDialogView.findViewById<TextView>(R.id.id_tv_zfb_2)
mDialogView.findViewById<RelativeLayout>(R.id.id_rl_min_pay)?.setOnClickListener {
pay_type = PayActivity.MIN_PAY_PROGRAM
id_img_min_choose?.setImageResource(R.drawable.icon_xuanzhong)
id_img_ali?.setImageResource(R.drawable.icon_xuanzhong_default)
}
mDialogView.findViewById<RelativeLayout>(R.id.id_rl_zfb_pay)?.setOnClickListener {
pay_type = PayActivity.ALI_PAY
id_img_min_choose?.setImageResource(R.drawable.icon_xuanzhong_default)
id_img_ali?.setImageResource(R.drawable.icon_xuanzhong)
}
if (!context.isFinishing) {
Glide.with(context).load(goodsImg).into(tv_goodsMainImg)
......@@ -138,7 +130,7 @@ object PayDialog : PayContract.View {
pay_type.toString(),
"6"
)
} else if (pay_type == 13) {
} else if (pay_type == 13 || pay_type == 21) {
mPresenter?.requestMiniProgrom(
payPrice,
pay_type.toString(),
......@@ -236,6 +228,15 @@ object PayDialog : PayContract.View {
mLoading?.setLoading("正在支付")
}
override fun requestH5OrderSuc(form: String) {
if (form.isEmpty()) {
EventUtils.onEvent("h5_pay_error")
showResultLoading(false)
} else {
loadH5Pay(form)
}
}
override fun verifyOrderSuc(orsder: String) {
UserDataUtils.updateUserInfo { _, _ ->
showResultLoading(true)
......@@ -254,31 +255,13 @@ object PayDialog : PayContract.View {
if (result != null && !result.pay_config_v2.isNullOrEmpty()) {
mPayFunAdapter?.clear()
mPayFunAdapter?.appendToList(result.pay_config_v2)
if (result?.pay_config_v2!![0].open == 1) {
pay_type = result?.pay_config_v2!![0].type
mPayFunAdapter?.setPosition(0)
for (i in result.pay_config_v2!!.indices) {
if (result?.pay_config_v2!![i].open == 1) {
pay_type = result?.pay_config_v2!![i].type
mPayFunAdapter?.setPosition(i)
break
}
}
// if (result.pay_config?.ali != null) {
// if (result.pay_config?.ali?.open == 1) {
// pay_type = PayActivity.ALI_PAY
// id_rl_zfb_pay?.visibility = View.VISIBLE
// id_img_ali?.setImageResource(R.drawable.icon_xuanzhong)
// id_tv_zfb_1?.text = result.pay_config?.ali?.title
// } else {
// id_rl_zfb_pay?.visibility = View.GONE
// }
// }
// if (result.pay_config?.ali_ming != null) {
// if (result.pay_config?.ali_ming?.open == 1) {
// id_rl_min_pay?.visibility = View.VISIBLE
// id_tv_zfb_2?.text = result.pay_config?.ali_ming?.title
// } else {
// id_rl_min_pay?.visibility = View.GONE
// }
// }
}
}
......@@ -287,11 +270,11 @@ object PayDialog : PayContract.View {
mLoading?.setResult(false, "取消支付", 1000)
} else {
if (mDialog?.isShowing == true) {
if (pay_type == PayActivity.MIN_PAY_PROGRAM) {
if (pay_type == PayActivity.MIN_PAY_PROGRAM || pay_type == PayActivity.H5_PAY) {
//如果是敏支付
mPresenter?.verifyPay(
SettingPreference.getOutTradeNo(),
PayActivity.MIN_PAY_PROGRAM
pay_type!!
)
} else {
mLoading?.setResult(false, "取消支付", 1000)
......@@ -302,4 +285,87 @@ object PayDialog : PayContract.View {
}
}
private fun loadH5Pay(form: String) {
// id_pay_web_view?.visibility = View.VISIBLE
Log.d("wxw", "startTime" + System.currentTimeMillis())
val webSettings = id_pay_web_view?.settings
//如果访问的页面中要与Javascript交互,则webview必须设置支持Javascript
webSettings?.javaScriptEnabled = true
//设置自适应屏幕,两者合用
webSettings?.useWideViewPort = true //将图片调整到适合webview的大小
webSettings?.loadWithOverviewMode = true // 缩放至屏幕的大小
//其他细节操作
webSettings?.cacheMode = WebSettings.LOAD_NO_CACHE //关闭webview中缓存
webSettings?.allowFileAccess = true //设置可以访问文件
webSettings?.javaScriptCanOpenWindowsAutomatically = true //支持通过JS打开新窗口
webSettings?.loadsImagesAutomatically = true //支持自动加载图片
webSettings?.defaultTextEncodingName = "utf-8" //设置编码格式
webSettings?.domStorageEnabled = true
webSettings?.allowFileAccessFromFileURLs = true;
webSettings?.allowUniversalAccessFromFileURLs = true;
id_pay_web_view?.webViewClient = object : WebViewClient() {
override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
Log.e("WXW", "dURL" + url.toString())
if (url == null) return false
try {
if (url.startsWith("alipays://") //支付宝
) {
// val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
// startActivity(intent)
return true
}
} catch (e: Exception) { //防止crash (如果手机上没有安装处理某个scheme开头的url的APP, 会导致crash)
EventUtils.onEvent("h5_open_zfb_error", e.toString())
showResultLoading(false)
return true //没有安装该app时,返回true,表示拦截自定义链接,但不跳转,避免弹出上面的错误页面
}
//处理http和https开头的url
view?.loadUrl(url)
return false
}
override fun onPageFinished(view: WebView?, url: String?) {
Log.e("WXW", "cURL" + url.toString())
Log.d("wxw", "EndTime" + System.currentTimeMillis())
super.onPageFinished(view, url)
if (url?.contains(NetConfig.H5.WEB_URL_H5_PAY) == true) {
id_pay_web_view?.loadUrl("javascript:loadPayHtml('$form')");
}
}
override fun onReceivedSslError(
view: WebView?,
handler: SslErrorHandler?,
error: SslError?
) {
super.onReceivedSslError(view, handler, error)
EventUtils.onEvent("h5_pay_error0", error.toString())
showResultLoading(false)
}
override fun onReceivedError(
view: WebView?,
request: WebResourceRequest?,
error: WebResourceError?
) {
super.onReceivedError(view, request, error)
EventUtils.onEvent("h5_pay_error1", error.toString())
showResultLoading(false)
}
override fun onReceivedHttpError(
view: WebView?,
request: WebResourceRequest?,
errorResponse: WebResourceResponse?
) {
super.onReceivedHttpError(view, request, errorResponse)
EventUtils.onEvent("h5_pay_error2", errorResponse.toString())
showResultLoading(false)
}
}
id_pay_web_view?.loadUrl(NetConfig.H5.WEB_URL_H5_PAY)
}
}
\ No newline at end of file
......@@ -136,7 +136,15 @@ class PayPresenter : PayContract.Presenter {
override fun onSuccess(result: AliPayEntity?) {
if (result != null) {
mView?.setOrderNo(result?.outTradeNo)
AlipayServer.payV2(activity, result.wakeup!!)
if (payType == "13") {
SettingPreference.setOutTradeNo(result?.outTradeNo)
JumpUtils.h5Jump("https://api.minpayment.com/pay.do?sendMsg=" + result.wakeup)
} else if (payType == "21") {
SettingPreference.setOutTradeNo(result?.outTradeNo)
mView.requestH5OrderSuc(result.outTradeNo ?: "")
}else{
AlipayServer.payV2(activity, result.wakeup!!)
}
mView?.requestOrderSuc()
} else {
EventUtils.onEvent("member_page_pay_get_order_fail")
......@@ -160,8 +168,11 @@ class PayPresenter : PayContract.Presenter {
EventUtils.onEvent("member_page_pay_get_order_suc")
mView?.setOrderNo(result?.outTradeNo)
SettingPreference.setOutTradeNo(result?.outTradeNo)
Log.e("MXL","PayURL:"+"https://api.minpayment.com/pay.do?sendMsg="+result.wakeup)
JumpUtils.h5Jump("https://api.minpayment.com/pay.do?sendMsg="+result.wakeup)
if (payType == "13") {
JumpUtils.h5Jump("https://api.minpayment.com/pay.do?sendMsg=" + result.wakeup)
} else if (payType == "21") {
mView.requestH5OrderSuc(result.outTradeNo ?: "")
}
//WeChatPay.startWeChatProgromPay(result, payType)
mView?.requestOrderSuc()
} else {
......@@ -250,9 +261,15 @@ class PayPresenter : PayContract.Presenter {
if (!TextUtils.isEmpty(order)) {
requestVerify(order ?: "", "", payType)
}
}else if(payType==13){
} else if (payType == 13) {
if (!TextUtils.isEmpty(order)) {
requestVerify(order ?: "", "", payType)
}
} else if (payType == 21) {
if (!TextUtils.isEmpty(order)) {
requestVerify(order ?: "", "", payType)
} else {
mView?.verifyOrderFail("支付成功后 订单id为null")
}
}
} catch (e: Exception) {
......@@ -272,7 +289,7 @@ class PayPresenter : PayContract.Presenter {
EventUtils.onEvent("member_page_pay_suc", result.toString())
} else {
EventUtils.onEvent("member_page_pay_query_order_fail", result.toString())
mView?.verifyOrderFail("订单校验请求成功 校验异常${result?.status?:-1}")
mView?.verifyOrderFail("订单校验请求成功 校验异常${result?.status ?: -1}")
}
}
......
......@@ -71,7 +71,7 @@ class PaymentFunAdapter :
holder.mItemView.visibility = View.GONE
}
holder.mItemView.setOnClickListener {
mListener.onItemClick(it, position, data)
mListener.onItemClick(it, pos, data)
}
}
......
......@@ -345,5 +345,10 @@
android:layout_marginLeft="15dp"
android:layout_marginTop="6dp" />
<WebView
android:id="@+id/id_pay_web_view"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</RelativeLayout>
\ No newline at end of file
......@@ -256,5 +256,9 @@
android:layout_alignParentRight="true"
android:padding="10dp"
android:src="@drawable/icon_guanbi" />
<WebView
android:id="@+id/id_pay_web_view"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
\ No newline at end of file
......@@ -117,6 +117,18 @@
</intent-filter>
</activity>
<activity android:name=".box.activity.NewBoxGoodsDetailActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data
android:host="goodsdetail"
android:scheme="xxsq" />
</intent-filter>
</activity>
</application>
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
package com.zxbw.modulemain.activity
import android.content.Intent
import android.net.Uri
import android.net.http.SslError
import android.util.Log
import android.view.View
import android.webkit.*
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.viewpager.widget.ViewPager
import androidx.viewpager2.widget.ViewPager2
......@@ -11,11 +15,16 @@ import com.zxbw.modulemain.adapter.GoodsListAdapter
import com.zxbw.modulemain.contract.TbGoodsDetailContract
import com.zxbw.modulemain.presenter.TbGoodsDetailPresenter
import com.zxhl.cms.AppContext
import com.zxhl.cms.common.NetConfig
import com.zxhl.cms.common.base.BaseActivity
import com.zxhl.cms.net.model.qy.ConvertLinkEntity
import com.zxhl.cms.net.model.qy.TbGoodsItemEntity
import com.zxhl.cms.net.model.shop.ShopListEntity
import com.zxhl.cms.utils.EventUtils
import com.zxhl.cms.utils.JumpUtils
import com.zxhl.cms.utils.OnRecycleItemClickListener
import com.zxhl.cms.utils.Utils
import com.zxhl.cms.widget.LoadingDialog
import kotlinx.android.synthetic.main.activity_layout_tb_goods_detail.*
import me.jessyan.autosize.utils.ScreenUtils
......@@ -25,7 +34,7 @@ import me.jessyan.autosize.utils.ScreenUtils
* @detail : 淘宝商品详情
*/
class TbGoodsDetailActivity : BaseActivity(), TbGoodsDetailContract.View {
private var mLoading: LoadingDialog? = null
private var mGoodsAdapter: GoodsListAdapter? = null;
private var mPresenter: TbGoodsDetailPresenter? = null;
private var goodsDetail: TbGoodsItemEntity? = null
......@@ -57,6 +66,7 @@ class TbGoodsDetailActivity : BaseActivity(), TbGoodsDetailContract.View {
id_rcl_recommend_goods_list.adapter = mGoodsAdapter
id_img_close_btn?.setOnClickListener(this)
id_ll_tb_buy_view?.setOnClickListener(this)
initView()
......@@ -73,12 +83,36 @@ class TbGoodsDetailActivity : BaseActivity(), TbGoodsDetailContract.View {
}
private fun initView() {
mLoading = LoadingDialog.getLoadingDialog(
this,
getString(com.zxhl.cms.R.string.wait_ing),
true,
true
)
if (goodsDetail == null) {
return
}
id_tv_goods_name?.text = goodsDetail?.title
id_tv_tm_price?.text = goodsDetail?.reserve_price
id_tv_tm_buy_price?.text = goodsDetail?.reserve_price
id_tv_sale_num?.text = goodsDetail?.volume ?: "0"
if (goodsDetail?.coupon_amount.isNullOrEmpty()) {
id_tv_xx_price?.text = "${goodsDetail?.reserve_price}"
id_tv_vip_buy_price?.text = "${goodsDetail?.reserve_price}"
} else {
var r_price = goodsDetail?.reserve_price?.toDoubleOrNull() ?: 0 as Double
var c_price = goodsDetail?.coupon_amount?.toDoubleOrNull() ?: 0 as Double
var vipPrice = Utils.getNoMoreThanTwoDigits(
Utils.sub(
r_price,
c_price
)
)
id_tv_xx_price?.text = vipPrice
id_tv_vip_buy_price?.text = vipPrice
}
if (!goodsDetail?.small_images.isNullOrEmpty()) {
var mPagerAdapter = DetailBannerAdapter(goodsDetail?.small_images!!)
id_detail_top_banner.adapter = mPagerAdapter
......@@ -89,7 +123,6 @@ class TbGoodsDetailActivity : BaseActivity(), TbGoodsDetailContract.View {
positionOffset: Float,
positionOffsetPixels: Int
) {
}
override fun onPageSelected(position: Int) {
......@@ -109,15 +142,112 @@ class TbGoodsDetailActivity : BaseActivity(), TbGoodsDetailContract.View {
id_img_close_btn -> {
finish()
}
id_ll_tb_buy_view -> {
if (tbLink == "") {
showToast("未获取到信息,请重试")
} else {
mLoading?.setLoading("请稍后")
mLoading?.show()
jumpTbWeb(tbLink, object : JumpTbCallBack {
override fun jumpSuccess() {
mLoading?.setResult(true, "成功", 1000)
}
override fun jumpError(error: String) {
Log.d("wxw", "error:$error")
mLoading?.setResult(false, "购买失败,请重试", 1000)
EventUtils.onEvent("JumpTbError", error)
}
})
}
}
}
}
override fun setConvertLink() {
private var tbLink = "";
override fun setConvertLink(result: ConvertLinkEntity?) {
tbLink = result?.data?.coupon_short_url ?: ""
}
override fun setGoodsDetail() {
}
private interface JumpTbCallBack {
fun jumpSuccess();
fun jumpError(error: String);
}
private fun jumpTbWeb(sortUrl: String, callBack: JumpTbCallBack) {
// id_tb_web_view.visibility = View.VISIBLE
val webSettings = id_tb_web_view.settings
webSettings.javaScriptEnabled = true
//其他细节操作
webSettings.cacheMode = WebSettings.LOAD_NO_CACHE //关闭webview中缓存
webSettings.allowFileAccess = true //设置可以访问文件
webSettings.javaScriptCanOpenWindowsAutomatically = true //支持通过JS打开新窗口
webSettings.loadsImagesAutomatically = true //支持自动加载图片
webSettings.defaultTextEncodingName = "utf-8" //设置编码格式
webSettings.domStorageEnabled = true
webSettings.allowFileAccessFromFileURLs = true;
webSettings.allowUniversalAccessFromFileURLs = true;
id_tb_web_view?.webViewClient = object : WebViewClient() {
override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
Log.e("WXW", "dURL" + url.toString())
if (url == null) return false
try {
if (url.startsWith("dianping://") //大众点评
|| url.startsWith("tbopen://") //淘宝
|| url.startsWith("openapp.jdmobile://") //京东
|| url.startsWith("tmast://") //淘宝
|| url.startsWith("pinduoduo://") //拼多多
//其他自定义的scheme
) {
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
startActivity(intent)
callBack.jumpSuccess()
return true
}
} catch (e: Exception) { //防止crash (如果手机上没有安装处理某个scheme开头的url的APP, 会导致crash)
callBack.jumpError("跳转淘宝失败:${e.message}")
return true //没有安装该app时,返回true,表示拦截自定义链接,但不跳转,避免弹出上面的错误页面
}
return false
}
override fun onReceivedSslError(
view: WebView?,
handler: SslErrorHandler?,
error: SslError?
) {
super.onReceivedSslError(view, handler, error)
callBack.jumpError("onReceivedSslError:" + error.toString())
}
override fun onReceivedError(
view: WebView?,
request: WebResourceRequest?,
error: WebResourceError?
) {
super.onReceivedError(view, request, error)
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
callBack.jumpError("onReceivedError:" + error?.description)
} else {
callBack.jumpError("onReceivedError:null")
}
}
override fun onReceivedHttpError(
view: WebView?,
request: WebResourceRequest?,
errorResponse: WebResourceResponse?
) {
super.onReceivedHttpError(view, request, errorResponse)
callBack.jumpError("onReceivedHttpError:" + errorResponse.toString())
}
}
id_tb_web_view.loadUrl(sortUrl)
}
}
\ No newline at end of file
......@@ -35,7 +35,11 @@ class DetailBannerAdapter : PagerAdapter {
val data = mViewList[position]
val view = LayoutInflater.from(AppContext.get()).inflate(R.layout.item_layout_detail_banner, null)
val bg = view.findViewById<ImageView>(R.id.id_img_detail_banner_bg)
Glide.with(AppContext.get()).load(data).into(bg)
if(data.startsWith("//img")){
Glide.with(AppContext.get()).load("https:"+data).into(bg)
}else{
Glide.with(AppContext.get()).load(data).into(bg)
}
container.addView(view)// 添加页卡
return view
}
......
......@@ -8,6 +8,8 @@ import android.widget.ImageView
import androidx.viewpager.widget.PagerAdapter
import com.bumptech.glide.Glide
import com.zxbw.modulemain.R
import com.zxhl.cms.net.model.qy.HomeBannerEntity
import com.zxhl.cms.utils.JumpUtils
import com.zxhl.cms.utils.Utils
import java.util.ArrayList
......@@ -15,10 +17,10 @@ class HomeBannerAdapter : PagerAdapter {
private var mActivity: Activity? = null
private var mViewList: List<String> = ArrayList()
private var mViewList: List<HomeBannerEntity> = ArrayList()
constructor(
mList: List<String>,
mList: List<HomeBannerEntity>,
context: Activity,
) : super() {
mViewList = mList //构造方法,参数是我们的页卡,这样比较方便。
......@@ -35,11 +37,21 @@ class HomeBannerAdapter : PagerAdapter {
val data = mViewList[position]
val view = LayoutInflater.from(mActivity).inflate(R.layout.item_layout_home_banner, null)
val bg = view.findViewById<ImageView>(R.id.id_img_banner_bg)
if (mActivity?.isFinishing==false){
Glide.with(mActivity!!).load(data).placeholder(R.drawable.img_banner_ms_bg).into(bg)
if (data.bannerType.equals("blindBox")) {
bg.setImageResource(R.drawable.img_banner_mh_bg)
} else if (data.bannerType.equals("H5")) {
bg.setImageResource(R.drawable.img_banner_wm_bg)
} else {
bg.setImageResource(R.drawable.img_banner_ms_bg)
}
bg.setOnClickListener {
Utils.showToast(mActivity,"postion$position")
if (data.bannerType.equals("blindBox")) {
JumpUtils.goodsDetailJump(data.boxId)
} else if (data.bannerType.equals("H5")) {
JumpUtils.webJump("", data.url)
} else {
}
}
container.addView(view)// 添加页卡
return view
......
......@@ -77,18 +77,36 @@ class HomeRecommendAdapter : BaseRecyclerAdapter<TbGoodsItemEntity, RecyclerView
val bean = mList[position - viewNum]
holder.id_tv_goods_name?.text = bean.title
if (mContext?.isFinishing == false) {
holder.id_item_goods_img?.setLoadImageUrl(bean.pict_url, 0, 5)
if(bean.pict_url?.startsWith("//img") == true){
holder.id_item_goods_img?.setLoadImageUrl("https:"+bean.pict_url, 0, 5)
}else{
holder.id_item_goods_img?.setLoadImageUrl(bean.pict_url, 0, 5)
}
}
holder.id_tv_tb_price_value?.text = "淘宝商城价 : ¥${bean.reserve_price}"
holder.id_tv_yhq_value?.text = "${bean.coupon_start_fee}元券"
var r_price = bean.reserve_price?.toDoubleOrNull() ?: 0 as Double
var c_price = bean.coupon_start_fee?.toDoubleOrNull() ?: 0 as Double
holder.id_tv_goods_price?.text = Utils.getNoMoreThanTwoDigits(
Utils.sub(
r_price,
c_price
if (bean.coupon_amount.isNullOrEmpty()){
holder.id_tv_yhq_value?.visibility =View.GONE
holder.id_tv_goods_price?.text ="${bean.reserve_price}"
}else{
holder.id_tv_yhq_value?.visibility =View.VISIBLE
holder.id_tv_yhq_value?.text = "${bean.coupon_amount}元券"
var r_price = bean.reserve_price?.toDoubleOrNull() ?: 0 as Double
var c_price = bean.coupon_amount?.toDoubleOrNull() ?: 0 as Double
holder.id_tv_goods_price?.text = Utils.getNoMoreThanTwoDigits(
Utils.sub(
r_price,
c_price
)
)
)
}
if (bean.coupon_info.isNullOrEmpty()){
holder.id_tv_manjian_value?.visibility =View.GONE
}else{
holder.id_tv_manjian_value?.visibility =View.VISIBLE
holder.id_tv_manjian_value?.text = "${bean.coupon_info}"
}
holder.id_rl_goods_item_view?.setOnClickListener {
listener.onItemClick(it, position, bean)
......
package com.zxbw.modulemain.box.adapter
import android.content.Context
import android.text.TextUtils
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.LinearLayout
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.zxbw.modulemain.R
import com.zxhl.cms.AppContext
import com.zxhl.cms.common.base.BaseRecyclerAdapter
import com.zxhl.cms.net.model.box.LotteryEntity
import com.zxhl.cms.widget.RecycleImageView
class BoxResultAdapter : BaseRecyclerAdapter<LotteryEntity, BoxResultAdapter.ViewHolder> {
private var mContext: Context? = null
constructor(
content: Context?,
) : super() {
mContext = content
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
var bean = mList[position]
holder.id_box_result_goods_name?.text = bean.productName
holder.id_tv_box_result_goods_pinzhi?.text = bean.cateName
if (TextUtils.equals(bean.goodsLevel, "0")) {
holder.id_tv_box_result_goods_pinzhi?.setBackgroundResource(R.drawable.shape_putong_bg_left_r10)
} else if (TextUtils.equals(bean.goodsLevel, "1")) {
holder.id_tv_box_result_goods_pinzhi?.setBackgroundResource(R.drawable.shape_xiyou_bg_left_r10)
} else if (TextUtils.equals(bean.goodsLevel, "2")) {
holder.id_tv_box_result_goods_pinzhi?.setBackgroundResource(R.drawable.shape_shishi_bg_left_r10)
} else if (TextUtils.equals(bean.goodsLevel, "3")) {
holder.id_tv_box_result_goods_pinzhi?.setBackgroundResource(R.drawable.shape_chuanshuo_bg_left_r10)
}
holder.id_box_result_goods_img?.setLoadImageUrl(bean.mainImage, false)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return ViewHolder(
LayoutInflater.from(AppContext.get())
.inflate(R.layout.item_layout_box_result, parent, false)
)
}
class ViewHolder : RecyclerView.ViewHolder {
var id_ll_box_result: LinearLayout?
var id_box_result_goods_img: RecycleImageView?
var id_tv_box_result_goods_pinzhi: TextView?
var id_box_result_goods_name: TextView?
var id_box_result_goods_price: TextView?
constructor(
itemView: View
) : super(itemView) {
id_ll_box_result = itemView.findViewById<LinearLayout>(R.id.id_ll_box_result)
id_box_result_goods_img =
itemView.findViewById<RecycleImageView>(R.id.id_box_result_goods_img)
id_tv_box_result_goods_pinzhi =
itemView.findViewById<TextView>(R.id.id_tv_box_result_goods_pinzhi)
id_box_result_goods_name =
itemView.findViewById<TextView>(R.id.id_box_result_goods_name)
id_box_result_goods_price =
itemView.findViewById<TextView>(R.id.id_box_result_goods_price)
}
}
}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment