|
@@ -13,6 +13,7 @@ import { getReadLog, setReadLog } from '@src/utils/loginSto';
|
|
|
import GlobalModal from '@src/components/bottomModal';
|
|
|
import IosShowPay from '@src/components/pay/IosShowPay';
|
|
|
import { Store } from '@src/app';
|
|
|
+import { cashBuy, virtualBuy } from '@src/server/wx/pay';
|
|
|
|
|
|
interface Config {
|
|
|
size: 'pre_15' | 'pre_17' | 'pre_19' | 'pre_21' | 'pre_23' | 'pre_25' | 'pre_27' | 'pre_29' | any;
|
|
@@ -160,13 +161,14 @@ const BookArticle: React.FC<BookArticleProps> = ({ store }) => {
|
|
|
});
|
|
|
}, [bookConfig.off_on]);
|
|
|
// 下拉加载
|
|
|
- const onLoad = async () => {
|
|
|
+ const onLoad = async (reload?: boolean) => {
|
|
|
+ console.log("下拉加载")
|
|
|
if (openBookData?.contentData) {
|
|
|
let { size, current, total, records } = openBookData.contentData
|
|
|
- if (records.length < total) {
|
|
|
+ if (records.length < total || reload) {
|
|
|
console.log("加载")
|
|
|
setIsLoad(true)
|
|
|
- await getBookContent({ pageNum: 1, pageSize: size + 2 }).then(res => {
|
|
|
+ await getBookContent({ pageNum: 1, pageSize: reload ? size : size + 1 }).then(res => {
|
|
|
setIsLoad(false)
|
|
|
})
|
|
|
} else {
|
|
@@ -203,12 +205,58 @@ const BookArticle: React.FC<BookArticleProps> = ({ store }) => {
|
|
|
setPayType(type)
|
|
|
modalStore.showModal()
|
|
|
}
|
|
|
+ // 全本购买
|
|
|
+ const allBuy = async (e) => {
|
|
|
+ e.stopPropagation();
|
|
|
+ let { paragraphInfo } = payBook
|
|
|
+ if (payBook) {
|
|
|
+ let params = {
|
|
|
+ bookId: paragraphInfo.bookId,
|
|
|
+ bookParagraphId: paragraphInfo.paragraphNo,
|
|
|
+ orderCondition: "阅读中"
|
|
|
+ }
|
|
|
+ let res = await cashBuy(params, onLoad)
|
|
|
+ if (res) {
|
|
|
+ console.log("全本购买:", res)
|
|
|
+ setTimeout(()=>{
|
|
|
+ setShowPay(false)
|
|
|
+ setShowVip(false)
|
|
|
+ setPayBook(null)
|
|
|
+ },100)
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 书币购买
|
|
|
+ const shubiBuy = async (e) => {
|
|
|
+ e.stopPropagation()
|
|
|
+ let { paragraphInfo } = payBook
|
|
|
+ if (payBook) {
|
|
|
+ let params = {
|
|
|
+ bookId: paragraphInfo.bookId,
|
|
|
+ bookParagraphId: paragraphInfo.paragraphNo,
|
|
|
+ orderCondition: "阅读中"
|
|
|
+ }
|
|
|
+ let res = await virtualBuy(params, onLoad)
|
|
|
+ if (res) {
|
|
|
+ console.log("书币购买章节:", res)
|
|
|
+ setTimeout(()=>{
|
|
|
+ setShowPay(false)
|
|
|
+ setShowVip(false)
|
|
|
+ setPayBook(null)
|
|
|
+ modalStore.hideModal()
|
|
|
+ },100)
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
const { size, bg, off_on, lh } = bookConfig;
|
|
|
return (
|
|
|
<ScrollView
|
|
|
lowerThreshold={indexStore.navHeight}
|
|
|
// refresherTriggered={isLoad}//加载状态
|
|
|
- onScrollToLower={onLoad}
|
|
|
+ onScrollToLower={() => { onLoad() }}
|
|
|
style={{ height: `calc(100vh - ${indexStore.navHeight}px)` }}
|
|
|
scrollY={true}
|
|
|
refresherDefaultStyle='black'
|
|
@@ -241,16 +289,22 @@ const BookArticle: React.FC<BookArticleProps> = ({ store }) => {
|
|
|
{
|
|
|
openBookData?.contentData?.records?.map(item => {
|
|
|
let needPay = item.needPay //是否付费解锁
|
|
|
+ let isPay = item.isPay //是否已付费
|
|
|
let showText = true //是否显示内容
|
|
|
let arr = item.paragraphInfo.content?.match(/[^\n]*\n?/g);
|
|
|
// 是否需要付费
|
|
|
- if (needPay) {
|
|
|
+ if (!showPay && needPay && !isPay) {
|
|
|
+ console.log("是否需要付费====>",item,)
|
|
|
showText = false
|
|
|
- if (!showPay) {
|
|
|
- setShowPay(true)
|
|
|
- setShowVip(item.vipFree)
|
|
|
- setPayBook(item)
|
|
|
- }
|
|
|
+ setShowPay(true)
|
|
|
+ setShowVip(item.vipFree)
|
|
|
+ setPayBook(item)
|
|
|
+ }else{
|
|
|
+ // if (showPay) {
|
|
|
+ // setShowPay(false)
|
|
|
+ // setShowVip(false)
|
|
|
+ // setPayBook(null)
|
|
|
+ // }
|
|
|
}
|
|
|
return showText ? <View
|
|
|
id={'paragraphNo-' + item.paragraphInfo.paragraphNo}
|
|
@@ -275,9 +329,18 @@ const BookArticle: React.FC<BookArticleProps> = ({ store }) => {
|
|
|
{/* 存在vip免费字段展示购买vip */}
|
|
|
{showVip && <View className='vip_btn' onClick={(e) => { payBtn(e, "vip") }}>开通会员,本书免费读</View>}
|
|
|
{/* 存在章节书币价格显示购买书币 */}
|
|
|
- {payBook?.payCoin && <View className='shubi_btn' onClick={(e) => { payBtn(e, "shubi") }}>购买本章</View>}
|
|
|
+ {payBook?.payCoin && <View className='shubi_btn' onClick={(e) => {
|
|
|
+ // 余额
|
|
|
+ let coinNum = userInfoStore?.userInfo?.coinNum || 0
|
|
|
+ // 余额大于等于所需书币
|
|
|
+ if (coinNum >= payBook?.payCoin) {
|
|
|
+ shubiBuy(e)
|
|
|
+ } else {
|
|
|
+ payBtn(e, "shubi")
|
|
|
+ }
|
|
|
+ }}>购买本章 {payBook?.payCoin}书币</View>}
|
|
|
{/* 存在全本购买价格展示全本购买按钮*/}
|
|
|
- {payBook?.payAmount && <View className='shubi_btn' onClick={(e) => { e.stopPropagation() }}>支付{payBook?.payAmount}元购买本书</View>}
|
|
|
+ {payBook?.payAmount && <View className='shubi_btn' onClick={(e) => { allBuy(e) }}>支付{payBook?.payAmount}元购买本书</View>}
|
|
|
</IosShowPay>
|
|
|
</View>}
|
|
|
|
|
@@ -285,10 +348,19 @@ const BookArticle: React.FC<BookArticleProps> = ({ store }) => {
|
|
|
{/* 设置弹窗 */}
|
|
|
{pup && <BookConfigPuP {...bookConfig} off_on={off_on} setOff={setOff} setSize={setSize} setBg={setBg} setLh={setLh} />}
|
|
|
{/* 支付弹窗 */}
|
|
|
- <GlobalModal type={payType} shubiData={{
|
|
|
- coinNum: userInfoStore?.userInfo?.coinNum || 0,
|
|
|
- payCoin: payBook?.payCoin || 0,
|
|
|
- }} />
|
|
|
+ <GlobalModal
|
|
|
+ type={payType}
|
|
|
+ callBackFn={onLoad}
|
|
|
+ shubiData={{
|
|
|
+ coinNum: userInfoStore?.userInfo?.coinNum || 0,
|
|
|
+ payCoin: payBook?.payCoin || 0,
|
|
|
+ }}
|
|
|
+ payBookInfo={{
|
|
|
+ bookId: payBook?.paragraphInfo?.bookId,
|
|
|
+ bookParagraphId: payBook?.paragraphInfo?.paragraphNo,
|
|
|
+ orderCondition: "阅读中"
|
|
|
+ }}
|
|
|
+ />
|
|
|
</View>
|
|
|
{/* 底部下来加载 */}
|
|
|
{/* {
|