Merge branch 'xie_xuewei'

This commit is contained in:
@fawn-nine
2023-11-07 17:14:55 +08:00
27 changed files with 1990 additions and 37 deletions

327
pages/acupoint/acupoint.vue Normal file
View File

@@ -0,0 +1,327 @@
<template>
<view class="container">
<!-- 公共组件-每个页面必须引入 -->
<public-module></public-module> -->
<z-nav-bar title="穴位检索"></z-nav-bar>
<!-- <uni-search-bar @confirm="search" :focus="true" v-model="searchValue" @blur="blur" @focus="focus" @input="input"
@cancel="cancel" @clear="clear">
</uni-search-bar> -->
<view class="search_box">
<u-search placeholder="请输入穴位名" @focus="focus" @clear="clear" v-model="searchValue" @input="input" @blur="blur" @search="search"></u-search>
</view>
<view class="searchList" v-show="showSearchList">
<view class="itemBox" v-if="searchList.length > 0">
<view class="item" v-for="(item, index) in searchList" :key="index" @click="gotoDetail(item)">
{{item.title}}
</view>
</view>
<view v-else class="">
<u-divider text="未找到相关穴位哦~"></u-divider>
</view>
</view>
<view v-show="!showSearchList" class="contentBox">
<!-- <scroll-view class="scroll-view_H oneCateList" scroll-x="true" scroll-left="0"> -->
<view class="oneCateList flexbox">
<text :class="[curOneCateIndex == index ? 'cur' : '']" @click="setOneCateIndex(item,index)" v-for="(item, index) in oneCateList" :key="item.id">{{item.title}}</text>
</view>
<!-- </scroll-view> -->
<view class="grid twoCateList" v-if="twoCateList.length > 0">
<u-grid :col="3" border class="u-grid-list">
<u-grid-item v-for="(item, index) in twoCateList" :key="item.id" @click="setTwoCateIndex(item, index)">
<view :class="['grid-text',curTwoCateIndex == index ? 'cur' : '']">{{item.title}}</view>
</u-grid-item>
</u-grid>
</view>
<view class="titleList">
<u-grid :col="3" v-if="titleList.length > 0">
<u-grid-item v-for="(item, index) in titleList" :key="item.id" @click="gotoDetail(item)">
<view :class="['titleItem']">{{item.title}}</view>
</u-grid-item>
</u-grid>
<u-divider v-else text="暂无穴位数据哦~"></u-divider>
</view>
</view>
<!-- <view class="search_box flexbox" @click="">
<view class="search">
<text class="icon_search"></text>
<text class="prompt">请输入穴位名</text>
</view>
</view> -->
<music-play :playData="playData"></music-play>
<z-navigation></z-navigation>
</view>
</template>
<script>
import musicPlay from '@/components/music.vue'
import $http from '@/config/requestConfig.js';
export default {
data() {
return {
playData: {},
searchValue: '',
oneCateList: [], // 一级分类标题
twoCateList: [], // 二级分类标题
titleList:[], // 穴位标题
curOneCateIndex:0, // 当前选中的一级分类
curTwoCateIndex:0 , // 当前选中的二级分类
searchList:[], // 搜索结果数组
showSearchList: false,
}
},
onLoad() {
this.getCateList()
},
onHide() {
this.showSearchList = false
this.searchList = []
},
methods: {
// 穴位详情
gotoDetail(item){
uni.navigateTo({
url:"./acupointDetail?id=" + item.id
})
},
// 获取穴位名称
getTitles(id){
$http.request({
url: "book/point/getPointsByCategoryId",
method: "POST", // POST、GET、PUT、DELETE具体说明查看官方文档
data: {
// loadAnimate: 'none', // 请求加载动画
'pointCategoryId': id
},
header: { //默认 无 说明:请求头
'Content-Type': 'application/json'
},
}).then(res => {
console.log(res, '内容获取成功')
if (res.code == 0 && res.points.length > 0) {
this.titleList = res.points
} else {
this.titleList = []
}
}).catch(e => {
this.titleList = []
console.log(e)
})
},
setTwoCateIndex(item, index){
let id = item.id
this.curTwoCateIndex = index
this.getTitles(id)
},
setOneCateIndex(item, index){
let id = item.id
this.curOneCateIndex = index
this.curTwoCateIndex = 0
this.getTowCateList(id)
},
getTowCateList(id){
$http.request({
url: "book/point/getPointCategoryByPid",
method: "POST", // POST、GET、PUT、DELETE具体说明查看官方文档
data: {
loadAnimate: 'none', // 请求加载动画
'id': id
},
header: { //默认 无 说明:请求头
'Content-Type': 'application/json'
},
}).then(res => {
console.log(res, '二级分类获取成功')
if (res.code == 0 && res.category.length > 0) {
this.twoCateList = res.category
this.getTitles(this.twoCateList[0].id)
} else {
this.twoCateList = []
this.titleList = []
}
}).catch(e => {
this.twoCateList = []
this.titleList = []
console.log(e)
})
},
getCateList(id) {
id ? '' : id = 0
this.twoCateList = []
this.curTwoCateIndex = 0
// 0为获取顶级分类其他为搜索下级分类目前的逻辑顶级是写死的所以可能只会涉及到搜索第二级
$http.request({
url: "book/point/getPointCategoryByPid",
method: "POST", // POST、GET、PUT、DELETE具体说明查看官方文档
data: {
loadAnimate: 'none', // 请求加载动画
'id': id
},
header: { //默认 无 说明:请求头
'Content-Type': 'application/json'
},
}).then(res => {
console.log(res, '脉穴分类获取成功')
if (res.code == 0 && res.category.length > 0) {
this.oneCateList = res.category
this.getTowCateList(this.oneCateList[0].id)
} else {
this.oneCateList = []
}
}).catch(e => {
this.oneCateList = []
console.log(e)
})
},
getSearch(){
$http.request({
url: "book/point/searchPointList",
method: "POST", // POST、GET、PUT、DELETE具体说明查看官方文档
data: {
loadAnimate: 'none', // 请求加载动画
'keywords': this.searchValue
},
header: { //默认 无 说明:请求头
'Content-Type': 'application/json'
},
}).then(res => {
console.log(res, '搜索结果')
if (res.code == 0 && res.points.length > 0) {
this.searchList = res.points
}
}).catch(e => {
// this.titleList = []
this.searchList = []
console.log(e)
})
},
search(res) {
console.log(res,'res')
// uni.showToast({
// title: '搜索:' + res,
// icon: 'none'
// })
},
input(res) {
console.log('----input:', res)
if(res == ''){
this.searchList = []
}else{
this.getSearch()
}
},
clear(res) {
// uni.showToast({
// title: 'clear事件清除值为',
// icon: 'none'
// })
this.showSearchList = false
},
blur(res) {
if(res == ''){
this.showSearchList = false
this.searchList = []
}else{
this.getSearch()
}
},
focus(e) {
// uni.showToast({
// title: 'focus事件输出值为' + e.value,
// icon: 'none'
// })
this.showSearchList = true
},
// cancel(res) {
// uni.showToast({
// title: '点击取消,输入值为:' + res.value,
// icon: 'none'
// })
// }
},
onBackPress() {
// #ifdef APP-PLUS
plus.key.hideSoftKeybord();
// #endif
},
components: {
musicPlay
},
}
</script>
<style lang="scss" scoped>
.searchList{
.item{font-size: 28rpx; padding: 20rpx; border-bottom: 1px solid #dadbde; }
}
.scroll-view_H{background-color: #fff;white-space: nowrap;
padding:10rpx ; }
.contentBox {
.oneCateList{ justify-content: space-between;
text{ text-align: center;
display: inline-block; width: 32%; padding: 20rpx 0; font-size: 34rpx; border-radius: 10rpx;
}
.cur{background-color:#55aa7f; color: #fff; }
}
.twoCateList{
font-size: 28rpx; margin-top: 20rpx;
.grid-text{padding:30rpx 20rpx; text-align: center; }
.cur{
color: #55aa7f;
}
// .u-grid-list{border: 0.5px solid #dadbde;}
}
.titleList{font-size: 26rpx; margin-top: 20rpx; padding: 10rpx; border-radius: 10rpx; background-color: #f8f9fa;
.titleItem{padding: 20rpx 0; }
}
}
.container {
padding: 10rpx; height: 100vh;
background-color: #fff;
}
.search_box {
margin: 0 auto; overflow: hidden;
margin-top: 20rpx;
align-items: center;
width: calc(100% - 10px);
margin-top: 0;
margin-bottom: 40rpx;
.search {
height: 56upx;
display: flex;
width: 86%;
margin: 0 auto;
align-items: center;
padding: 0upx 40upx;
background-color: #fff;
border-radius: 20upx;
box-shadow: 0 0px 10px 1px #54a96633;
}
.prompt {
color: #838383;
font-size: 24rpx;
}
.icon_search {
background-image: url('@/static/icon/map_ic_search.png');
background-position: center center;
background-repeat: no-repeat;
background-size: cover;
width: 36upx;
height: 36upx;
margin-right: 20upx;
}
}
.flexbox {
display: flex;
}
</style>

View File

@@ -0,0 +1,159 @@
<template>
<view class="container">
<!-- 公共组件-每个页面必须引入 -->
<public-module></public-module>
<z-nav-bar :title="'穴位详情-' + acupointDetail.title"></z-nav-bar>
<view class="uni-margin-wrap" v-if="acupointDetail && acupointDetail.imageList.length > 0">
<swiper class="swiper" circular :indicator-dots="indicatorDots" :autoplay="autoplay" :interval="interval"
:duration="duration">
<swiper-item v-for="(item, index) in acupointDetail.imageList" :key="index">
<view class="swiper-item">
<image :src="item" mode="aspectFit"></image>
</view>
</swiper-item>
</swiper>
</view>
<view class="contentBox">
<view class="content">
<uni-section class="mb-10" titleFontSize="18px" title="穴位名称" type="line">
<view class="item">
{{acupointDetail.title}}
</view>
</uni-section>
<uni-section class="mb-10" titleFontSize="18px" title="别名" type="line">
<view class="item" v-if="acupointDetail.alias && acupointDetail.alias != ''">
{{acupointDetail.alias}}
</view>
<view class="item" v-else>
暂无
</view>
</uni-section>
<uni-section class="mb-10" titleFontSize="18px" title="所属经络" type="line">
<view class="item">
{{acupointDetail.meridian}}
</view>
</uni-section>
<uni-section class="mb-10" titleFontSize="18px" title="定位" type="line">
<view class="item">
{{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>
<view class="item" v-else>
暂无
</view>
</uni-section>
<uni-section class="mb-10" titleFontSize="18px" title="主治" type="line">
<view class="item">
{{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>
<view class="item" v-else>
暂无
</view>
</uni-section>
<uni-section class="mb-10" titleFontSize="18px" title="文献" type="line">
<view class="item" v-if="acupointDetail.literature && acupointDetail.literature != ''">
{{acupointDetail.literature}}
</view>
<view class="item" v-else>
暂无
</view>
</uni-section>
</view>
</view>
<music-play :playData="playData"></music-play>
<z-navigation></z-navigation>
</view>
</template>
<script>
import musicPlay from '@/components/music.vue'
import $http from '@/config/requestConfig.js';
export default {
data() {
return {
playData: {},
acupointDetail: {
imageList:[]
},
acupointId: null,
indicatorDots: true,
autoplay: true,
interval: 5000,
duration: 500
}
},
onLoad(e) {
this.acupointId = e.id
},
onShow() {
this.getDetail()
},
methods: {
// 穴位详情
getDetail() {
$http.request({
url: "book/point/getPointDetail",
method: "POST", // POST、GET、PUT、DELETE具体说明查看官方文档
data: {
// loadAnimate: 'none', // 请求加载动画
'pointId': this.acupointId
},
header: { //默认 无 说明:请求头
'Content-Type': 'application/json'
},
}).then(res => {
console.log(res, '内容获取成功')
if (res.code == 0) {
this.acupointDetail = res.point
}
}).catch(e => {
// this.titleList = []
console.log(e)
})
}
},
components: {
musicPlay
},
}
</script>
<style lang="scss" scoped>
.contentBox{padding-bottom: 20rpx;}
.mb-10{ margin-bottom: 10px;}
.content{font-size: 28rpx;}
.swiper-item{
image{margin: 0 auto; height:200rpx;}
}
.uni-margin-wrap{ margin-bottom: 20rpx; padding-top: 20rpx;
background-color: #fff;
}
.container {
padding: 10rpx;
// background-color: #fff;
.item{color: #666; padding:10rpx 20rpx; padding-bottom: 20rpx; line-height: 46rpx;}
}
.flexbox {
display: flex;
}
/deep/ .uni-section-header__decoration.line{background-color: #18bc37;}
</style>

View File

@@ -9,12 +9,34 @@
<view class="hehan">
<image src="../../static/icon/hehan.png" mode="aspectFit" class="icon_hua_1"></image>
</view>
<view class="search_box flexbox" @click="onPageJump('../peanut/searchFor')">
<view class="fiveIcon flexbox" >
<div class="item item1" @click="onPageJump('../acupoint/acupoint')">
<image src="../../static/icon/five1.png" mode="aspectFit" ></image>
<text>经穴检索</text>
</div>
<div class="item item1">
<image src="../../static/icon/five2.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">
<image src="../../static/icon/five5.png" mode="aspectFit"></image>
<text>吴门医述</text>
</div>
</view>
<!-- <view class="search_box flexbox" @click="onPageJump('../peanut/searchFor')">
<view class="search">
<text class="icon_search"></text>
<text class="prompt">请输入书名</text>
</view>
</view>
</view> -->
<!-- <view class="searBtn flexbox">
<text>搜索</text>
</view> -->
@@ -687,6 +709,12 @@
</script>
<style lang="scss" scoped>
@import '@/style/mixin.scss';
.fiveIcon{justify-content: space-between; text-align: center;
text{
font-size: 28rpx; color: #11a669;
}
image{width: 60rpx; height: 60rpx; margin: 0 auto; }
}
.hehan{width: 80%; margin: 10rpx auto;}
.zhekou{
.goodsName{margin-bottom: 20rpx;}

View File

@@ -16,9 +16,26 @@
<view class="title" :class="{ active: type == 1000 }" @click="type = 1000">密码登录</view> -->
</view>
<view class="input_tit">手机号</view>
<view class="input_box triangle" :clasfs="[type == 1000 ? 'left_triangle': 'right_triangle']">
<!-- 带区号 -->
<!-- <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>
<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 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 class="input_tit" v-if="type == 1000">密码</view>
<view class="input_box" v-if="type == 1000">
<input class="input_item" v-model="password" @input="onInput" :password="!isSee" placeholder="请输入密码"
@@ -46,7 +63,7 @@
<span class="highlight" @click="showXieyi('privacy')">隐私协议</span>
<!-- <text @click="onPageJump('/pages/user/protocol')">隐私协议</text>-->
</view>
</view>
<view class="btn_box">
<button @click="onSubmit" class="active" v-if="btnShow"> </button>
<button v-else> </button>
@@ -61,11 +78,11 @@
<image src="../../static/icon/ic_login_health.png" @click="onHealthLogin" mode="aspectFit"></image>
</view>
</view>
<view class="qie_huan" style="display: flex; justify-content: center;">
<view style="width: 30%;" @click="type = 1000" v-if="type == 2000">密码登录</view>
<view style="width:50%; display: flex; justify-content:space-between;" v-if="type == 1000">
<text @click="type = 2000">验证码登录</text>
<text @click="type = 2000">验证码登录</text>
<text v-if="type == 1000" @click="onPageJump('/pages/user/forget')">忘记密码</text>
<!-- <text @click="resetPassWord()">忘记密码</text> -->
</view>
@@ -102,9 +119,9 @@
<view @click="onSubmit_Health">确定</view>
</view>
</view>
</z-popup>
</z-popup>
<!-- #ifdef APP-PLUS -->
<!-- #ifdef APP-PLUS -->
<!-- <view class="third_party_login_box" v-if="isIos && system >= 13">6
<view class="third_party_title"><text>第三方登录</text></view>
<view class="third_party_content">
@@ -115,24 +132,24 @@
</view>
</view> -->
<!-- #endif -->
<u-popup :show="xieyiShow" :round="10" @close="xieyiShow=false">
<view class="tanchu">
<view class="dp_title">{{xieyi.title}}</view>
<view style="max-height: 1000rpx;overflow-y: scroll;">
<view class="dp_title">{{xieyi.title}}</view>
<view style="max-height: 1000rpx;overflow-y: scroll;">
<view v-html="xieyi.Content"></view>
</view>
</view>
</view>
</u-popup>
</view>
</view>
</template>
<script>
import $http from '@/config/requestConfig.js';
import md5 from '@/plugins/md5';
import localuserxieyi from '@/static/json/userAndyinsiP.json'
import localyinsixieyi from '@/static/json/yinsiP.json'
var clear;
@@ -167,11 +184,23 @@
health_phone: '',
health_password: '',
isSee_H: false,
xieyiShow : false,
xieyi:{
title:'',
Content:''
}
xieyiShow: false,
xieyi: {
title: '',
Content: ''
},
quShow: false,
quCodeList: [{
value: '1',
text: '江'
},
{
value: '2',
text: '湖'
}
],
quCode: null,
};
},
//第一次加载
@@ -192,23 +221,26 @@
methods: {
...mapMutations(['setUserInfo']),
...mapMutations(['setHealthMes']),
quChange(e) {
console.log(e, 'e')
},
// 修改密码
resetPassWord(){
resetPassWord() {
console.log('重置密码')
uni.navigateTo({
url: "/pages/home/shop/goodsDetail"
})
},
// 显示协议
showXieyi(str){
if(str == 'user'){
showXieyi(str) {
if (str == 'user') {
this.xieyi = localuserxieyi
}else{
} else {
this.xieyi = localyinsixieyi
}
//console.log(localuserxieyi)
this.xieyiShow = true
},
onPageJump(url) {
uni.navigateTo({
@@ -603,12 +635,39 @@
</script>
<style lang="scss" scoped>
@import '@/style/mixin.scss';
.highlight{color: $themeColor;}
.tanchu {
.phoneNumberInput {
width: calc(100% - 130rpx);
width: 100%;
height: 67rpx;
input {
font-size: 28rpx;
margin: 20rpx 0;
}
}
.borderBottom {
border-bottom: 1px solid #efeef4;
}
.flexbox {
display: flex;
}
.quhao {
width: 120rpx;
}
.highlight {
color: $themeColor;
}
.tanchu {
padding: 40rpx 30rpx 40rpx 30rpx;
position: relative;
.dp_title {
font-size: 32rpx;
margin-bottom: 50rpx;
@@ -616,10 +675,11 @@
text-align: center;
font-weight: bold;
}
}
.logo_bg {
background-image: url('@/static/icon/login_bg.png');
// background-position: center center;
@@ -771,6 +831,7 @@
.btn_box {
margin-top: 40rpx;
button {
font-size: 32rpx;
background-color: #e5e5e5;
@@ -921,10 +982,10 @@
}
}
}
.qie_huan{
.qie_huan {
font-size: 26rpx;
margin: 20rpx 0 0 0;
text-align: center;
}
</style>
</style>