import { config } from "../config/config";
import { book_item_data, chapter_item_data, order_status_info_data, user_data } from "../data/data";
import { BookshelfManager } from "../stores/bookshelfManager";
import { ReadHistoryManager } from "../stores/readHistoryManager";
import { ReadSetting } from "../stores/readSetting";
import { ReadRecord } from "../stores/readRecordManager";
import { UserData } from "../stores/userDataManager";
import { UserStatus } from "../stores/userStatusManager";
import { http } from "./http";
import { log } from "./log";
import { sdkUtil } from "./sdkUtil";
import { util } from "./util";
export class tools {
public static platform:string = config.Platform.H5
public static initPlatform(){
// #ifdef MP-WEIXIN
config.applet_id = config.applet_id_config.wx
tools.platform = config.Platform.WEIXIN
//微信初始化设置显示分享弹窗,右上角'···'才可以转发给朋友,复制链接
wx.showShareMenu({
withShareTicket: true,
menus: ['shareAppMessage', 'shareTimeline']
});
// #endif
// #ifdef MP-TOUTIAO
config.applet_id = config.applet_id_config.dy
tools.platform = config.Platform.TOUTIAO
// #endif
log.Debug("当前运行平台:",tools.platform)
}
// 获取当前平台
public static getCurPlatform(){
return tools.platform
}
// 获取平台标识
public static getPlatformID():string {
let id = 'browser'
switch (tools.getCurPlatform()){
case config.Platform.WEIXIN:
id = 'wx'
break;
case config.Platform.TOUTIAO:
id = 'douyin'
break;
default:
break;
}
return id
}
// 获取版本号
public static getVersion():string {
let version = ''
switch (tools.getCurPlatform()){
case config.Platform.H5:
version = '1.0'
break;
case config.Platform.WEIXIN:
version = config.version
break;
case config.Platform.TOUTIAO:
break;
default:
break;
}
return version
}
// 获取订单状态信息
public static getOrderStatusInfo(type:number):order_status_info_data {
if(!type) {type = config.order_status.PAYING}
let info_data = new order_status_info_data()
switch (type){
case config.order_status.PAYING:
info_data.title = '支付中'
info_data.bg_color = '#FDCC22'
break;
case config.order_status.HAVE_PAY:
info_data.title = '已支付'
info_data.bg_color = '#93DB6B'
break;
case config.order_status.CANCEL:
info_data.title = '已取消'
info_data.bg_color = '#999999'
break;
case config.order_status.REFUNDED:
info_data.title = '已退款'
info_data.bg_color = '#f26438'
break;
default:
break;
}
return info_data
}
// 请求获取用户open_id
private static requestGetUserOpenId(cb:Function) {
sdkUtil.login((res:any)=>{
if(res!=null) {
let url = ''
switch (tools.getCurPlatform()){
case config.Platform.TOUTIAO:
url = config.url_confg.Dynamic.user_get_douyin_openid
break;
case config.Platform.WEIXIN:
url = config.url_confg.Dynamic.user_get_wx_open_id
break;
default:
break;
}
http.DynamicRequest(url,res,(err,data)=>{
if(!err) {
if(data.code==config.url_confg.StatesCode.SUCCESS){
cb && cb(data.content.openid)
}
}
})
} else {
cb && cb('browser_123')
}
})
}
// 登录
public static requestLogin(cb:Function=null) {
tools.requestGetUserOpenId((open_id:string)=>{
let opt = {'open_id':open_id, 'platform':tools.getPlatformID()}
http.DynamicRequest(config.url_confg.Dynamic.user_login,opt, (err,data)=>{
if(!err) {
if(data.code==config.url_confg.StatesCode.SUCCESS){
console.log('登录成功=',data)
UserData().updateUserData(data.content)
uni.$emit(config.EVENT_TYPE.USER_LOGIN_SUCCESS)
cb && cb()
} else{
console.log('登录失败=',data)
}
} else {
log.Error(err)
}
})
})
}
// 进入书详情
public static value_gotoBookdetails_data = null
public static gotoBookdetails(book_id:number,wx_book_id:string, cb:Function=null) {
if(book_id) {
tools.value_gotoBookdetails_data = {'book_id':book_id}
if(tools.getCurPlatform()==config.Platform.WEIXIN){
util.showLoading()
let url = config.url_confg.Static.book_details(book_id)
http.StaticRequest(url,(err=null,data=null)=>{
util.hideLoading()
if(!err&&data) {
if(data.code==config.url_confg.StatesCode.SUCCESS){
var book_data = new book_item_data()
book_data = data.content
console.log("book_data",book_data)
UserStatus().updateUserSelectBook(book_data)
ReadHistoryManager.checkBookOnReadHistory(book_data.book_id,(index)=>{
if(index==-1){
tools.updateReadHistory(book_data)
}
})
wx.redirectTo({
url: `plugin-private://wx293c4b6097a8a4d0/pages/novel/index?bookId=${book_data.wx_book_id}`
});
}
}
})
}else{
uni.navigateTo({
url:'/pagesA/bookdetails/bookdetails',
success: (res) => {
res.eventChannel.emit('data',{'book_id':book_id})
cb && cb()
}
})
}
} else {
log.Error('书详情id错误')
}
}
// 进入查看更多
public static value_gotoSeeMore_data = null
public static gotoSeeMore(id:number) {
if(id) {
tools.value_gotoSeeMore_data = {'id':id}
uni.navigateTo({
url:'/pagesA/seeMore/seeMore'
})
} else {
log.Error('查看更多id错误')
}
}
// 进入webview
public static value_gotoWebview = null
public static gotoWebview(title:string, html:string) {
if(html) {
tools.value_gotoWebview = {'title':title,'html':html}
uni.navigateTo({
url:'/pagesA/webview/webview'
})
} else {
log.Error('进入webview链接错误')
}
}
// 进入阅读
public static gotoRead(book_data:book_item_data, chapter_id:number=-1) {
// console.log('book_data=',book_data)
// 获取上次开始阅读章节id
if(chapter_id==-1) {
let read_record_data = ReadRecord().getReadRecordData(book_data.book_id)
if(read_record_data) {
book_data.start_read_chapter_id = read_record_data.chapter_id
} else {
book_data.start_read_chapter_id = 1
}
console.log('开始阅读-获取上次章节id=',book_data.start_read_chapter_id)
} else {
book_data.start_read_chapter_id = chapter_id
console.log('开始阅读-指定章节id=',chapter_id)
}
// 更新用户选择书
UserStatus().updateUserSelectBook(book_data)
// 更新阅读历史
tools.updateReadHistory(book_data)
// 跳转
uni.navigateTo({
url:'/pagesA/readbook/read'
})
}
// 退出阅读
public static exitRead() {
let book_data = UserStatus().getUserSelectBook()
// 更新:书架,读到当前章节数据
uni.$emit(config.EVENT_TYPE.UPDATE_BOOKSHELF_CURRENT_READ_CHAPTER,book_data)
}
// 获取用户信息
public static getUserData():user_data {
return UserData().getData()
}
// 获取用户是否VIP
public static getUserIsVIP():boolean {
return tools.getUserData().is_vip
}
// 获取请求书架参数
public static getRequestBookshelfParameter(book_data:book_item_data) {
let book_opt = {
'book_id':book_data.book_id,
'start_read_chapter_id':book_data.start_read_chapter_id}
return book_opt
}
/*
* 请求书架
* books_shelf: json
* stype: int 类型 1:获取 2:同步书架
*/
public static requestBookShelf(book_list:book_item_data[], stype:number, successs_cb:Function, falil_cb:Function) {
let books_shelf_string = ''
if(book_list.length>0) {
books_shelf_string = JSON.stringify(book_list)
}
let opt = {'books_shelf':books_shelf_string, 'stype':stype}
http.DynamicRequest(config.url_confg.Dynamic.books_shelf, opt, (err,data)=>{
// console.log('err=',err,'data=',data)
if(!err) {
if(data.code==config.url_confg.StatesCode.SUCCESS){
successs_cb && successs_cb(data.content)
} else {
falil_cb && falil_cb()
}
} else {
log.Error(err)
falil_cb && falil_cb()
}
})
}
// 获取本地书架列表
public static getLocalBookshelfList():book_item_data[] {
return BookshelfManager.getBookList()
}
// 保存本地书架列表
public static saveLocalBookshelfList() {
BookshelfManager.saveLocalBookList()
}
// 检查在书架(异步)
public static checkBookOnBookshelf(book_id:number, cb:Function) {
BookshelfManager.checkBookOnBookshelf(book_id, (is_on:boolean)=>{
cb && cb(is_on)
})
}
// 检查在书架(同步)
public static syncCheckBookOnBookshelf(book_id:number):boolean {
return BookshelfManager.syncCheckBookOnBookshelf(book_id)
}
// 添加书架
public static addBookshelf(book_data:book_item_data, cb:Function=null) {
util.showLoading('加载中...', true)
// 获取阅读记录
let record_data = ReadRecord().getReadRecordData(book_data.book_id)
if(record_data) {
book_data.start_read_chapter_id = record_data.chapter_id
} else {
if(!book_data.start_read_chapter_id) {
book_data.start_read_chapter_id = 1
}
}
// 本地添加书
BookshelfManager.addBook(book_data)
// 请求
let data_list = []
for (let i = 0; i < BookshelfManager.getBookList().length; i++) {
let element = BookshelfManager.getBookList()[i]
data_list.push(tools.getRequestBookshelfParameter(element))
}
tools.requestBookShelf(data_list,2,()=>{
console.log('同步书架(加入)-成功')
util.hideLoading()
uni.$emit(config.EVENT_TYPE.UPDATE_BOOKSHELF)
cb && cb()
},()=>{
util.hideLoading()
})
}
// 删除书架
public static deleteBookshelf(book_id_list:number[], cb:Function=null) {
util.showModal('删除?', `从书架删除这${book_id_list.length}本书?`, ()=>{
util.showLoading('移除书架...', true)
// 本地删除书
BookshelfManager.deleteBook(book_id_list)
// 请求
let data_list = []
for (let i = 0; i < book_id_list.length; i++) {
let book_id = book_id_list[i]
let book_data = new book_item_data()
book_data.book_id = book_id
book_data.start_read_chapter_id = 1
data_list.push(tools.getRequestBookshelfParameter(book_data))
}
// 本地阅读记录删除
ReadRecord().deleteReadRecordData(book_id_list)
// 请求
tools.requestBookShelf(data_list,2,()=>{
console.log('同步书架(删除)-成功')
util.hideLoading()
uni.$emit(config.EVENT_TYPE.UPDATE_BOOKSHELF)
cb && cb()
},()=>{
util.hideLoading()
})
})
}
// 重置排序书架
public static resetSortBookshelf(book_list:book_item_data[]) {
BookshelfManager.resetData(book_list)
}
// 获取本地阅读历史列表
public static getLocalReadHistoryList():book_item_data[] {
return ReadHistoryManager.getBookList()
}
// 更新阅读历史
public static updateReadHistory(book_data:book_item_data) {
ReadHistoryManager.addBook(book_data, ()=>{
uni.$emit(config.EVENT_TYPE.UPDATE_READHISTORY)
})
}
// 删除阅读历史
public static deleteReadHistory(book_id_list:number[]) {
ReadHistoryManager.deleteBook(book_id_list)
}
// 重置排序阅读历史
public static resetSortReadHistory(book_list:book_item_data[]) {
ReadHistoryManager.resetData(book_list)
}
public static getChapterList(chapter_path:string,cb:Function){
let url = `${config.url_addr.Static}${chapter_path}`
http.StaticRequest(url,(err,data)=>{
if(err){
return
}
cb(data)
})
}
public static getCurChapterTxt(base_path:string,chapter_id:number,emspWidth:number,cb:Function){
if(chapter_id){
let url = `${config.url_addr.Static}${base_path}${chapter_id}.txt`
http.getStaticText(url,(err,data)=>{
if(err){
log.Error(err)
return
}
// log.Debug("getCurChapterTxt",data)
cb(tools.autoParagraph(data,emspWidth))
// cb(data)
})
}
}
public static autoParagraph(text:string,emspWidth:number) {
const emspStyle = `style="margin-left: ${emspWidth}px;"`;
const emsp_html = ``;
const character = `
${emsp_html}`;
return emsp_html+text.replace(/\n\s*/g,character)
}
public static autoParagraphTitle(text:string,emspWidth:number) {
const emspStyle = `style="margin-left: ${emspWidth}px;"`;
const emsp_html = ``;
return `
`+emsp_html+text
}
public static getChapter(cur_chapter_id:number,list:chapter_item_data[]){
return list.find(chapter_data=>cur_chapter_id==chapter_data.id)
}
public static getPreChapterData(index:number,list:chapter_item_data[]){
let new_index = index -1
if( new_index <0 ){
return null
}
return list[new_index]
}
public static getCurChapterData(index:number,list:chapter_item_data[]):chapter_item_data{
if(index=0){
return list[index]
}
log.Error("getCurChapterData error ",index)
return null
}
public static getNextChapterData(index:number,list:chapter_item_data[]){
let new_index = index +1
if( new_index >=list.length ){
return null
}
return list[new_index]
}
public static getCurChapterIndex(chapter_id:number,list:chapter_item_data[]){
return list.findIndex(chapter_data=>chapter_id==chapter_data.id)
}
public static getFontColorByMode(mode:number){
if(mode==config.read_config.readMode.Bright){
return config.read_config.BrightFontColor
}else{
return config.read_config.DarkFontColor
}
}
public static getDbColorByMode(mode:number){
if(mode==config.read_config.readMode.Bright){
return config.read_config.BrightDbColor
}else{
return config.read_config.DarkDbColor
}
}
public static book_status_title(book_data:book_item_data){
if(book_data.book_is_action==1){
return `连载至 第${book_data.chapter_count}章`
}else{
return `已完结 共${book_data.chapter_count}章`
}
}
public static check_book_chapter_is_buy(book_id:number,chapter_id:number,cb:Function){
http.DynamicRequest(config.url_confg.Dynamic.get_user_chapter_ids,{'book_id':book_id},(err,d)=>{
if(d.code==config.url_confg.StatesCode.SUCCESS){
cb(d.content.includes(chapter_id))
}else{
cb(false)
}
})
}
public static get_book_un_lock_list(book_id:number,cb:Function){
http.DynamicRequest(config.url_confg.Dynamic.get_user_chapter_ids,{'book_id':book_id},(err,d)=>{
if(d.code==config.url_confg.StatesCode.SUCCESS){
cb(d.content)
}else{
cb(null)
}
})
}
public static getCurBuyType(){
let type = config.pay_type.NEI_BU;
switch (tools.getCurPlatform()){
case config.Platform.WEIXIN:
type = config.pay_type.WEI_XIN
break;
case config.Platform.TOUTIAO:
type = config.pay_type.DOU_YIN
break;
default:
break;
}
return type
}
public static getBgResByIndex(index:number,select_index:number){
if(ReadSetting().getReadSetting().readMode==config.read_config.readMode.Dark){
return config.read_config.colorBgResList[index].off_res
}
if(index==select_index){
return config.read_config.colorBgResList[index].on_res
}
return config.read_config.colorBgResList[index].off_res
}
// public static getWxBookId(book_id:number){
// var temp = [
// {"book_id": 1, "wx_book_id": "A1HcfuuvhA6S7Nqy3f97nTixyb"},
// {"book_id": 2, "wx_book_id": "A1Hcfuwb1iw9PakEYJz8wGWN4V"},
// {"book_id": 3, "wx_book_id": "A1HcfuuvKqNdTuMD9y9bTAinvh"},
// {"book_id": 4, "wx_book_id": "A1HcfuyDVgAqSRAiaWsYRcGttu"},
// {"book_id": 5, "wx_book_id": "A1Hcfuzo33e6KTd9VCpmFc23L9"},
// {"book_id": 6, "wx_book_id": "A1Hcfuzp91oWFt7RAGoLFV2ZUq"},
// {"book_id": 7, "wx_book_id": "A1HcfuzqEyxvCJbgqLmuFN35dX"},
// {"book_id": 8, "wx_book_id": "A1Hcfv2QnMSB5M47k2j85MnE4m"},
// {"book_id": 9, "wx_book_id": "A1Hcfv2RtKbb1mYPR6hh5EnkDT"},
// {"book_id": 10, "wx_book_id": "A1Hcfv2SzHkzxC2f6AgG57oGN9"}
// ];
// for (var i = 0; i < temp.length; i++) {
// if(temp[i].book_id==book_id){
// return temp[i].wx_book_id
// }
// }
// return null
// }
public static getBookIdByWxBookId(wx_book_id:string,cb){
// var temp = [
// {"book_id": 1, "wx_book_id": "A1HcfuuvhA6S7Nqy3f97nTixyb"},
// {"book_id": 2, "wx_book_id": "A1Hcfuwb1iw9PakEYJz8wGWN4V"},
// {"book_id": 3, "wx_book_id": "A1HcfuuvKqNdTuMD9y9bTAinvh"},
// {"book_id": 4, "wx_book_id": "A1HcfuyDVgAqSRAiaWsYRcGttu"},
// {"book_id": 5, "wx_book_id": "A1Hcfuzo33e6KTd9VCpmFc23L9"},
// {"book_id": 6, "wx_book_id": "A1Hcfuzp91oWFt7RAGoLFV2ZUq"},
// {"book_id": 7, "wx_book_id": "A1HcfuzqEyxvCJbgqLmuFN35dX"},
// {"book_id": 8, "wx_book_id": "A1Hcfv2QnMSB5M47k2j85MnE4m"},
// {"book_id": 9, "wx_book_id": "A1Hcfv2RtKbb1mYPR6hh5EnkDT"},
// {"book_id": 10, "wx_book_id": "A1Hcfv2SzHkzxC2f6AgG57oGN9"}
// ];
// for (var i = 0; i < temp.length; i++) {
// if(temp[i].wx_book_id==wx_book_id){
// return temp[i].book_id
// }
// }
// return 1
let url = config.url_confg.Dynamic.get_wxbook_to_bookid
http.DynamicRequest(url,{wx_book_id:wx_book_id},(err,data)=>{
if(!err) {
// console.log("wx_book_id",data,wx_book_id)
if(data.code==config.url_confg.StatesCode.SUCCESS){
cb && cb(data.content.id)
}
}
})
}
// 下单(支付类型 1:抖音支付 2:微信支付 3:内部充值(内部测试))
public static requestRechargeOrderBuy(pay_type:number, goods_id:number, cb:Function) {
let opt = {'pay_type':pay_type,'goods_id':goods_id}
http.DynamicRequest(config.url_confg.Dynamic.recharge.order_buy,opt,(err=null,data=null)=>{
// log.Debug('下单 data=',data,'err=',err)
if(!err&&data) {
if(data.code==config.url_confg.StatesCode.SUCCESS){
let order_id = data.content.order_id
cb && cb(order_id,data.content.wxpay_info)
} else {
cb && cb('',null)
util.showErrorToast(data.message)
}
} else {
cb && cb('',null)
util.showErrorToast('下单错误!')
}
})
}
// 查询订单
public static requestRechargeOrderInfo(order_id:string, cb:Function) {
let opt = {'order_id':order_id}
http.DynamicRequest(config.url_confg.Dynamic.recharge.order_info,opt,(err=null,data=null)=>{
// log.Debug('查询订单 data=',data,'err=',err)
if(!err&&data) {
if(data.code==config.url_confg.StatesCode.SUCCESS){
let status = data.content.status //订单状态 1:支付中 2:已经支付
cb && cb(status)
} else {
cb && cb(-1)
}
} else {
cb && cb(-1)
}
})
}
// 订单列表 stype 1:充值 2:购买章节
public static requestOrderList(stype:number, page:number, limit:number=15, cb:Function) {
let opt = {'stype':stype,'page':page,'limit':limit}
util.showLoading('',true)
http.DynamicRequest(config.url_confg.Dynamic.order_list,opt,(err=null,data=null)=>{
util.hideLoading()
if(!err&&data) {
if(data.code==config.url_confg.StatesCode.SUCCESS){
let content = data.content
cb && cb(content)
} else {
cb && cb(null)
}
} else {
cb && cb(null)
}
})
}
}