20 Commits

Author SHA1 Message Date
@fawn-nine
5277ab3f5b 境外短信验证登陆 2023-11-14 18:08:16 +08:00
@fawn-nine
1172043635 地址bug修复 2023-11-14 14:21:11 +08:00
@fawn-nine
3b57f0aeb0 Merge branch 'xie1108' 2023-11-14 11:28:53 +08:00
@fawn-nine
890a3c45ad 隐藏首页未开发项目 2023-11-14 11:28:14 +08:00
@fawn-nine
c50dfc0bd5 . 2023-11-14 09:39:58 +08:00
@fawn-nine
52f7ad40c8 开启统计,ios开启app分享 2023-11-13 13:55:16 +08:00
@fawn-nine
7db05c39fa 首页布局压缩 2023-11-10 17:44:41 +08:00
@fawn-nine
ca693e3a4d 首页的图标调整 2023-11-10 09:38:49 +08:00
@fawn-nine
346ec9d615 页面完善 2023-11-08 17:31:37 +08:00
@fawn-nine
b08bc52662 完善地址信息 2023-11-08 15:26:40 +08:00
@fawn-nine
f25a50e09d Merge branch 'xie_xuewei' 2023-11-08 13:37:23 +08:00
@fawn-nine
f0f8b758c8 Merge branch 'xie1023' 2023-11-08 13:30:10 +08:00
@fawn-nine
d41853aed7 打卡签到未购买不可参与打卡 2023-11-08 13:27:46 +08:00
@fawn-nine
14cc4a87f1 . 2023-11-08 11:50:25 +08:00
@fawn-nine
4cdf12da24 Merge branch 'xie_xuewei' 2023-11-07 17:14:55 +08:00
@fawn-nine
6b324701b3 Merge branch 'xie1023' 2023-11-02 13:14:17 +08:00
yanwenlong
52e17d42b2 被听书组件打断时,设置播放icon状态 2023-11-01 20:47:25 +08:00
@fawn-nine
8043abbd12 Merge branch 'xie1023' 2023-11-01 17:42:38 +08:00
@fawn-nine
66770de40b . 2023-11-01 10:27:37 +08:00
yanwenlong
6fc6dfcd1c 听书-音频播放器 2023-11-01 08:45:03 +08:00
26 changed files with 393 additions and 136 deletions

View File

@@ -6,8 +6,8 @@ if (process.env.NODE_ENV === 'development') {
// socketUrl = "ws://localhost:6001/";
// baseUrl = "https://twin-ui.com/demo/";
// baseUrl = "http://59.110.212.44:9200/pb/";
// baseUrl = "https://testapi.nuttyreading.com/"; // 线上测试环境
baseUrl = "https://api.nuttyreading.com/"; // 线上正式
baseUrl = "https://testapi.nuttyreading.com/"; // 线上测试环境
// baseUrl = "https://api.nuttyreading.com/"; // 线上正式
// baseUrl = "http://192.168.110.100:9100/pb/"; // 开发用电脑
// baseUrl = "http://192.168.110.110:9200/pb/";
// baseUrl = "http://192.168.110.38:9200/pb/"; // 吴春磊笔记本1
@@ -45,9 +45,10 @@ const courtConfig = {
}
};
//手机号验证正则表达式
// const phoneRegular = /^1\d{10}$/;
// (中国大陆)
const phoneRegular = /^1\d{10}$/;
// 手机号码验证 支持港澳台 大陆
const phoneRegular = /^[1][3-8]\d{9}$|^([6|9])\d{7}$|^[0][9]\d{8}$|^[6]([8|6])\d{5}$|^(00){0,1}(65){1}[13689]\d{6,7}$/;
// const phoneRegular = /^[1][3-8]\d{9}$|^([6|9])\d{7}$|^[0][9]\d{8}$|^[6]([8|6])\d{5}$|^(00){0,1}(65){1}[13689]\d{6,7}$/;
//邮箱验证正则表达式
const mailRegular = /^\w+@\w+(\.[a-zA-Z]{2,3}){1,2}$/;
//密码验证正则表达式

View File

@@ -167,6 +167,7 @@ $http.dataFactory = async function(res) {
title: '登录失效,请重新登录',
icon: 'none'
});
console.log('到这里了')
setTimeout(() => {
uni.navigateTo({
url: "/pages/user/login"

View File

@@ -11,8 +11,8 @@ Vue.prototype.$bgm = bgm
// Vue.prototype.$baseUrl = "http://59.110.212.44:9100/pb/"
Vue.prototype.$baseUrl = "https://api.nuttyreading.com/"
// 安卓安卓包下载地址
// Vue.prototype.$apkUrl = "https://www.nuttyreading.com/nuttyreading.apk"
Vue.prototype.$apkUrl = "https://www.nuttyreading.com/nuttyreading.apk"
// Vue.prototype.$apkUrl = "https://www.nuttyreading.com/nuttyreading.apk" // 本地地址
Vue.prototype.$apkUrl = "https://a.app.qq.com/o/simple.jsp?pkgname=com.cn.nuttyreading" // 应用宝
// uView组件库

View File

@@ -12,8 +12,8 @@
"src" : "图片路径"
}
],
"versionName" : "1.2.10",
"versionCode" : 1210,
"versionName" : "1.2.15",
"versionCode" : 1215,
"app-plus" : {
"compatible" : {
"ignoreVersion" : true
@@ -113,7 +113,8 @@
"entitlements" : {
"com.apple.developer.associated-domains" : [ "applinks:verification.nuttyreading.com" ]
}
}
},
"idfa" : false
},
"icons" : {
"android" : {
@@ -153,7 +154,10 @@
"splashscreen" : {
"alwaysShowBeforeRender" : false
},
"nativePlugins" : {}
"nativePlugins" : {},
"uniStatistics" : {
"enable" : true
}
},
// 5+App特有相关
"quickapp" : {},
@@ -171,6 +175,9 @@
"scope.userLocation" : {
"desc" : "你的位置信息将用于小程序位置接口的效果展示"
}
},
"uniStatistics" : {
"enable" : true
}
},
"h5" : {
@@ -183,9 +190,61 @@
"treeShaking" : {
"enable" : true
}
},
"uniStatistics" : {
"enable" : true
}
},
"_spaceID" : "mp-3614b80b-2d75-4462-a481-4998f8187274"
"_spaceID" : "mp-3614b80b-2d75-4462-a481-4998f8187274",
"uniStatistics" : {
"version" : "2",
"enable" : true
},
"mp-alipay" : {
"uniStatistics" : {
"enable" : true
}
},
"mp-baidu" : {
"uniStatistics" : {
"enable" : true
}
},
"mp-jd" : {
"uniStatistics" : {
"enable" : true
}
},
"mp-kuaishou" : {
"uniStatistics" : {
"enable" : true
}
},
"mp-lark" : {
"uniStatistics" : {
"enable" : true
}
},
"mp-qq" : {
"uniStatistics" : {
"enable" : true
}
},
"mp-toutiao" : {
"uniStatistics" : {
"enable" : true
}
},
"quickapp-webview-huawei" : {
"uniStatistics" : {
"enable" : true
}
},
"quickapp-webview-union" : {
"uniStatistics" : {
"enable" : true
}
}
}
// 小程序特有相关

View File

@@ -8,7 +8,7 @@
:duration="duration">
<swiper-item v-for="(item, index) in acupointDetail.imageList" :key="index">
<view class="swiper-item">
<image :src="item" mode="aspectFit"></image>
<image :src="item" mode="aspectFit" @click="previewImage(item)"></image>
</view>
</swiper-item>
</swiper>
@@ -21,7 +21,7 @@
</view>
</uni-section>
<uni-section class="mb-10" titleFontSize="18px" title="别名" type="line">
<view class="item" v-if="acupointDetail.alias && acupointDetail.alias != ''">
<view class="item" v-if="acupointDetail.alias && acupointDetail.alias != ''" >
{{acupointDetail.alias}}
</view>
<view class="item" v-else>
@@ -30,20 +30,20 @@
</uni-section>
<uni-section class="mb-10" titleFontSize="18px" title="所属经络" type="line">
<view class="item">
{{acupointDetail.meridian}}
<view class="item" v-html="acupointDetail.meridian">
</view>
</uni-section>
<uni-section class="mb-10" titleFontSize="18px" title="定位" type="line">
<view class="item">
{{acupointDetail.position}}
<uni-section class="mb-10" titleFontSize="18px" title="定位" type="line" >
<view class="item" v-html="acupointDetail.position">
</view>
</uni-section>
<uni-section class="mb-10" titleFontSize="18px" title="解剖" type="line">
<view class="item" v-if="acupointDetail.anatomy && acupointDetail.anatomy != ''">
{{acupointDetail.anatomy}}
<view class="item" v-if="acupointDetail.anatomy && acupointDetail.anatomy != ''" v-html="acupointDetail.anatomy">
</view>
<view class="item" v-else>
暂无
@@ -51,14 +51,13 @@
</uni-section>
<uni-section class="mb-10" titleFontSize="18px" title="主治" type="line">
<view class="item">
{{acupointDetail.indication}}
<view class="item" v-html="acupointDetail.indication">
</view>
</uni-section>
<uni-section class="mb-10" titleFontSize="18px" title="配伍" type="line">
<view class="item" v-if="acupointDetail.compatibility && acupointDetail.compatibility != ''">
{{acupointDetail.compatibility}}
<view class="item" v-if="acupointDetail.compatibility && acupointDetail.compatibility != ''" v-html="acupointDetail.compatibility">
</view>
<view class="item" v-else>
暂无
@@ -66,8 +65,8 @@
</uni-section>
<uni-section class="mb-10" titleFontSize="18px" title="文献" type="line">
<view class="item" v-if="acupointDetail.literature && acupointDetail.literature != ''">
{{acupointDetail.literature}}
<view class="item" v-if="acupointDetail.literature && acupointDetail.literature != ''" v-html="acupointDetail.literature">
</view>
<view class="item" v-else>
暂无
@@ -105,6 +104,19 @@
this.getDetail()
},
methods: {
// 放大图片
previewImage(url) {
console.log(url)
uni.previewImage({
urls: [url],
longPressActions: {
itemList: ['很抱歉,暂不支持保存图片到本地'],
success: function(res) {
// console.log(res,'+++++')
}
}
});
},
// 穴位详情
getDetail() {
$http.request({
@@ -139,7 +151,7 @@
.mb-10{ margin-bottom: 10px;}
.content{font-size: 28rpx;}
.swiper-item{
image{margin: 0 auto; height:200rpx;}
image{margin: 0 auto; height:250rpx;}
}
.uni-margin-wrap{ margin-bottom: 20rpx; padding-top: 20rpx;

View File

@@ -1,5 +1,5 @@
<template>
<view :class="['container', currentDay == linshiDay && taskInfo.id && myword.length == 0 ? 'pb100':'']">
<view :class="['container', currentDay == linshiDay && taskInfo.id && myword.length == 0 && bookInfo.isBuy ? 'pb100':'']">
<z-nav-bar title="读书打卡"></z-nav-bar>
<!-- 仿钉钉打卡日历组件 -->
<view class=""
@@ -254,7 +254,7 @@
</view>
</u-popup>
<view class="leaveBtn" v-if="!addTextShow && currentDay == linshiDay && taskInfo.id && myword.length == 0">
<view class="leaveBtn" v-if="!addTextShow && currentDay == linshiDay && taskInfo.id && myword.length == 0 && bookInfo.isBuy">
<button style="height: 70rpx; font-size: 28rpx; line-height: 70rpx;" type="primary" plain="true"
@click="addTextShow = true">说点什么</button>
</view>
@@ -450,7 +450,11 @@
// 获取书籍信息
getBookInfo() {
this.$http
.post('book/book/appinfo/' + this.bookid + '/' + this.userInfo.id)
// .post('book/book/appinfo/' + this.bookid + '/' + this.userInfo.id)
.post('book/book/getBookInfo', {
'bookId': this.bookid,
'userId': this.userInfo.id
})
.then(res => {
if (res.code == 0) {
console.log(res, 'res')
@@ -657,7 +661,7 @@
.then(res => {
if (res.code == 0) {
console.log(res, '任务信息')
if (res.result != {}) {
if (res.result != {} && res.result) {
this.taskInfo = res.result
this.taskInfo.video != '' ? this.poster = this.taskInfo.video +
"?x-oss-process=video/snapshot,t_0,f_jpg" : ''
@@ -674,17 +678,30 @@
uni.hideLoading()
})
},
gotoBuy(){
let that = this
uni.showModal({
title: '提示',
content: '购买本书后方可参与打卡',
confirmText:'立即购买',
cancelText:'知道了',
success: function (res) {
if (res.confirm) {
console.log(that.bookInfo,'that.bookInfo');
uni.navigateTo({
url: '../bookShop/commodityDetail?id=' + that.bookInfo.productId
});
}
}
});
},
// 补卡
buSign(day) {
console.log('正在补卡', this.taskInfo, day)
// return false
// if (!this.taskInfo.id) {
// uni.showToast({
// title: '当天未发布打卡任务,不可补卡哦',
// icon: 'none'
// })
// return
// }
if(!this.bookInfo.isBuy){
this.gotoBuy()
return
}
let param = {
'bookId': this.bookid,
'userId': this.userInfo.id,
@@ -713,8 +730,12 @@
},
// 快捷签到
kuickSign() {
if(!this.bookInfo.isBuy){
this.gotoBuy()
return
}
if (!this.taskInfo.id) {
if (this.taskInfo != null && !this.taskInfo.id) {
uni.showToast({
title: '当天未发布打卡任务,不可签到哦',
icon: 'none'
@@ -800,7 +821,7 @@
});
},
// 说点什么
goToSign() {
goToSign() {
// images数据处理
if (this.formData.images.length > 0) {
var imgs = []

View File

@@ -22,7 +22,7 @@
<uni-tag class="tag" @click="toMore()" :inverted="true" text="书评" type="success"></uni-tag>
<uni-tag @click="gotoListen()" class="tag" v-if="bookMessage.canListen" :inverted="true" text="听书" type="primary"></uni-tag>
<!-- 1:打卡2不打卡 -->
<uni-tag @click="gotoclock()" v-if="bookMessage.clockIn == 1" class="tag" :inverted="true" text="签到" type="warning"></uni-tag>
<uni-tag @click="gotoclock()" v-if="bookMessage.clockIn == 1" class="tag" :inverted="true" text="打卡" type="warning"></uni-tag>
<uni-tag @click="goJiangShu()" v-if="bookMessage.teachIn == 1" class="tag" :inverted="true" text="讲书" type="error"></uni-tag>
</view>
<view class="buy" v-if="!bookMessage.isBuy">

View File

@@ -3,33 +3,36 @@
<!-- <z-nav-bar backState="2000" title="首页"></z-nav-bar> -->
<view class="home_bg">
<view class="" style=" ">
<view class="icon_hua">
<image src="../../static/icon/home_icon_3.png" mode="aspectFit" class="icon_hua_1"></image>
</view>
<view class="hehan">
<image src="../../static/icon/hehan.png" mode="aspectFit" class="icon_hua_1"></image>
</view>
<view class="fiveIcon flexbox" >
<view class="icon_hua">
<image src="../../static/icon/home_icon_1.png" mode="aspectFit" class="icon_hua_1"></image>
</view>
<view class="hehan">
<image src="../../static/icon/hehan.png" mode="aspectFit" class="icon_hua_1"></image>
</view>
<view class="fiveIcon flexbox" style="justify-content: space-around;">
<div class="item item1" @click="onPageJump('../acupoint/acupoint')">
<image src="../../static/icon/five1.png" mode="aspectFit" ></image>
<text>经穴检索</text>
</div>
<div class="item item1">
<!-- <div class="item item1">
<image src="../../static/icon/five2.png" mode="aspectFit"></image>
<text>方药检索</text>
</div>
</div> -->
<!-- <div class="item item1">
<image src="../../static/icon/five4.png" mode="aspectFit"></image>
<text>五运六气</text>
</div> -->
<div class="item item1" @click="onPageJump('../peanut/searchFor')">
<image src="../../static/icon/five3.png" mode="aspectFit"></image>
<text>书名检索</text>
</div>
<div class="item item1">
<image src="../../static/icon/five4.png" mode="aspectFit"></image>
<text>五运六气</text>
</div>
<div class="item item1">
<!-- <div class="item item1">
<image src="../../static/icon/five5.png" mode="aspectFit"></image>
<text>吴门医述</text>
</div>
</div> -->
</view>
<!-- <view class="search_box flexbox" @click="onPageJump('../peanut/searchFor')">
<view class="search">
@@ -49,24 +52,24 @@
<!-- <view class="home_nar" v-if="showEbook"> -->
<view class="home_nar">
<view class="hn_cl_tit shuguan" @click="onPageJump('../clock/index')">
<image src="../../static/icon/home1.png" mode="aspectFit"></image>
<text> </text>
<image src="../../static/icon/home1-1.png" mode="aspectFit"></image>
<!-- <text> </text> -->
</view>
<view class="hn_cl_tit dianzishu" @click="onPageJump('../listen/home')">
<image src="../../static/icon/home2.png" mode="aspectFit"></image>
<text> </text>
<image src="../../static/icon/home2-1.png" mode="aspectFit"></image>
<!-- <text> </text> -->
</view>
<!-- <view class="hn_cl_tit" @click="onPageJump('../bookShop/bookShopIndex')"> -->
<view class="hn_cl_tit shuping" @click="onPageJump('../comments/commentsList')">
<image src="../../static/icon/home3.png" mode="aspectFit"></image>
<text> </text>
<image src="../../static/icon/home3-1.png" mode="aspectFit"></image>
<!-- <text> </text> -->
</view>
<view class="hn_cl_tit chaoshi" @click="onPageJump('../talkBook/talkBook')">
<image src="../../static/icon/home4.png" mode="aspectFit"></image>
<text> </text>
<image src="../../static/icon/home4-1.png" mode="aspectFit"></image>
<!-- <text> </text> -->
</view>
</view>
@@ -124,14 +127,14 @@
</view>
</view> -->
<view class="head_line" >
<view class="head_line" style="background-color: #fff;">
<b></b>
<text>新书上市</text>
<!-- <i @click="onBookMore('New')">查看更多 ></i> -->
</view>
<view class="newBook">
<scroll-view class="scroll-view_H " scroll-x="true" scroll-left="10">
<scroll-view class="scroll-view_H " scroll-x="true" scroll-left="10" style="margin-top: 0 !important;">
<view :class="['item']" v-for="(item,index) in newBookList" :key="index">
<view class="videoBox" @click="goDetail(item.productId)">
<image v-if="item.productImages != ''" :src="item.productImages" mode="scaleToFill"></image>
@@ -713,7 +716,7 @@
text{
font-size: 28rpx; color: #11a669;
}
image{width: 60rpx; height: 60rpx; margin: 0 auto; }
image{width: 56rpx; height: 56rpx; margin: 0 auto; }
}
.hehan{width: 80%; margin: 10rpx auto;}
.zhekou{
@@ -723,24 +726,26 @@
.priceAndnum{ font-size: 24rpx !important;
.price{color: #9b9b9b !important; font-size: inherit; font-weight: normal !important; display: block;}
}
.ProTabs{margin: 20rpx 0; padding:0 20rpx;
text{padding: 12rpx 14rpx; font-size: 32rpx; border-radius: 10rpx; overflow: hidden;
.ProTabs{
// margin: 20rpx 0;
padding:0 20rpx;
text{padding: 8rpx 14rpx; font-size: 32rpx; display: inline-block; border-radius: 10rpx; overflow: hidden;
// background-color: #eee;
color: #55aa7f; margin-right: 10rpx;}
text.cur{background-color:#55aa7f ; color: #fff;}
}
.newBook{margin-top: 20rpx;}
// .newBook{margin-top: 10rpx;}
.scroll-view_H{background-color: #fff;white-space: nowrap;
padding:10rpx ; }
padding:10rpx ; margin-top: 12rpx;}
.scroll-view_H{
.item { padding: 10rpx; overflow: hidden; display: inline-block;
.item { padding: 10rpx; overflow: hidden; display: inline-block; padding-bottom: 0;
width: 180rpx !important; margin-right: 20rpx; border-radius: 10rpx;
.videoBox{
image{display: block; width:150rpx;
height: 170rpx;
}
}
.bookName{display: block; margin-top: 20rpx; color: #666; font-size: 24rpx; white-space: nowrap;
.bookName{display: block; margin-top: 6rpx; color: #666; font-size: 24rpx; white-space: nowrap;
overflow-x: hidden; overflow: hidden;
text-overflow: ellipsis;}
}
@@ -748,7 +753,8 @@
}
.flexbox{display: flex;}
.head_line {
margin: 20rpx 0 0 0;
padding-top: 8rpx;
margin: 12rpx 0 0 0;
b {
@@ -790,8 +796,8 @@
image{width: 150rpx; height: 80rpx;}
}
.icon_hua{width: 100%; text-align: center; display: block;
image{width: 150rpx; height: 150rpx; margin: 0 auto;}
}
image{width: 150rpx; height: 150rpx; margin: 0 auto;}
}
.search_box { margin: 0 auto; margin-top: 20rpx; align-items: center;
width: calc(100% - 30rpx); margin-top: 0;
margin-bottom: 20rpx;
@@ -825,29 +831,31 @@
font-size: 30rpx; color: #fff;
}
}
.home_nar {
margin: 30rpx 20rpx; justify-content: space-between;
.home_nar {
background-color: #fff;
padding: 20rpx 30rpx;
justify-content: space-between;
display: flex;
color: #333;
// margin-bottom: 0;
margin-bottom: 0;
// .dianzishu{ margin-right:10rpx;
// background-color:#f8d6f4 ; border: 2px solid #edcce9;
// }
// .chaoshi{background-color:#fff2d8 ; border: 2px solid #ede6d3; }
// .shuping{ background-color: #d6ffda; border: 2px solid #bae9bf;}
// .shuguan{ background-color:#e3f9f9 ; border: 2px solid #d7eced; }
.hn_cl_tit { padding-bottom: 10rpx;
.hn_cl_tit {
// width: 23%;
width: 31%;
text-align: center;
border-radius: 20rpx ; padding-top: 10rpx;
border-radius: 20rpx ;
// line-height: 110upx;
//display: flex;
align-content: center;
justify-content: center;
image {
width:90%;
height:156rpx;
width:120rpx;
height:120rpx;
display: block;
margin: 0 auto;
// margin: 0 20rpx;
@@ -1116,13 +1124,13 @@
.goods {
width: 100%;
margin:18rpx 0 50rpx 0;
margin:0 0 50rpx 0; background-color: #fff;
.goodsItem {
display: inline-block;
width: 46%;
border-radius: 20rpx;
padding: 25rpx 25rpx 20rpx 25rpx;
padding: 25rpx; padding-bottom: 5rpx;
margin: 0 20rpx 20rpx 20rpx;
background-color: #fff;
border: 1px solid #eee;
@@ -1137,12 +1145,12 @@
.goodsName {
margin-top: 10rpx;
font-size: 30rpx;
font-size: 28rpx;
// font-weight: bold;
}
.goodsPrice {
font-size: 30rpx;
font-size: 28rpx;
margin: 5rpx 0 0 3rpx;
display: flex; justify-content: space-between;
.price{

View File

@@ -89,7 +89,8 @@
<!-- <view class="nav_list" @click="onGoing()">
<text>帮助与反馈11111</text>
</view> -->
<view class="nav_list" @click="newOnShare" v-if="isAndorid">
<!-- <view class="nav_list" @click="newOnShare" v-if="isAndorid"> -->
<view class="nav_list" @click="newOnShare">
<text>分享App</text>
</view>
<view class="nav_list" @click="onPageJump('../peanut/aboutUs')">
@@ -122,7 +123,7 @@
import $http from '@/config/requestConfig.js';
// import appShare, { closeShare } from '@/uni_modules/zhouWei-APPshare/js_sdk/appShare';
import {
mapState
mapState,mapMutations
} from 'vuex';
export default {
data() {
@@ -160,6 +161,7 @@
},
//方法
methods: {
...mapMutations(['setUserInfo']),
// 获得操作系统
getOS(){
let oprateOs = ''
@@ -278,6 +280,7 @@
// 退出登录
signOut() {
this.signShow = false
this.setUserInfo({'token': null})
uni.reLaunch({
url: '../user/login'
});

View File

@@ -4,9 +4,24 @@
<view class="mainContent">
<view class="title">{{talkBookDetail.title}}</view>
<view class="voices" v-if="talkBookDetail.voices != '' && audioShow">
<audio style="text-align: left; overflow: hidden;" :src="talkBookDetail.voices" @play="audioPlay"
<!-- <audio style="text-align: left; overflow: hidden;" :src="talkBookDetail.voices" @play="audioPlay"
poster="../../static/icon/home_icon_0.png" :name="talkBookDetail.title"
:author="bookInfo.author.authorName" :action="audioAction" controls></audio>
:author="bookInfo.author.authorName" :action="audioAction" controls @timeupdate="updateTime"></audio> -->
<!-- 下面自己写了个播放器 -->
<view class="audiobox">
<view class="audioinfo">
<image class="audioimg" :src="bookInfo.images" mode="aspectFit"></image>
<image class="audioimgstart" v-if="!this.paused" mode="aspectFit" src="../../static/audiostart.png" @click="start"></image>
<image class="audioimgstart" v-else mode="aspectFit" src="../../static/audiostop.png" @click="start"></image>
<view>
<view class="audiotitle">{{talkBookDetail.title}}</view>
<view class="audioauthor">{{bookInfo.author.authorName}}</view>
<view class="audioauthor">{{currentTime+'/'+duration}}</view>
<slider class="audioslider" block-size="12" v-model="currentTime" :max="duration" @change="changeTime"></slider>
<!-- <view @click="start">点击播放/暂停</view> -->
</view>
</view>
</view>
</view>
<view class="content" v-if="talkBookDetail.content != ''" v-html="talkBookDetail.content"></view>
<view class="content" v-else></view>
@@ -68,6 +83,10 @@
}, // 书籍信息
talkBookDetail: {},
windowWidth: 0,
audio: null,
duration: 10,
currentTime: 0,
paused: false
}
},
onLoad(e) {
@@ -75,16 +94,55 @@
console.log(e, 'onLoad')
this.bookId = e.bookId
this.teachId = e.teachId
// 初始化播放器实例
this.audio = uni.createInnerAudioContext();
},
onShow() {
this.getBookInfo()
this.getTalkBookDetail()
},
onHide() {
// console.log('onHide----',this.paused)
this.audio.pause() // 暂停播放
this.paused = false
},
onUnload() {
// console.log('onUnload----',this.paused)
this.audio.destroy() // 销毁播放器
},
computed: {
...mapState(['userInfo'])
},
methods: {
...mapMutations(['setUserInfo']),
start(){
this.initAudio() // 开始播放
},
initAudio(){
this.audio.onTimeUpdate(()=>{
this.duration = this.audio.duration.toFixed()
this.currentTime = this.audio.currentTime.toFixed()
})
this.audio.onPause(()=>{ // 用于被听书组件打断时设置播放icon状态
this.paused = false
// console.log('onPause----------',this.paused)
})
this.paused = this.audio.paused
// console.log('paused',this.paused)
if(this.paused){
this.audio.play()
}else{
this.audio.pause()
}
},
updateTime(e){
this.currentTime = e.detail.currentTime.toFixed()
this.duration = e.detail.duration.toFixed()
},
changeTime(e){
this.audio.seek(e.detail.value) // 设置播放位置
},
audioPlay(){
console.log('播放讲书',this.$music)
this.$music.setCloseBgm() // 关闭听书音频
@@ -140,6 +198,11 @@
console.log(res, 'res')
this.talkBookDetail = res.bookTeach
this.audio.src = this.talkBookDetail.voices // 设置播放资源路径
this.audio.onCanplay((e)=>{
this.duration = this.audio.duration.toFixed() // 初始化进度条和音频秒数
})
// this.isBuy = res.book.isBuy
// this.freeChapterCount = res.book.freeChapterCount
} else {
@@ -239,6 +302,43 @@
border-radius: 5px;
}
}
// 自定义播放器样式
.audiobox{
border: 2rpx solid #d6d5d5;
border-radius: 8px;
.audioinfo{
display: flex;
.audioimg{
padding: 10rpx;
width: 180rpx;
height: 220rpx;
border-radius: 5px;
}
.audioimgstart{
position: absolute;
padding: 20rpx;
width: 180rpx;
height: 220rpx;
border-radius: 5px;
}
.audiotitle{
padding: 10rpx;
font-size: 28rpx;
text-align: left;
}
.audioauthor{
padding: 4rpx;
font-size: 24rpx;
text-align: left;
color: #999;
}
.audioslider{
width: 400rpx;
}
}
}
// .opbtn{font-size: 14rpx;}
</style>

View File

@@ -253,7 +253,7 @@
},
changeHandler(e) { //城市选择时触发
console.log(e,'变化了',this.columnData, this.columnDatas)
// console.log(e,'变化了',this.columnData, this.columnDatas)
this.addressChanged = true
const {
columnIndex, //当前选择的列,省 / 市 / 区
@@ -278,7 +278,7 @@
},
addconfirm(e) { //点击确定按钮
console.log(e,'选中的值')
// console.log(e,'选中的值')
this.addressChanged = true
this.addreShow = false;
this.addressForm.areaidpathtext = e.value[0].UName + '-' + e.value[1].UName + '-' + e.value[2].UName

View File

@@ -15,26 +15,31 @@
<!-- <view class="title" :class="{ active: type == 2000 }" @click="type = 2000">验证码登录/注册</view>
<view class="title" :class="{ active: type == 1000 }" @click="type = 1000">密码登录</view> -->
</view>
<view class="input_tit">手机号</view>
<view class="flexbox" style=" margin-top: 20rpx;">
<view class="input_tit" style="margin-top: 0; margin-right: 20rpx;">手机号</view>
<view class="quhao">
<uni-data-select class="myselect" placeholder="选择区号" v-model="quCode" :localdata="quCodeList" style="height: 30rpx !important;"
@change="quChange"></uni-data-select>
</view>
</view>
<!-- 带区号 -->
<!-- <view class="flexbox " style="margin:36rpx 0; justify-content: space-between;">
<view class="quhao">
<uni-data-select
placeholder="区号" model="quCode"
:localdata="quCodeList"
@change="quChange"
></uni-data-select>
<view class="flexbox " style="margin:36rpx 0; justify-content: space-between;">
<view class="triangle borderBottom phoneNumberInput" style="width: 150rpx;">
<input type="number" v-model="quCode" placeholder="区号" placeholder-class="grey" />
</view>
<view class="triangle borderBottom phoneNumberInput" :clasfs="[type == 1000 ? 'left_triangle': 'right_triangle']">
<input type="number" v-model="phone" @input="onInput" placeholder="请输入您的手机号" placeholder-class="grey" />
<view class="triangle borderBottom phoneNumberInput"
:clasfs="[type == 1000 ? 'left_triangle': 'right_triangle']">
<input type="number" v-model="phone" @input="onInput" placeholder="请输入您的手机号"
placeholder-class="grey" />
</view>
</view> -->
</view>
<!-- 不带区号 -->
<view class="triangle borderBottom phoneNumberInput input_box"
<!-- <view class="triangle borderBottom phoneNumberInput input_box"
:clasfs="[type == 1000 ? 'left_triangle': 'right_triangle']">
<input type="number" v-model="phone" @input="onInput" placeholder="请输入您的手机号" placeholder-class="grey" />
</view>
</view> -->
<view class="input_tit" v-if="type == 1000">密码</view>
<view class="input_box" v-if="type == 1000">
@@ -190,16 +195,8 @@
Content: ''
},
quShow: false,
quCodeList: [{
value: '1',
text: '江'
},
{
value: '2',
text: '湖'
}
],
quCode: null,
quCodeList: [], // 国家区域码
quCode: 86,
};
},
@@ -216,11 +213,43 @@
// #endif
},
//页面显示
onShow() {},
onShow() {
this.getCountyCode()
},
//方法
methods: {
...mapMutations(['setUserInfo']),
...mapMutations(['setHealthMes']),
// 获取国家区域编码
getCountyCode() {
$http.request({
url: "book/baseArea/getAllBaseArea",
method: "POST", // POST、GET、PUT、DELETE具体说明查看官方文档
data: {},
header: { //默认 无 说明:请求头
'Content-Type': 'application/json'
},
})
.then(res => {
// console.log(res,'区域码')
if (res.code == 0 && res.baseAreas.length > 0) {
// this.quCodeList = res.baseAreas
this.quCodeList = res.baseAreas.map(item => {
let obj = {
'text': item.title,
'value': item.code,
}
return obj
})
// console.log('改变格式后',this.quCodeList)
} else {
this.quCodeList = []
// this.totalPage = 0
}
}).catch(e => {
console.log(e, 'e')
});
},
quChange(e) {
console.log(e, 'e')
},
@@ -294,12 +323,15 @@
});
return;
}
if (!this.$base.phoneRegular.test(this.phone)) {
uni.showToast({
title: '手机格式不正确',
icon: 'none'
});
return;
if (this.quCode == null || this.quCode == 86) { // 如果没选择国家code默认是中国大陆
if (!this.$base.phoneRegular.test(this.phone)) {
uni.showToast({
title: '手机格式不正确',
icon: 'none'
});
return;
}
console.log(this.quCode, '选择的区段')
}
if (!this.agree) {
uni.showToast({
@@ -312,6 +344,7 @@
this.$http
.get('book/user/sms/sendcode', {
phone: this.phone,
areaCode: this.quCode,
type: 2000
})
.then(res => {
@@ -339,12 +372,14 @@
});
return;
}
if (!this.$base.phoneRegular.test(this.phone)) {
uni.showToast({
title: '手机格式不正确',
icon: 'none'
});
return;
if (this.quCode == null || this.quCode == 86) {
if (!this.$base.phoneRegular.test(this.phone)) {
uni.showToast({
title: '手机格式不正确',
icon: 'none'
});
return;
}
}
let httpData = {};
if (this.type == 2000) {
@@ -635,10 +670,10 @@
</script>
<style lang="scss" scoped>
@import '@/style/mixin.scss';
.myselect{height: 50rpx !important;}
.phoneNumberInput {
width: calc(100% - 130rpx);
width: 100%;
width: calc(100% - 160rpx);
// width: 100%;
height: 67rpx;
input {
@@ -656,7 +691,8 @@
}
.quhao {
width: 120rpx;
height: 50rpx;
width: 180rpx;
}
.highlight {

BIN
static/audiostart.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

BIN
static/audiostop.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

BIN
static/bofang (1).png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
static/icon/home1-1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

BIN
static/icon/home2-1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

BIN
static/icon/home3-1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

BIN
static/icon/home4-1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

View File

@@ -14781,7 +14781,15 @@
"createDate": 1666867907000
},
{
"countyList": [],
"countyList": [
{
"regionCode": "441900",
"countyId": 8446,
"cityId": 949,
"countyName": "东莞市",
"createDate": 1699422943745
}
],
"regionCode": "441900",
"cityName": "东莞市",
"cityId": 949,
@@ -14789,7 +14797,15 @@
"createDate": 1666867907000
},
{
"countyList": [],
"countyList": [
{
"regionCode": "442000",
"countyId": 8447,
"cityId": 950,
"countyName": "中山市",
"createDate": 1699423000757
}
],
"regionCode": "442000",
"cityName": "中山市",
"cityId": 950,

BIN
static/zanting (1).png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

BIN
static/播放 (1).png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

BIN
static/暂停 (1).png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.