Commit 75594927 by yuzhenWang

Merge branch 'feature-20250515wyz-修复bug' into 'dev'

Feature 20250515wyz 修复bug

See merge request !3
parents 963ad6ed 5d5d57f0
...@@ -2,9 +2,12 @@ ...@@ -2,9 +2,12 @@
import initApp from "@/util/router.js"; import initApp from "@/util/router.js";
import {interceptor} from "@/util/interceptor"; import {interceptor} from "@/util/interceptor";
import {baseURL,apiURL,cffpURL} from "@/environments/environment"; import {baseURL,apiURL,cffpURL} from "@/environments/environment";
import api from './api/api';
export default { export default {
onLaunch: function() { onLaunch: function() {
console.log('App Launch'); console.log('App Launch');
// 处理外部链接参数
this.handleExternalUrlParams();
// #ifdef APP-PLUS // #ifdef APP-PLUS
// uni.downloadFile({ // uni.downloadFile({
// url: '/cffpUpdate/__UNI__ED34740.wgt', // url: '/cffpUpdate/__UNI__ED34740.wgt',
...@@ -61,20 +64,128 @@ ...@@ -61,20 +64,128 @@
// #endif // #endif
interceptor(); interceptor();
initApp(); initApp();
// 检测设备类型
const systemInfo = uni.getSystemInfoSync()
const isIOS = systemInfo.platform === 'ios'
const isAndroid = systemInfo.platform === 'android'
const isIPad = systemInfo.model.toLowerCase().includes('ipad')
// 添加类名到body
if (isIOS) {
document.body.classList.add('ios-device')
}
if (isAndroid) {
document.body.classList.add('android-device')
}
if (isIPad) {
document.body.classList.add('ipad-device')
}
}, },
onShow: function() {3,
console.log('App Show') onShow: function(options) {
console.log('App Show', options);
// App平台从options获取参数
// #ifdef APP-PLUS
if(options && options.query) {
this.saveUrlParams(options.query);
}
// #endif
}, },
onHide: function() { onHide: function() {
console.log('App Hide') console.log('App Hide')
}, },
methods:{ methods: {
// 处理外部链接参数
handleExternalUrlParams() {
// #ifdef H5
this.handleH5UrlParams();
// #endif
// #ifdef APP-PLUS
this.handleAppUrlParams();
// #endif
},
// 处理H5平台的URL参数
handleH5UrlParams() {
const url = window.location.href;
if(url.indexOf('?') > -1) {
const queryString = url.split('?')[1];
const params = this.parseQueryString(queryString);
this.saveUrlParams(params);
}
},
// 处理App平台的URL参数
handleAppUrlParams() {
// 处理冷启动参数
plus.runtime.getProperty(plus.runtime.appid, (widgetInfo) => {
const args = plus.runtime.arguments;
if(args) {
const params = this.parseAppLaunchArgs(args);
this.saveUrlParams(params);
}
});
// 监听热启动事件
plus.runtime.addEventListener('newintent', (e) => {
const args = e.arguments;
if(args) {
const params = this.parseAppLaunchArgs(args);
this.saveUrlParams(params);
}
});
},
// 解析H5的查询字符串
parseQueryString(queryString) {
const params = {};
const pairs = queryString.split('&');
for(let i = 0; i < pairs.length; i++) {
const pair = pairs[i].split('=');
if(pair.length === 2) {
params[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1] || '');
}
}
return params;
},
// 解析App启动参数
parseAppLaunchArgs(args) {
// 处理 scheme://path?key=value 格式
if(args.indexOf('?') > -1) {
const queryString = args.split('?')[1];
return this.parseQueryString(queryString);
}
return {};
},
// 保存URL参数到本地存储
saveUrlParams(params) {
if(Object.keys(params).length > 0) {
console.log('获取到外部链接参数:', params);
// 使用uni.setStorageSync存储到本地
try {
if(params.addSystemType){
console.log('进来了');
uni.setStorageSync('addSystemType', params.addSystemType);
}
// // 可以在这里添加事件通知其他页面参数已准备好
// uni.$emit('externalParamsReady', params);
} catch(e) {
console.error('存储外部链接参数失败:', e);
}
}
}
} }
} }
</script> </script>
<style> <style>
@import "@/static/font/iconfont.css"; @import "@/static/font1/iconfont.css";
@import "@/static/font/iconfont.css";
/*每个页面公共css */ /*每个页面公共css */
@font-face { @font-face {
font-family: 'iconfont'; font-family: 'iconfont';
...@@ -93,16 +204,19 @@ ...@@ -93,16 +204,19 @@
} }
.container{ .container{
background-color: #FBFBFB; background-color: #FBFBFB;
min-height: 100vh; /* 使用视口高度 */
height: auto !important;
height: 100vh;
} }
.uni-popup .uni-popup__wrapper{ .uni-popup .uni-popup__wrapper{
margin: 30rpx!important; /* margin: 30rpx!important; */
} }
.richTextContent img{ .richTextContent img{
width: 100% !important; width: 100% !important;
} }
.popupContainer .uni-popup .uni-popup__wrapper{ .popupContainer .uni-popup .uni-popup__wrapper{
width: 80%; /* width: 80%;
border-radius: 20rpx; border-radius: 20rpx; */
} }
.container uni-slider{ .container uni-slider{
margin: 0; margin: 0;
...@@ -147,4 +261,11 @@ ...@@ -147,4 +261,11 @@
text-align: center; text-align: center;
line-height: 50rpx; line-height: 50rpx;
} }
.iconStyle{
color: rgba(51, 51, 51, 1);
font-size: 28rpx;
}
.commonTitle{
font-size: 30rpx;
}
</style> </style>
...@@ -6,8 +6,8 @@ ...@@ -6,8 +6,8 @@
<input class="uni-input" name="invitationCode" maxlength="11" placeholder="输入手机号" v-model="mobile" /> <input class="uni-input" name="invitationCode" maxlength="11" placeholder="输入手机号" v-model="mobile" />
</view> </view>
<view class="login-code"> <view class="login-code">
<input name="form.code" placeholder="输入验证码" v-model="code" type="number" maxlength="6" /> <input style="font-size: 26rpx;" name="form.code" placeholder="输入验证码" v-model="code" type="number" maxlength="6" />
<text style="width: 250rpx;" @click="sendMessage()" :class="{'grey':disabledSendBtn}">{{sendCode}}</text> <text style="width: 200rpx;text-align: right;" @click="sendMessage()" :class="{'grey':disabledSendBtn}">{{sendCode}}</text>
</view> </view>
<view class="agree"> <view class="agree">
<label class="radio" style="padding-right: 10rpx;"> <label class="radio" style="padding-right: 10rpx;">
...@@ -146,12 +146,13 @@ ...@@ -146,12 +146,13 @@
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.content-box { .content-box {
position: absolute; position: absolute;
// left:50%; left:50%;
left: 10%; // left: 10%;
top: 30%; top: 50%;
transform: translate(-50%,-50%);
width: 630rpx; width: 630rpx;
height: 500rpx; height: 500rpx;
background: #FFFFFF; background: #FFFFFF;
...@@ -162,6 +163,10 @@ ...@@ -162,6 +163,10 @@
.inputItem { .inputItem {
border-bottom: 2rpx solid #CECECE; border-bottom: 2rpx solid #CECECE;
padding: 20rpx; padding: 20rpx;
font-size: 28rpx;
.uni-input{
font-size: 26rpx;
}
} }
.file{ .file{
color: #20279B; color: #20279B;
...@@ -184,7 +189,7 @@ ...@@ -184,7 +189,7 @@
justify-content: space-between; justify-content: space-between;
border-bottom: 1px solid #CECECE; border-bottom: 1px solid #CECECE;
padding: 20rpx; padding: 20rpx;
font-size: 26rpx;
.grey { .grey {
font-size: 24rpx; font-size: 24rpx;
color: #CECECE; color: #CECECE;
...@@ -197,7 +202,7 @@ ...@@ -197,7 +202,7 @@
height: 100vh; height: 100vh;
top: 50%; top: 50%;
left: 50%; left: 50%;
transform: translate3d(-50%, -50%, 0); transform: translate(-50%, -50%);
/* width: -webkit-fill-available; /* width: -webkit-fill-available;
height: -webkit-fill-available; */ height: -webkit-fill-available; */
-webkit-backface-visibility: hidden; -webkit-backface-visibility: hidden;
...@@ -225,5 +230,6 @@ ...@@ -225,5 +230,6 @@
display: flex; display: flex;
justify-content: center; justify-content: center;
color: #FFFFFF; color: #FFFFFF;
font-size: 26rpx;
} }
</style> </style>
<template> <template>
<swiper class="swiper" circular :indicator-dots="indicatorDots" :autoplay="autoplay" :interval="interval" <swiper class="swiper" circular :indicator-dots="indicatorDots" :autoplay="autoplay" :interval="interval"
:duration="duration"> :duration="duration">
<swiper-item v-for="bannerItem in carouselList"> <swiper-item v-for="(bannerItem,index) in carouselList" :key="index">
<!-- <uni-link :href="bannerItem.destinationAddress?bannerItem.destinationAddress:'#'"> --> <!-- <uni-link :href="bannerItem.destinationAddress?bannerItem.destinationAddress:'#'"> -->
<image :src="bannerItem.filePath" mode="widthFix" @click="jumpUrl(bannerItem.destinationAddress)"></image> <image :src="bannerItem.filePath" mode="widthFix" @click="jumpUrl(bannerItem.destinationAddress)"></image>
<!-- </uni-link> --> <!-- </uni-link> -->
...@@ -31,23 +31,29 @@ ...@@ -31,23 +31,29 @@
if (!url) { if (!url) {
return false return false
} else { } else {
let index = url.indexOf(`${shareURL}/pages/`); const match = url.match(/fileId=([^&]*)/);
if (index != -1) { const fileId = match ? match[1] : null;
uni.navigateTo({ uni.navigateTo({
url: url.substring(index + 16, url.length) url: `/pages/courseDetail/courseDetail?fileId=${fileId}`
}) })
} else { // 原来的跳转逻辑,不明白为啥这样跳
// #ifdef H5 // let index = url.indexOf(`${shareURL}/pages/`);
window.location.href = url; // if (index != -1) {
// #endif // uni.navigateTo({
// #ifdef APP-PLUS // url: url.substring(index + 16, url.length)
uni.navigateTo({ // })
url: '/components/webview?url=' + url // } else {
// page.json定义的路径 传url 到webview界面去接收 实现跳转 // // #ifdef H5
}) // window.location.href = url;
//#endif // // #endif
} // // #ifdef APP-PLUS
// uni.navigateTo({
// url: '/components/webview?url=' + url
// // page.json定义的路径 传url 到webview界面去接收 实现跳转
// })
// //#endif
// }
} }
} }
...@@ -57,6 +63,6 @@ ...@@ -57,6 +63,6 @@
<style lang="scss"> <style lang="scss">
.swiper { .swiper {
height: 228rpx; height: 300rpx;
} }
</style> </style>
\ No newline at end of file
<template>
<view>
<view class="timeTitle">
<view class="" v-if="initDate" :style="{color:initDate =='请选择'?'gray':'',fontSize:initDate =='请选择'?'31rpx':''}">
<text :style="{fontSize:chooseTxt}">{{initDate}}</text>
<text class="iconfont icon-youjiantou iconStyle" ></text>
</view>
<view class="emptyTxt" v-else>
<text :style="{fontSize:placeholderTxt}">请选择</text>
<text class="iconfont icon-youjiantou iconStyle"></text>
</view>
</view>
<uni-popup ref="timePopup" type="bottom" :maskClick="false">
<view class="timeBox">
<view class="titleBox">
<view @click="cancle">
取消
</view>
<view style="color:#20279b;" @click="confirm">
确定
</view>
</view>
<picker-view :indicator-style="indicatorStyle" :value="value" @change="bindChange" class="picker-view">
<picker-view-column>
<view class="item" v-for="(item,index) in dataList" :key="index">
<view class="myItem" :class="{ 'selected': currentValue === index }">
{{item.name}}
</view>
</view>
</picker-view-column>
</picker-view>
</view>
</uni-popup>
</view>
</template>
<script>
import dataHandling from "@/util/dataHandling";
import dayjs from 'dayjs';
export default {
name:'CommonSelect',
props: {
timeData: {
type: Object
},
showValue: {
type: Number,
default: 0 // 添加默认值
},
visible: {
type: Boolean,
default: false
},
dataList: {
type: Array,
default: () => ([])
},
placeholderTxt:{
type:String,
default: '28rpx'
},
chooseTxt:{
type:String,
default: '28rpx'
},
},
data: function () {
return {
title: 'picker-view',
indicatorStyle: `height: 90rpx;`,
initDate:``,
currentValue:this.showValue || 0 // 初始化时使用props的值
}
},
watch: {
visible: {
deep: true,
handler(newVal) {
if(newVal) {
this.$refs.timePopup.open()
// 打开时确保value数组正确
this.value = [this.currentValue]
}
}
},
showValue: {
immediate: true, // 添加immediate确保初始化时也执行
handler(newVal) {
if(newVal !== undefined && newVal !== null&&newVal!==-1) {
this.currentValue = newVal
this.value = [newVal] // 同时更新value数组
// 更新显示的文本
if(this.dataList && this.dataList.length > 0) {
this.initDate = this.dataList[newVal].name
}
}
}
},
dataList: {
immediate: true,
handler(newVal) {
if(newVal && newVal.length > 0 && this.currentValue !== undefined&&this.currentValue!==-1) {
this.initDate = newVal[this.currentValue].name
}
}
}
},
created() {
// 初始化value数组
this.value = [this.currentValue]
},
methods: {
bindChange: dataHandling.debounce(function (e) {
const val = e.detail.value;
this.currentValue = val[0];
}, 50),
cancle(){
if( !this.initDate ){
this.currentValue = 0
}
this.$emit('close',false)
this.$refs.timePopup.close()
},
confirm(){
if(this.dataList && this.dataList.length > 0) {
this.initDate = this.dataList[this.currentValue].name
}
this.$refs.timePopup.close()
this.$emit('confirm', this.currentValue)
}
}
}
</script>
<style lang="scss" scoped>
::v-deep .uni-popup .uni-popup__wrapper{
margin: 0 !important;
}
// ::v-deep .uni-picker-view-indicator {
// background-color: rgba(32, 39, 155, 0.1);
// height: 50px;
// border-top: 1px solid #20279b;
// border-bottom: 1px solid #20279b;
// }
.timeTitle{
font-size: 35rpx;
.emptyTxt{
color: gray;
font-size: 31rpx;
display: flex;
align-items: center;
}
}
.timeBox{
width: 100%;
background-color: #fff;
border-radius: 10rpx 10rpx 0 0;
.titleBox{
display: flex;
align-items: center;
justify-content: space-between;
font-size: 35rpx;
padding: 20rpx 30rpx;
}
.picker-view {
width: 100%;
height: 600rpx;
margin-top: 20rpx;
}
.item {
text-align: center;
display: flex;
align-items: center;
justify-content: center;
.myItem {
padding: 10rpx;
border-radius: 10rpx;
color: #000;
transition: transform 0.2s ease;
&.selected {
transform: scale(1.05);
color: #20279b;
font-weight: 500;
}
}
}
}
</style>
\ No newline at end of file
...@@ -5,18 +5,18 @@ ...@@ -5,18 +5,18 @@
</view> </view>
<view class="courseDetailBox"> <view class="courseDetailBox">
<view class="title"> <view class="title">
<text style="overflow: hidden;text-overflow: ellipsis;white-space: nowrap;">{{title}}</text> <view style="overflow: hidden;text-overflow: ellipsis;white-space: nowrap;">{{title}}</view>
<!-- <text class="detailBtn" @click="viewDetail()" v-if="isNeedViewDetail">订单详情></text> --> <!-- <text class="detailBtn" @click="viewDetail()" v-if="isNeedViewDetail">订单详情></text> -->
</view> </view>
<view class="summaryBox" v-if="summaryBox"> <view class="summaryBox" v-if="summaryBox">
<text>{{summaryBox}}</text> <view class="text-wrap">{{summaryBox}}</view>
</view> </view>
<view class="dataBox" v-if="dataList"> <view class="dataBox" v-if="dataList">
<strong>{{dataList.coursePrice}}</strong> <view class="price" v-if="dataList.coursePrice != 0" >{{dataList.coursePrice}}</view>
<strong v-if="dataList.coursePrice == 0">免费</strong> <!-- <text v-if="dataList.coursePrice == 0">免费</text> -->
<text v-if="dataList.coursePrice != 0">{{dataList.salesNumber}}人购买</text> <text v-if="dataList.coursePrice != 0">{{dataList.salesNumber}}人购买</text>
</view> </view>
<view class="tagListBox" v-if="tagList || fileLecturerId"> <!-- <view class="tagListBox" v-if="tagList || fileLecturerId">
<template v-if="tagList"> <template v-if="tagList">
<view class="tagItem" v-for="tagItem in tagConcat(tagList.v1,tagList.v2)">{{tagItem}}</view> <view class="tagItem" v-for="tagItem in tagConcat(tagList.v1,tagList.v2)">{{tagItem}}</view>
</template> </template>
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
<view class="tagItem" v-for="tagItem in tagConcat(_tagList.v1,_tagList.v2)">{{tagItem}}</view> <view class="tagItem" v-for="tagItem in tagConcat(_tagList.v1,_tagList.v2)">{{tagItem}}</view>
</template> </template>
</view> </view> -->
</view> </view>
</view> </view>
</template> </template>
...@@ -101,36 +101,46 @@ ...@@ -101,36 +101,46 @@
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.itemContent { .itemContent {
box-sizing: border-box;
display: flex; display: flex;
justify-content: flex-start;
height: 100%; height: 100%;
width: 100%;
.thumbnailBox { .thumbnailBox {
width: 300rpx; box-sizing: border-box;
flex-basis: 300rpx;
margin-right: 26rpx; margin-right: 26rpx;
align-items: center; align-items: center;
width: 200rpx;
flex: 0 0 auto;
image { image {
max-width: 100%; width: 100%;
height: auto; height: auto;
} }
} }
.courseDetailBox { .courseDetailBox {
width: 100%; flex: 1;
color: #333; color: #333;
height: auto; height: auto;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
justify-content: space-between; justify-content: space-between;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
.title { .title {
// flex: 1;
display: flex; display: flex;
max-width: 260rpx; // max-width: 260rpx;
// justify-content: space-between; // width: 0;
// align-items: center; // flex-basis: 100rpx;
font-size: 32rpx; font-size: 32rpx;
// overflow: hidden;
// text-overflow: ellipsis;
// white-space: nowrap;
.detailBtn { .detailBtn {
font-size: 24rpx; font-size: 24rpx;
color: #4A4A4A; color: #4A4A4A;
...@@ -142,19 +152,32 @@ ...@@ -142,19 +152,32 @@
} }
.summaryBox { .summaryBox {
// overflow: hidden;
// text-overflow: ellipsis;
// white-space: nowrap;
width: 100%;
font-size: 24rpx; font-size: 24rpx;
// margin: 10rpx 0; // margin: 10rpx 0;
display: flex;
.text-wrap {
white-space: pre-wrap;
word-break: break-word;
}
text { text {
margin-right: 20rpx; margin-right: 20rpx;
} }
} }
.dataBox { .dataBox {
strong { display: flex;
flex-direction: row;
align-items: center;
.price {
width:150rpx;
color: #F15A1F; color: #F15A1F;
font-size: 30rpx; font-size: 30rpx;
margin: 10rpx 20rpx 10rpx 0; margin: 10rpx 20rpx 10rpx 0;
font-weight: 600;
} }
text { text {
......
<template> <template>
<view class="wrapper"> <view class="wrapper">
<view v-if="loginType=='resetpw'" @click="rpsdlogin()" class="psdlogin"> <view v-if="loginType=='resetpw' || goBack" @click="rpsdlogin()" class="psdlogin">
<image style="width: 40rpx;height: 40rpx;" src="../../static/rpsloging.png" mode=""></image> <view class="iconfont icon-youjiantou zuojiantou" style="top:18rpx;color: #fff;"></view>
<!-- <image style="width: 40rpx;height: 40rpx;" src="../../static/rpsloging.png" mode=""></image> -->
</view> </view>
<view class="logo"> <view class="logo">
<image :src="imgSrc" alt="logo" srcset="" class="iconBox" mode="widthFix"></image> <image :src="imgSrc" alt="logo" srcset="" class="iconBox" mode="widthFix"></image>
<view>欢迎登录使用{{companyName}}APP</view> <view>欢迎使用{{companyName}}</view>
</view> </view>
<view class="content"> <view class="content">
<view class="login_title"> <!-- <view class="login_title">
{{loginTypeName}} {{loginTypeName}}
</view> </view> -->
<form> <form>
<!-- <view class="inputItem" v-if="loginType==='register'">
<input class="uni-input" name="invitationCode" placeholder="输入邀请码(非必填)" v-model="invitation_code"/>
</view> -->
<view class="inputItem" v-if="loginType!=='agentlogin'"> <view class="inputItem" v-if="loginType!=='agentlogin'">
<input type="number" class="uni-input" name="mobileNo" placeholder="输入手机号" v-model="form.mobile" maxlength="11"/> <input type="number" class="uni-input" name="mobileNo" placeholder="输入手机号" v-model="form.mobile" maxlength="11"/>
</view> </view>
...@@ -23,7 +21,7 @@ ...@@ -23,7 +21,7 @@
</view> </view>
<view class="inputItem" v-if="loginType === 'codelogin' || loginType==='register' || loginType === 'resetpw'"> <view class="inputItem" v-if="loginType === 'codelogin' || loginType==='register' || loginType === 'resetpw'">
<input class="uni-input codeBtn" name="code" placeholder="输入验证码" v-model="form.code" type="number" maxlength="6"/> <input class="uni-input codeBtn" name="code" placeholder="输入验证码" v-model="form.code" type="number" maxlength="6"/>
<text @click="sendMessage()" :class="{'grey':disabledSendBtn}">{{sendCodeHtml}}</text> <text style="font-size: 28rpx;" @click="sendMessage()" :class="{'grey':disabledSendBtn}">{{sendCodeHtml}}</text>
</view> </view>
<view class="inputItem" v-if="loginType === 'pwlogin' || loginType==='register' || loginType==='agentlogin'"> <view class="inputItem" v-if="loginType === 'pwlogin' || loginType==='register' || loginType==='agentlogin'">
<input class="uni-input" type="text" name="password" placeholder="输入密码" v-if="!passwordFlag" v-model="form.password"/> <input class="uni-input" type="text" name="password" placeholder="输入密码" v-if="!passwordFlag" v-model="form.password"/>
...@@ -42,24 +40,25 @@ ...@@ -42,24 +40,25 @@
</view> </view>
</form> </form>
<view class="agree" v-if="loginType!='resetpw'"> <view class="agree" v-if="loginType!='resetpw'">
<label class="radio" ><radio @click="c_agreeFlag" :checked="agreeFlag" /></label> <label class="radio"><radio @click="c_agreeFlag" :checked="agreeFlag" /></label>
<text>已阅读并同意</text> <text>已阅读并同意</text>
<text class="file" @click="getFile(1)">服务协议</text> <text class="file" @click="getFile(1)">服务协议</text>
<text></text> <text></text>
<text class="file" @click="getFile(2)">隐私政策</text> <text class="file" @click="getFile(2)">隐私政策</text>
</view> </view>
<view class="login_btn" @click="loginInCheck()" v-if="loginType!='resetpw'"> <view class="login_btn" @click="loginInCheck()" v-if="loginType!='resetpw'">
{{loginType=='register'?'注册':'登录'}} <!-- {{loginType=='register'?'注册':'登录'}} -->
登录 / 注册
</view> </view>
<view class="login_btn" v-if="loginType=='resetpw'" @click="loginInCheck()"> <view class="login_btn" v-if="loginType=='resetpw'" @click="loginInCheck()">
保存 保存
</view> </view>
<view class="login_type" v-if="loginType!='resetpw'"> <!-- <view class="login_type" v-if="loginType!='resetpw'">
<text @click="getLoginType()">{{(loginType=='pwlogin' || loginType=='register')?'验证码登录':'密码登录'}}</text> <text @click="getLoginType()">{{(loginType=='pwlogin' || loginType=='register')?'验证码登录':'密码登录'}}</text>
<text v-if="loginType==='codelogin'" @click="loginType='register';loginTypeName='注册'">立即注册</text> <text v-if="loginType==='codelogin'" @click="loginType='register';loginTypeName='注册'">立即注册</text>
<text v-if="loginType!=='codelogin'" @click="loginType='resetpw';loginTypeName='重置密码'">忘记密码</text> <text v-if="loginType!=='codelogin'" @click="loginType='resetpw';loginTypeName='重置密码'">忘记密码</text>
</view> </view> -->
<view v-if="loginType!='resetpw'"> <!-- <view v-if="loginType!='resetpw'">
<view class="other_login"> <view class="other_login">
<text class="text_line"></text> <text class="text_line"></text>
<text style="margin: 0 40rpx;position: relative;top: 10rpx;">其他登录</text> <text style="margin: 0 40rpx;position: relative;top: 10rpx;">其他登录</text>
...@@ -67,9 +66,8 @@ ...@@ -67,9 +66,8 @@
</view> </view>
<view class="login_type"> <view class="login_type">
<text @click="loginType='visitor';initForm();loginIn(1)">游客</text> <text @click="loginType='visitor';initForm();loginIn(1)">游客</text>
<text @click="loginType = 'agentlogin';loginTypeName = '管理账号登录';">代理商</text>
</view> </view>
</view> </view> -->
</view> </view>
</view> </view>
</template> </template>
...@@ -91,6 +89,7 @@ ...@@ -91,6 +89,7 @@
//用户输入信息 //用户输入信息
form:{ form:{
mobile:null, mobile:null,
// code:'250106',
code:null, code:null,
password:null, password:null,
}, },
...@@ -101,16 +100,64 @@ ...@@ -101,16 +100,64 @@
agreeFlag:false, agreeFlag:false,
userId:null, userId:null,
imgSrc:companyInfo.companyLogo, imgSrc:companyInfo.companyLogo,
fileType:null fileType:null,
goBack:true
} }
}, },
methods: { methods: {
c_agreeFlag(){ c_agreeFlag(){
this.agreeFlag=!this.agreeFlag; this.agreeFlag=!this.agreeFlag;
}, },
rpsdlogin(){ // rpsdlogin(){
this.loginType= 'codelogin' // if(this.loginType== 'resetpw'){
}, // this.loginType= 'codelogin'
// return
// }else {
// // uni.navigateBack({ delta: 1 });
// const pages = getCurrentPages();
// console.log('pages',pages);
// if (pages.length > 1) {
// uni.navigateBack({ delta: 1 });
// }
// }
// },
rpsdlogin() {
if (this.loginType == 'resetpw') {
this.loginType = 'codelogin';
return;
}
this.loginType='visitor'
this.initForm()
uni.removeTabBarBadge({ index: 3 });
// 获取跳转来源(通过路由参数)
const pages = getCurrentPages();
const currentPage = pages[pages.length - 1];
const from = currentPage.options.from; // 获取 url 中的 from 参数
console.log('currentPage',currentPage);
// 从 TabBar 页跳转过来,用 switchTab 返回
if (from === 'index') {
uni.switchTab({
url:'/pages/index/index'
})
} else if (from === 'personalCenter') {
this.loginIn(1,'personalCenter')
// uni.switchTab({
// url:'/pages/personalCenter/personalCenter'
// })
} else if (pages.length > 1) {
// 从普通页跳转过来,且页面栈中有上一页,直接返回
uni.navigateBack({ delta: 1 });
this.loginIn(1,'')
}else {
// 默认情况(如直接打开登录页),跳转到首页
uni.switchTab({
url: '/pages/index/index'
});
}
},
getFile(type){ getFile(type){
uni.navigateTo({ uni.navigateTo({
url:`/components/clause/clause?type=${type}` url:`/components/clause/clause?type=${type}`
...@@ -154,7 +201,7 @@ ...@@ -154,7 +201,7 @@
} }
}, 1000); }, 1000);
}, },
loginIn(loginType){ loginIn(loginType,urlType){
uni.showLoading({ uni.showLoading({
title: '加载中...' title: '加载中...'
}); });
...@@ -169,9 +216,16 @@ ...@@ -169,9 +216,16 @@
uni.setStorageSync('cffp_userId',this.userId); uni.setStorageSync('cffp_userId',this.userId);
uni.setStorageSync('loginType',this.loginType); uni.setStorageSync('loginType',this.loginType);
uni.setStorageSync('uni-token', res.data['token']); uni.setStorageSync('uni-token', res.data['token']);
uni.switchTab({ if(urlType == 'personalCenter'){
url:'/pages/index/index' uni.switchTab({
}) url:'/pages/personalCenter/personalCenter'
})
}else {
uni.switchTab({
url:'/pages/index/index'
})
}
}else{ }else{
uni.showToast({ uni.showToast({
title: res['message'], title: res['message'],
...@@ -344,17 +398,20 @@ ...@@ -344,17 +398,20 @@
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.psdlogin{ .psdlogin{
margin: 40rpx; margin: 40rpx;
width: 40rpx; width: 40rpx;
height: 40rpx; height: 40rpx;
// background: url('../../static/rpsloging.png') no-repeat;
} }
.wrapper{ .wrapper{
background: #20279B; background: #20279B;
position: relative;
overflow: auto; overflow: auto;
height: 100vh; height:100vh;
padding-top: 50rpx;
box-sizing: border-box;
.logo{ .logo{
text-align: center; text-align: center;
color: #fff; color: #fff;
...@@ -375,7 +432,7 @@ ...@@ -375,7 +432,7 @@
padding: 40rpx 60rpx; padding: 40rpx 60rpx;
overflow: hidden; overflow: hidden;
margin-bottom: 30rpx; margin-bottom: 30rpx;
min-height: 65%; // min-height: 65%;
.login_title{ .login_title{
text-align: center; text-align: center;
font-size: 40rpx; font-size: 40rpx;
...@@ -385,12 +442,14 @@ ...@@ -385,12 +442,14 @@
.inputItem{ .inputItem{
position: relative; position: relative;
margin-bottom: 30rpx; margin-bottom: 30rpx;
font-size: 28rpx;
.codeBtn{ .codeBtn{
width: 70%; width: 70%;
} }
.uni-input{ .uni-input{
height: 80rpx; height: 80rpx;
line-height: 80rpx; line-height: 80rpx;
font-size: 28rpx;
} }
.uni-input:after{ .uni-input:after{
content: " "; content: " ";
...@@ -420,6 +479,10 @@ ...@@ -420,6 +479,10 @@
font-size: 28rpx; font-size: 28rpx;
color:#666; color:#666;
text-align: center; text-align: center;
.radio{
width: 30rpx;
height: 30rpx;
}
.file{ .file{
color: #20279B; color: #20279B;
text-decoration: none; text-decoration: none;
...@@ -427,22 +490,28 @@ ...@@ -427,22 +490,28 @@
} }
.login_btn{ .login_btn{
height: 100rpx; height: 100rpx;
line-height: 100rpx; // line-height: 100rpx;
text-align: center; // text-align: center;
display: flex;
align-items: center;
justify-content: center;
margin: 40rpx auto; margin: 40rpx auto;
color: #fff; color: #fff;
background: #20279B; background: #20279B;
border-radius: 80rpx; border-radius: 80rpx;
font-size: 28rpx;
} }
.login_type{ .login_type{
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
margin: 30rpx; margin: 30rpx;
font-size: 28rpx;
} }
.other_login{ .other_login{
text-align: center; text-align: center;
color: #20279B; color: #20279B;
position: relative; position: relative;
font-size: 28rpx;
.text_line{ .text_line{
display: inline-block; display: inline-block;
height: 1px; height: 1px;
......
...@@ -5,13 +5,13 @@ ...@@ -5,13 +5,13 @@
<view v-for="item in menuList.filter(v=>v.isShow)" :key="item.title" @click="goDetail(item)" <view v-for="item in menuList.filter(v=>v.isShow)" :key="item.title" @click="goDetail(item)"
class="liBox"> class="liBox">
<view class="infoBox"> <view class="infoBox">
<text>{{item.title}}</text> <text style="font-size: 28rpx;">{{item.title}}</text>
</view> </view>
<view class="iconBox"> <view class="iconBox">
<view class="" v-if="item.isType == 'text'"> <view class="" v-if="item.isType == 'text'">
<text>{{item.contentType}}</text> <text style="font-size: 28rpx;">{{item.contentType}}</text>
</view> </view>
<i v-else class="iconfont icon-youjiantou"></i> <i v-else class="iconfont icon-youjiantou iconStyle"></i>
</view> </view>
</view> </view>
</view> </view>
......
<template> <template>
<view class="container"> <view class="container" style="box-sizing: border-box;">
<view class="d-table"> <view class="d-table" style="box-sizing: border-box;">
<!-- <view class="d-box"> <!-- <view class="d-box">
<view class="d-td" v-for="item in datatitleList"> <view class="d-td" v-for="item in datatitleList">
<span class="">{{item}}</span> <span class="">{{item}}</span>
...@@ -15,15 +15,10 @@ ...@@ -15,15 +15,10 @@
<!-- 为了提高dom渲染效率,当list产生破坏性变动时(如删除其中一项,或者排序等)必须使用唯一确定的key,而不能使用index --> <!-- 为了提高dom渲染效率,当list产生破坏性变动时(如删除其中一项,或者排序等)必须使用唯一确定的key,而不能使用index -->
<block v-for="(item, i) in treeList" :key="item.id"> <block v-for="(item, i) in treeList" :key="item.id">
<view class="d-box" v-if="item.level === 0 || checkOpen(item.pids[item.pids.length - 1])"> <view class="d-box" v-if="item.level === 0 || checkOpen(item.pids[item.pids.length - 1])">
<!-- :class="`padding-left-${item.level * 5 + 10}`"-->
<view class="d-td"> <view class="d-td">
<view class="" style="display: flex;text-align: left;"> <view class="" style="display: flex;text-align: center;">
<!-- <view class="">
<uni-icons v-if="item.hasChildren && !treeList[0]" <!-- <view class="d-td" v-if="item.levelCode == 'B1'&& item.itemType == '1'"
:type="checkLazy(item.id) ? 'spinner-cycle' : !checkOpen(item.id) ? 'arrowright' : 'arrowdown'"
size="12"></uni-icons>
</view> -->
<view class="d-td" v-if="item.levelCode == 'B1'&& item.itemType == '1'"
@click="open(item, i)" :style="{'margin-left':(item.level * 20)+'rpx'}"> @click="open(item, i)" :style="{'margin-left':(item.level * 20)+'rpx'}">
<view class="" style="display: flex;"> <view class="" style="display: flex;">
<text>{{item.areaCenterName}}</text> <text>{{item.areaCenterName}}</text>
...@@ -33,11 +28,10 @@ ...@@ -33,11 +28,10 @@
</view> </view>
</view> </view>
</view> </view> -->
<view class="d-td" @click="open(item, i)" <!-- <view class="d-td" @click="open(item, i)"
v-else-if="item.levelCode == 'C3'&& item.itemType == '1'" v-else-if="item.levelCode == 'C3'&& item.itemType == '1'"
:style="{'margin-left':(item.level * 20)+'rpx'}"> :style="{'margin-left':(item.level * 20)+'rpx'}">
<!-- <text style="color: #FFFFFF;">{{item.areaCenterName}}</text> -->
<view class="" style="display: flex;"> <view class="" style="display: flex;">
<text>{{item.areaCenterName}}</text> <text>{{item.areaCenterName}}</text>
<view class="" style="width: 36rpx;height: 36rpx;margin-left: 5rpx; "> <view class="" style="width: 36rpx;height: 36rpx;margin-left: 5rpx; ">
...@@ -45,11 +39,10 @@ ...@@ -45,11 +39,10 @@
mode="widthFix"></image> mode="widthFix"></image>
</view> </view>
</view> </view>
</view> </view> -->
<view class="d-td" @click="open(item, i)" <!-- <view class="d-td" @click="open(item, i)"
v-else-if="item.levelCode == 'C2'&& item.itemType == '1'" v-else-if="item.levelCode == 'C2'&& item.itemType == '1'"
:style="{'margin-left':(item.level * 20)+'rpx'}"> :style="{'margin-left':(item.level * 20)+'rpx'}">
<!-- <text style="color: #FFFFFF;">{{item.areaCenterName}}</text> -->
<view class="" style="display: flex;"> <view class="" style="display: flex;">
<text>{{item.areaCenterName}}</text> <text>{{item.areaCenterName}}</text>
<view class="" style="width: 36rpx;height: 36rpx;margin-left: 5rpx;"> <view class="" style="width: 36rpx;height: 36rpx;margin-left: 5rpx;">
...@@ -57,9 +50,13 @@ ...@@ -57,9 +50,13 @@
mode="widthFix"></image> mode="widthFix"></image>
</view> </view>
</view> </view>
</view> </view> -->
<view class="d-td" @click="open(item, i)" v-else :style="{'margin-left':(item.level * 20)+'rpx'}"> <!-- @click="open(item, i)" -->
<text>{{item.name}}</text> <view class="d-td" :style="{'margin-left':(item.level * 20)+'rpx'}">
<text v-if="dataShowType == 1">{{item.parentName}}</text>
<view v-if="dataShowType == 2" style="text-align:center;">
<text >{{item.raiseTeamLeder}}</text>
</view>
</view> </view>
<!-- <view class="content-box-title-a" @click="open(item, i)" :style="{'margin-left':(item.level * 20)+'rpx'}"> <!-- <view class="content-box-title-a" @click="open(item, i)" :style="{'margin-left':(item.level * 20)+'rpx'}">
<text style="color: black;">{{item.name}}</text> <text style="color: black;">{{item.name}}</text>
...@@ -74,17 +71,16 @@ ...@@ -74,17 +71,16 @@
<text>{{item.name}}</text> <text>{{item.name}}</text>
</view> --> </view> -->
</view> </view>
<!-- <text v-else class=""></text> -->
<!-- </view> -->
</view> </view>
<view class="d-td" style="text-align: center;"> <view class="d-td" style="text-align: center;">
<text v-if="item.itemType == '2'">{{ item.levelName }}</text> <text v-if="dataShowType == 1">{{ item.name }}</text>
<text v-else></text> <text v-if="dataShowType == 2" style="margin-right: 30rpx;">{{item.raiseTime}}</text>
<!-- 原本的写法 -->
<!-- <text v-else></text> -->
</view> </view>
<view class="d-td" style="text-align: center;" v-if="dataShowType == 1">{{ item.referrer }}</view> <view class="d-td" style="text-align: center;" v-if="dataShowType == 1">{{ item.levelName }}</view>
<view class="d-td" style="text-align: center;" v-if="dataShowType == 2">{{ item.count }}</view> <!-- 原本的结构现隐藏 -->
<!-- <view class="d-td" style="text-align: center;" v-if="dataShowType == 2">{{ item.count }}</view> -->
</view> </view>
</block> </block>
</view> </view>
...@@ -125,9 +121,11 @@ ...@@ -125,9 +121,11 @@
}, },
name: 'lazy-tree', name: 'lazy-tree',
mounted() { mounted() {
this.list = this.dataList this.list = this.dataList
this.setTree(); this.setTree();
console.log('datatitleList',this.datatitleList);
console.log('dataList',this.dataList);
}, },
computed: {}, computed: {},
data() { data() {
...@@ -172,6 +170,7 @@ ...@@ -172,6 +170,7 @@
// }); // });
const list = this.deepClone(this.list); const list = this.deepClone(this.list);
this.treeList = this.treeToArray(list); this.treeList = this.treeToArray(list);
console.log('this.treeList',this.treeList);
}, },
async lazyLoad(name) { async lazyLoad(name) {
...@@ -346,7 +345,7 @@ ...@@ -346,7 +345,7 @@
}; };
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.content-box { .content-box {
background-color: #fff; background-color: #fff;
display: flex; display: flex;
...@@ -354,6 +353,8 @@ ...@@ -354,6 +353,8 @@
align-items: center; align-items: center;
// padding: 0 20rpx; // padding: 0 20rpx;
justify-content: space-between; justify-content: space-between;
box-sizing: border-box;
// width: 100%;
} }
.content-box-title { .content-box-title {
...@@ -366,17 +367,23 @@ ...@@ -366,17 +367,23 @@
} }
.d-box { .d-box {
background-color: #fff;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
// padding: 0 20rpx; padding: 20rpx 0;
font-size: 26rpx; font-size: 26rpx;
box-sizing: border-box;
border-bottom: 1px solid #F2F2F2;
.d-td { .d-td {
flex: 1; flex: 1;
align-items: center; align-items: center;
padding: 5rpx 10rpx; color: #333;
// padding: 5rpx 10rpx;
} }
} }
.d-box:last-child{
border: none;
}
.content-box-title-a { .content-box-title-a {
// flex: 1; // flex: 1;
// padding: 0 20rpx; // padding: 0 20rpx;
...@@ -432,7 +439,7 @@ ...@@ -432,7 +439,7 @@
display: flex; display: flex;
width: 100%; width: 100%;
justify-content: space-between; justify-content: space-between;
box-sizing: border-box;
.d-th { .d-th {
justify-content: center; justify-content: center;
flex: 1 flex: 1
......
<template> <template>
<view class="concent-footer"> <view class="concent-footer">
<view class="content-box"> <view class="content-box">
<view class="content-box-title" v-for="item in datatitleList"> <view class="content-box-title" v-for="(item,index) in datatitleList" :key="index">
<span class="title">{{item}}</span> <span class="title">{{item}}</span>
</view> </view>
</view> </view>
<!-- // 一级循环 --> <!-- // 一级循环 -->
<view class="content-sam-box" v-if="dataList && dataList.length > 0"> <view class="content-sam-box" v-if="dataList && dataList.length > 0">
<view class="" v-for="(pointItem,index) in dataList"> <view class="" v-for="(pointItem,index) in dataList" :key="index">
<view class="content-sa" style=" " v-if="felTyle == 'achievement'"> <view class="content-sa" style=" " v-if="felTyle == 'achievement'">
<view class="content-box-title" <view class="content-box-title"
style="display: flex;align-items: center;margin-left: 6rpx;flex: 1;"> style="display: flex;align-items: center;flex: 1;justify-content: center;">
<view <view
class="circle"
style="width: 30rpx;height: 30rpx;border-radius: 50%;"
:class="index == '0' ?'cornermarker': index == '1' ? 'cornermarkertwo' : index == '2' ? 'cornermarkerthree' : 'cornermarkerother'"> :class="index == '0' ?'cornermarker': index == '1' ? 'cornermarkertwo' : index == '2' ? 'cornermarkerthree' : 'cornermarkerother'">
<span style="font-size: 20rpx;line-height: 20rpx;">{{index + 1}}</span> <span style="font-size: 20rpx;line-height: 20rpx;">{{index + 1}}</span>
</view> </view>
<!-- <view class="cornermarkerthree"> <!-- <view class="cornermarkerthree">
<span>{{index + 1}}</span> <span>{{index + 1}}</span>
</view> --> </view> -->
<view style="margin-left: 8rpx;text-overflow: ellipsis; <view
overflow: hidden; class="dateTime"
white-space: nowrap;">{{pointItem.name }}</view> v-if="currentTitle == 4"
</view> >
{{pointItem.saleDate }}
</view>
<view
style="white-space: wrap;width: 100rpx;margin-left: 5rpx;"
v-if="currentTitle == '1' || currentTitle == '2'"
>
{{pointItem.name }}
</view>
</view>
<!-- <view class="content-box-title" style="text-overflow: ellipsis;overflow: hidden; <!-- <view class="content-box-title" style="text-overflow: ellipsis;overflow: hidden;
white-space: nowrap;max-width: 150rpx;"> white-space: nowrap;max-width: 150rpx;">
<span>{{pointItem.areaCenterName }}</span> <span>{{pointItem.areaCenterName }}</span>
...@@ -67,6 +78,10 @@ ...@@ -67,6 +78,10 @@
felTyle: { felTyle: {
type: String, type: String,
default: null default: null
},
currentTitle: {
type: String,
default: '1'
} }
}, },
name: "myteam-table", name: "myteam-table",
...@@ -174,7 +189,10 @@ ...@@ -174,7 +189,10 @@
} }
</script> </script>
<style scoped> <style scoped lang="scss">
.noListTip{
font-size: 28rpx;
}
.content-box { .content-box {
background-color: #fff; background-color: #fff;
display: flex; display: flex;
...@@ -185,15 +203,31 @@ ...@@ -185,15 +203,31 @@
.content-sa { .content-sa {
display: flex; display: flex;
// align-items: center;
} }
.content-box-title { .content-box-title {
padding: 5rpx 0; padding: 5rpx 0;
flex: 1; flex: 1;
display: flex;
align-items: center; align-items: center;
justify-content: center;
text-align: center; text-align: center;
border-bottom: 1rpx solid #F2F2F2; border-bottom: 1rpx solid #F2F2F2;
padding: 20rpx 0; padding: 20rpx 0;
font-size: 28rpx;
.circle{
display: flex;
align-items: center;
justify-content: center;
}
.dateTime{
width: 130rpx;
margin-left: 3rpx;
// text-overflow: ellipsis;
// overflow: hidden;
white-space: nowrap;
}
} }
......
...@@ -38,6 +38,7 @@ ...@@ -38,6 +38,7 @@
}else { }else {
return false return false
} }
console.log('maxDate',this.maxDate);
}, },
methods: { methods: {
bindDateChange: function(e) { bindDateChange: function(e) {
......
<template> <template>
<view class="search"> <view class="search">
<input class="searchInput" type="text" name="" id="" v-model="queryName" @confirm="searchBtn()"/> <input
class="searchInput"
type="text"
name=""
id=""
v-model="localQuery"
@confirm="searchBtn()"
@input="handleInput"
/>
<text class="iconfont icon-sousuo" @click="searchBtn()"></text> <text class="iconfont icon-sousuo" @click="searchBtn()"></text>
<text class="iconfont icon-xiaoxi"></text> <!-- <text class="iconfont icon-xiaoxi"></text>
<text class="system_msg" @click="jumpToSystemMsg()">{{messageUnreadCount}}</text> <text class="system_msg" @click="jumpToSystemMsg()">{{messageUnreadCount}}</text> -->
</view> </view>
</template> </template>
...@@ -11,19 +19,33 @@ ...@@ -11,19 +19,33 @@
import api from "../../api/api"; import api from "../../api/api";
import common from '../../common/common'; import common from '../../common/common';
export default{ export default{
props:['isSearch','userId'], props:['isSearch','userId', 'initialQuery'],
data(){ data(){
return { return {
messageUnreadCount:null, messageUnreadCount:null,
queryName:null queryName:null,
localQuery: this.initialQuery || '',
} }
}, },
name:'search', name:'search',
components:{}, components:{},
onLoad(options){ watch: {
this.queryName = options.queryName; initialQuery: {
immediate: true, // 立即触发
handler(newVal) {
this.localQuery = newVal || ''; // 处理 null/undefined
}
}
}, },
methods:{ methods:{
// 新增方法:允许父组件重置搜索词
resetSearch() {
this.localQuery = '';
},
handleInput(e) {
this.localQuery = e.detail.value;
},
jumpToSystemMsg(){ jumpToSystemMsg(){
if(this.userId){ if(this.userId){
uni.navigateTo({ uni.navigateTo({
...@@ -50,42 +72,55 @@ ...@@ -50,42 +72,55 @@
searchBtn(){ searchBtn(){
if(this.isSearch == 1){ if(this.isSearch == 1){
//掉查询 //掉查询
this.$emit("send",this.queryName) // this.$emit("send",this.queryName)
}else{ this.$emit("send", this.localQuery);
//有参数就掉查询否则直接跳转到课程列表页 }else {
if(this.queryName){ this.$emit("update:initialQuery", this.localQuery); // 新增
uni.setStorageSync('queryName',this.queryName) uni.setStorageSync('queryName', this.localQuery);
}
uni.switchTab({ uni.switchTab({
url:'/pages/courselist/courselist' url: '/pages/courselist/courselist'
}) });
} }
// else{
// //有参数就掉查询否则直接跳转到课程列表页
// if(this.queryName){
// uni.setStorageSync('queryName', this.localQuery);
// // uni.setStorageSync('queryName',this.queryName)
// }
// uni.switchTab({
// url:'/pages/courselist/courselist'
// })
// }
} }
}, },
mounted() { mounted() {
this.querySystemMessage(); // this.querySystemMessage();
} }
} }
</script> </script>
<style lang="scss"> <style lang="scss">
.search{ .search{
position: relative;
display: flex; display: flex;
margin: 30rpx auto; margin: 30rpx auto;
align-items: center; align-items: center;
justify-content: space-between;
background: linear-gradient(to right,#E6F5FC,#FDE9F2);
border-radius: 60rpx;
.searchInput{ .searchInput{
margin-right: 20rpx; margin-right: 20rpx;
width: 95%; width: 85%;
border-radius: 60rpx;
background: linear-gradient(to right,#E6F5FC,#FDE9F2);
padding: 15rpx; padding: 15rpx;
} }
.icon-sousuo{ .icon-sousuo{
font-size: 60rpx; font-size: 50rpx;
position: absolute; margin-right: 10rpx;
right: 80rpx;
top: 10rpx;
opacity: .7; opacity: .7;
} }
.icon-xiaoxi{ .icon-xiaoxi{
......
...@@ -11,7 +11,8 @@ ...@@ -11,7 +11,8 @@
:disabled="isClick" :disabled="isClick"
placeholder="请选择开户行" placeholder="请选择开户行"
/> />
<uni-icons @click="openDropdown" type="right" size="20" ></uni-icons> <text @click="openDropdown" class="iconfont icon-youjiantou iconStyle"></text>
</view> </view>
<!-- 下拉框 --> <!-- 下拉框 -->
<view v-if="showDropdown" class="dropdown"> <view v-if="showDropdown" class="dropdown">
......
...@@ -3,9 +3,23 @@ ...@@ -3,9 +3,23 @@
<view class="menu_content"> <view class="menu_content">
<view v-for="item in menuLists" :key="item.link" class="tabbar_item" :class="{'active':item.link == currentPage}" @click="navTo(item)"> <view v-for="item in menuLists" :key="item.link" class="tabbar_item" :class="{'active':item.link == currentPage}" @click="navTo(item)">
<view class="pic"> <view class="pic">
<view
<image v-if="item.link == currentPage" :src="'/static/tabbar/' + item.selectedIconPath + '.png'" mode="widthFix"></image> v-if="item.link == currentPage"
<image v-else :src="'/static/tabbar/' + item.iconPath + '.png'" mode="widthFix"></image> class="iconfont iconSize"
:class="`${item.selectedIconPath}`"
>
</view>
<view
v-else
class="iconfont iconSize"
:class="`${item.iconPath}`"
>
</view>
<view class="infoBody" v-if="item.link=='personalCenter'&&infoTotal>0">
{{infoTotal}}
</view>
<!-- <image v-if="item.link == currentPage" :src="'/static/tabbar/' + item.selectedIconPath + '.png'" mode="widthFix"></image>
<image v-else :src="'/static/tabbar/' + item.iconPath + '.png'" mode="widthFix"></image> -->
</view> </view>
<view class="name">{{item.name}}</view> <view class="name">{{item.name}}</view>
</view> </view>
...@@ -15,15 +29,15 @@ ...@@ -15,15 +29,15 @@
<script> <script>
export default { export default {
props: ['currentPage'], props: ['currentPage','infoTotal'],
name:"tabBar", name:"tabBar",
data() { data() {
return { return {
menuLists: [ menuLists: [
{key:1,name:'首页',iconPath:'home',selectedIconPath:'home_active',link:'index'}, {key:1,name:'首页',iconPath:'icon-shouye16',selectedIconPath:'home_active',link:'index'},
{key:2,name:'SFP智能财策',iconPath:'sfp',selectedIconPath:'sfp_active',link:'product'}, {key:2,name:'金融工具',iconPath:'icon-jurassic_toolkit',selectedIconPath:'sfp_active',link:'product'},
{key:3,name:'CFFP认证',iconPath:'cffp',selectedIconPath:'cffp_active',link:'courselist'}, {key:3,name:'产品中心',iconPath:'icon-pinzhishangpinhuichang',selectedIconPath:'cffp_active',link:'courselist'},
{key:4,name:'我的',iconPath:'my',selectedIconPath:'my_active',link:'personalCenter'}, {key:4,name:'我的',iconPath:'icon-gerenzhongxin',selectedIconPath:'my_active',link:'personalCenter'},
] ]
} }
}, },
...@@ -40,6 +54,7 @@ ...@@ -40,6 +54,7 @@
} }
}, },
mounted() { mounted() {
console.log('info',this.infoTotal);
} }
} }
</script> </script>
...@@ -57,17 +72,41 @@ ...@@ -57,17 +72,41 @@
font-size: 24rpx; font-size: 24rpx;
transform: translateX(-50%); transform: translateX(-50%);
box-sizing: border-box; box-sizing: border-box;
padding: 5rpx 25rpx 115rpx 25rpx; padding: 20rpx 25rpx 100rpx 25rpx;
.menu_content{ .menu_content{
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-around; justify-content: space-around;
.tabbar_item{
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.pic{ .pic{
width: 60rpx; position: relative;
// width: 60rpx;
margin: 0 auto; margin: 0 auto;
.infoBody{
box-sizing: border-box;
text-align: center;
position: absolute;
top: -28%;
right: -61%;
width: 33rpx;
height: 33rpx;
background-color: rgba(212, 48, 48, 1);
color: #fff;
border-radius: 50%;
line-height: 30rpx;
}
.iconSize{
font-size: 40rpx;
}
} }
.name{ .name{
text-align: center;
// text-align: center;
font-size: 26rpx; font-size: 26rpx;
color: #666; color: #666;
} }
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<view class="loginPopupBox"> <view class="loginPopupBox">
<view class="loginPopupTitle"> <view class="loginPopupTitle">
<view> <view>
<text>预约课程</text> <text>产品预约</text>
</view> </view>
<view class="iconGuanbi"> <view class="iconGuanbi">
<text @click="canle" class="iconfont icon-guanbi"></text> <text @click="canle" class="iconfont icon-guanbi"></text>
......
<template> <template>
<web-view :src="url"></web-view>
<web-view :src="url" ></web-view>
</template> </template>
<script> <script>
...@@ -16,5 +18,9 @@ export default { ...@@ -16,5 +18,9 @@ export default {
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.box{
width: 100%;
height: auto;
}
</style> </style>
\ No newline at end of file
...@@ -17,6 +17,8 @@ const prod = { ...@@ -17,6 +17,8 @@ const prod = {
cffp_url:'https://app.ydhomeoffice.cn/appApi/cffp', cffp_url:'https://app.ydhomeoffice.cn/appApi/cffp',
share_url:'https://app.ydhomeoffice.cn/appYdhomeoffice', share_url:'https://app.ydhomeoffice.cn/appYdhomeoffice',
} }
// companyType: '1', cffp
// companyType: '2', appYdhomeoffice
let companyInfo = { let companyInfo = {
// companyType: '1', // companyType: '1',
// appName: 'CFFP财富中心', // appName: 'CFFP财富中心',
......
...@@ -33,24 +33,7 @@ ...@@ -33,24 +33,7 @@
"distribute" : { "distribute" : {
/* android打包配置 */ /* android打包配置 */
"android" : { "android" : {
"permissions" : [ "permissions" : [],
"<uses-feature android:name=\"android.hardware.camera\"/>", //相机
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>", //相机聚焦
"<uses-permission android:name=\"android.permission.CAMERA\"/>", //拍照权限 允许访问摄像头进行拍照
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>", // 使用闪光灯 允许访问闪光灯
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>", //获取网络状态 获取网络信息状态,如当前的网络连接是否有效
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>", //获取WiFi状态 获取当前WiFi接入的状态以及WLAN热点的信息
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>", //改变网络状态 改变网络状态如是否能联网
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>", // 改变WiFi状态 改变WiFi状态
"<uses-permission android:name=\"android.permission.INTERNET\"/>", //访问网络 访问网络连接,可能产生GPRS流量
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>", //挂载文件系统 挂载、反挂载外部文件系统
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>", //读取系统日志 读取系统底层日志
"<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" tools:node ='remove'/>", //精准的 (GPS) 位置
"<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" tools:node ='remove'/>", // (基于网络的) 大概位置
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\" tools:node ='remove'/>", //读取电话状态 访问电话状态
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>", //唤醒锁定 允许程序在手机屏幕关闭后后台进程仍然运行
"<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>" //写入外部存储 允许程序写入外部存储,如SD卡上写文件
],
"minSdkVersion" : 21, "minSdkVersion" : 21,
"schemes" : "cffpapp,hbuilder", "schemes" : "cffpapp,hbuilder",
"abiFilters" : [ "armeabi-v7a", "arm64-v8a", "x86" ], "abiFilters" : [ "armeabi-v7a", "arm64-v8a", "x86" ],
...@@ -186,7 +169,7 @@ ...@@ -186,7 +169,7 @@
"vueVersion" : "3", "vueVersion" : "3",
"h5" : { "h5" : {
"router" : { "router" : {
"base" : "/cffp/", "base" : "/appYdhomeoffice/",
"mode" : "history" "mode" : "history"
}, },
"devServer" : { "devServer" : {
......
{ {
"name": "验证码输入框", "name": "验证码输入框",
"version": "2.0", "version": "2.0",
"lockfileVersion": 3, "lockfileVersion": 1,
"requires": true, "requires": true,
"packages": { "dependencies": {
"": { "dayjs": {
"name": "验证码输入框", "version": "1.11.13",
"version": "2.0", "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz",
"dependencies": { "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg=="
"echarts": "^5.4.1",
"nanoid": "^4.0.0"
}
}, },
"node_modules/echarts": { "echarts": {
"version": "5.6.0", "version": "5.6.0",
"resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.6.0.tgz", "requires": {
"integrity": "sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==",
"dependencies": {
"tslib": "2.3.0", "tslib": "2.3.0",
"zrender": "5.6.1" "zrender": "5.6.1"
}
},
"node_modules/nanoid": {
"version": "4.0.2",
"resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-4.0.2.tgz",
"integrity": "sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"bin": {
"nanoid": "bin/nanoid.js"
}, },
"engines": {
"node": "^14 || ^16 || >=18"
}
},
"node_modules/tslib": {
"version": "2.3.0",
"resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
"integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
},
"node_modules/zrender": {
"version": "5.6.1",
"resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.6.1.tgz",
"integrity": "sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==",
"dependencies": { "dependencies": {
"tslib": "2.3.0" "tslib": {
"version": "2.3.0",
"resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
"integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
},
"zrender": {
"version": "5.6.1",
"resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.6.1.tgz",
"integrity": "sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==",
"requires": {
"tslib": "2.3.0"
}
}
} }
},
"nanoid": {
"version": "4.0.2"
} }
} }
} }
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
] ]
}, },
"dependencies": { "dependencies": {
"dayjs": "^1.11.13",
"echarts": "^5.4.1", "echarts": "^5.4.1",
"nanoid": "^4.0.0" "nanoid": "^4.0.0"
} }
......
...@@ -2,16 +2,16 @@ ...@@ -2,16 +2,16 @@
<view class="container"> <view class="container">
<view class="top"> <view class="top">
<text class="iconfont icon-youjiantou zuojiantou" @click="goBack()"></text> <text class="iconfont icon-youjiantou zuojiantou" @click="goBack()"></text>
<text>退单详情</text> <text style="font-size: 30rpx;">退单详情</text>
</view> </view>
<view class="returnCountsContainer"> <view class="returnCountsContainer">
<view class="left"> <view class="left">
<h3>{{courseInfoItem.orderStatusName}}</h3> <h3 style="font-size: 40rpx;">{{courseInfoItem.orderStatusName}}</h3>
<text>{{courseInfoItem.refundTime}}</text> <text style="font-size: 26rpx;">{{courseInfoItem.refundTime}}</text>
</view> </view>
<view class="right"> <view class="right">
<h3>{{courseInfoItem.refundAmount}}</h3> <h3>{{courseInfoItem.refundAmount}}</h3>
<text @click="goDetail()">到账说明</text> <text style="font-size: 26rpx;" @click="goDetail()">到账说明</text>
</view> </view>
</view> </view>
<!-- 退款进度 --> <!-- 退款进度 -->
...@@ -60,8 +60,8 @@ ...@@ -60,8 +60,8 @@
<text>退还积分:</text> <text>退还积分:</text>
<text>{{courseInfoItem.refundIntegralExchange}}</text> <text>{{courseInfoItem.refundIntegralExchange}}</text>
</view> </view>
<view> <view v-if="courseInfoItem.orderRemark">
<text>退款原因:</text> <text >退款原因:</text>
<text>{{courseInfoItem.orderRemark}}</text> <text>{{courseInfoItem.orderRemark}}</text>
</view> </view>
</view> </view>
...@@ -139,7 +139,7 @@ ...@@ -139,7 +139,7 @@
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.container{ .container{
height:100%; height:100%;
.top{ .top{
...@@ -246,7 +246,7 @@ ...@@ -246,7 +246,7 @@
display: flex; display: flex;
flex-direction: column; flex-direction: column;
margin-bottom: 20rpx; margin-bottom: 20rpx;
steps__column-title { .steps__column-title {
font-size: 30rpx; font-size: 30rpx;
color: #333; color: #333;
margin-bottom: 10rpx; margin-bottom: 10rpx;
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<view class="container"> <view class="container">
<view class="top"> <view class="top">
<text class="iconfont icon-youjiantou zuojiantou" @click="goBack()"></text> <text class="iconfont icon-youjiantou zuojiantou" @click="goBack()"></text>
<text>我的售后</text> <text style="font-size: 30rpx;">我的售后</text>
</view> </view>
<h4 class="noListTip" v-if="userCourses.length <=0 ">暂无售后</h4> <h4 class="noListTip" v-if="userCourses.length <=0 ">暂无售后</h4>
<view class="ulBox" v-if="userCourses.length > 0"> <view class="ulBox" v-if="userCourses.length > 0">
...@@ -60,7 +60,7 @@ ...@@ -60,7 +60,7 @@
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.container{ .container{
height: 100%; height: 100%;
.top{ .top{
......
...@@ -13,10 +13,9 @@ ...@@ -13,10 +13,9 @@
<text class="date">{{item.announcementAt}}</text> <text class="date">{{item.announcementAt}}</text>
<!-- <text class="readed dot"></text>s --> <!-- <text class="readed dot"></text>s -->
</view> </view>
<view class="announcement_des"> <!-- <view class="announcement_des">
{{matchReg(item.content).substring(0,15)}}... {{matchReg(item.content).substring(0,15)}}...
<!-- <rich-text :nodes="item.content"></rich-text> --> </view> -->
</view>
</view> </view>
<view class="to_detail" @click="goToDetail(item.id)"> <view class="to_detail" @click="goToDetail(item.id)">
<view>查看详情</view> <view>查看详情</view>
...@@ -44,10 +43,12 @@ ...@@ -44,10 +43,12 @@
api.announcementQuery({announcementTypeId:686}).then(res => { api.announcementQuery({announcementTypeId:686}).then(res => {
if (res['success']) { if (res['success']) {
this.announcementLists = res['data']['announcementInfoList']; this.announcementLists = res['data']['announcementInfoList'];
console.log('this.announcementLis',this.announcementLis);
} }
}); });
}, },
matchReg(str){ matchReg(str){
console.log('str',str);
let reg=/<\/?.+?\/?>/g; let reg=/<\/?.+?\/?>/g;
return str.replace(reg,''); return str.replace(reg,'');
}, },
...@@ -66,7 +67,7 @@ ...@@ -66,7 +67,7 @@
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.top{ .top{
display: flex; display: flex;
height: 80rpx; height: 80rpx;
...@@ -107,6 +108,7 @@ ...@@ -107,6 +108,7 @@
.announcement_title{ .announcement_title{
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center;
margin-bottom: 20rpx; margin-bottom: 20rpx;
padding-top: 20rpx; padding-top: 20rpx;
.title{ .title{
......
...@@ -20,6 +20,8 @@ ...@@ -20,6 +20,8 @@
<script> <script>
import api from "../../api/api"; import api from "../../api/api";
import common from '../../common/common'; import common from '../../common/common';
import {hshare} from '@/util/fiveshare';
import {shareURL} from "@/environments/environment";
export default{ export default{
data(){ data(){
return{ return{
...@@ -43,6 +45,7 @@ ...@@ -43,6 +45,7 @@
api.announcementQuery({id:this.id}).then((res)=>{ api.announcementQuery({id:this.id}).then((res)=>{
if(res['success']){ if(res['success']){
this.announcementInfo = res['data']['announcementInfoList'][0]; this.announcementInfo = res['data']['announcementInfoList'][0];
} }
}) })
}, },
...@@ -54,12 +57,40 @@ ...@@ -54,12 +57,40 @@
uni.navigateTo({ uni.navigateTo({
url:'../announcement/announcement' url:'../announcement/announcement'
}) })
} },
getshareData2(shareCode,jumptime,type=1) {
let newLink = shareURL + "/pages/announcement/announcement_detail?id=" + this.id
console.log('this.courseInfo',this.courseInfo);
let data = {
title: this.announcementInfo.title,
// desc: '加入我们开启学习之旅',
// desc:this.courseInfo.fileSynopsis,
link: newLink, //分享链接
imgUrl: this.courseInfo.displayImage, //图片
}
//安卓机型获取当前页面路径
let url = window.location.href.split('#')[0];
//ios机型获取当前页面路径
let ua = navigator.userAgent.toLowerCase();
let isWeixin = ua.indexOf('micromessenger') !== -1;
if (isWeixin) {
let isiOS = /(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent); //ios终端
if (isiOS && window.sessionStorage.getItem('firstEntryUrl')) {
url = window.sessionStorage.getItem('firstEntryUrl').split('#')[0];
}
}
// let url = window.location.href.split('#')[0]
hshare(data, url)
},
} }
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.top{ .top{
display: flex; display: flex;
height: 80rpx; height: 80rpx;
......
...@@ -106,8 +106,14 @@ ...@@ -106,8 +106,14 @@
<style lang="scss" scoped> <style lang="scss" scoped>
@import 'applyCommon.scss'; @import 'applyCommon.scss';
.container{
display: flex;
flex-direction: column;
}
.wrapper{ .wrapper{
flex: 1;
padding-top: 40rpx; padding-top: 40rpx;
background-color: #fff !important;
.icon-gou{ .icon-gou{
color: #78c06e; color: #78c06e;
font-size: 200rpx; font-size: 200rpx;
......
...@@ -33,10 +33,11 @@ ...@@ -33,10 +33,11 @@
<view class="content"> <view class="content">
<view class="contentDetail employ"> <view class="contentDetail employ">
<view class="contentItem yinhang"> <view class="contentItem yinhang">
<text>开户行</text> <text><text class="requireCode">*</text>开户行</text>
<view class="searchInput" > <view class="searchInput" >
<searchInput <searchInput
ref="searchInput"
v-if="bankList.length>0" v-if="bankList.length>0"
:allData="bankList" :allData="bankList"
@select="onSelect" @select="onSelect"
...@@ -56,13 +57,13 @@ ...@@ -56,13 +57,13 @@
:disabled="this.backForm.approvalStatus!= 0 && this.backForm.approvalStatus != 2" /> :disabled="this.backForm.approvalStatus!= 0 && this.backForm.approvalStatus != 2" />
</view> </view>
<view class="contentItem"> <view class="contentItem">
<text>银行卡号</text> <text><text class="requireCode">*</text>银行卡号</text>
<input class="form-control" placeholder="请输入银行卡号" type="number" maxlength="19" <input class="form-control" placeholder="请输入银行卡号" type="number" maxlength="19"
v-model="backForm.bankAccountId" auto-blur=true @blur="checkInput(backForm.bankAccountId)" v-model="backForm.bankAccountId" auto-blur=true @blur="checkInput(backForm.bankAccountId)"
:disabled="this.backForm.approvalStatus!= 0 && this.backForm.approvalStatus != 2" /> :disabled="this.backForm.approvalStatus!= 0 && this.backForm.approvalStatus != 2" />
</view> </view>
<view class="contentItem"> <view class="contentItem">
<text>确认卡号</text> <text><text class="requireCode">*</text>确认卡号</text>
<input class="form-control" placeholder="请再次确认卡号" type="number" v-model="sureBankAccountId" <input class="form-control" placeholder="请再次确认卡号" type="number" v-model="sureBankAccountId"
maxlength="19" auto-blur=true @blur="checkInput(sureBankAccountId)" maxlength="19" auto-blur=true @blur="checkInput(sureBankAccountId)"
:disabled="this.backForm.approvalStatus!= 0 && this.backForm.approvalStatus != 2" /> :disabled="this.backForm.approvalStatus!= 0 && this.backForm.approvalStatus != 2" />
...@@ -79,6 +80,7 @@ ...@@ -79,6 +80,7 @@
<script> <script>
import api from '@/api/api'; import api from '@/api/api';
import searchInput from '@/components/searchInput/searchInput.vue'; import searchInput from '@/components/searchInput/searchInput.vue';
import validate from '@/util/validate.js';
export default { export default {
data() { data() {
return { return {
...@@ -180,26 +182,52 @@ ...@@ -180,26 +182,52 @@
}, },
//去除输入空格 //去除输入空格
checkInput(str) { checkInput(str) {
if(!str) return
str = str.replace(/\s*/g, ""); str = str.replace(/\s*/g, "");
}, },
saveInfo() { saveInfo() {
this.$refs.searchInput.showDropdown = false
uni.showLoading({ uni.showLoading({
title: '加载中...' title: '加载中...'
}); });
if (this.backForm.approvalStatus == 0 || this.backForm.approvalStatus == 2) { if (this.backForm.approvalStatus == 0 || this.backForm.approvalStatus == 2) {
if (this.backForm.bankAccountId == '' || this.sureBankAccountId == '' || this.backForm if(!this.backForm.bankAccountOpening){
.bankAccountOpening == '') { uni.showToast({
title: '开户行不能为空',
duration: 2000,
icon: 'none'
})
return;
}
if(!this.backForm.bankAccountId ){
uni.showToast({ uni.showToast({
title: '银行卡号与开户行不能为空', title: '银行卡号不能为空',
duration: 2000, duration: 2000,
icon: 'none' icon: 'none'
}) })
return; return;
} }
if (this.backForm.bankAccountId || this.sureBankAccountId) { if(!this.sureBankAccountId ){
uni.showToast({
title: '确认卡号不能为空',
duration: 2000,
icon: 'none'
})
return;
}
// if (this.backForm.bankAccountId == '' || this.sureBankAccountId == '' || this.backForm
// .bankAccountOpening == '') {
// uni.showToast({
// title: '银行卡号与开户行不能为空',
// duration: 2000,
// icon: 'none'
// })
// return;
// }
if (this.backForm.bankAccountId && this.sureBankAccountId) {
if (Number(this.backForm.bankAccountId) != Number(this.sureBankAccountId)) { if (Number(this.backForm.bankAccountId) != Number(this.sureBankAccountId)) {
alert('卡号',this.backForm.bankAccountId)
alert('确认卡号',this.sureBankAccountId)
uni.showToast({ uni.showToast({
title: '两次银行卡号不一致,请重新输入', title: '两次银行卡号不一致,请重新输入',
duration: 2000, duration: 2000,
...@@ -208,14 +236,26 @@ ...@@ -208,14 +236,26 @@
return; return;
} }
} }
let obj = validate.validateBankCard(this.backForm.bankAccountId)
if(!obj.flag){
uni.showToast({
title: obj.msg,
duration: 2000,
icon: 'none'
})
return
}
uni.setStorageSync('backForm', this.backForm) uni.setStorageSync('backForm', this.backForm)
this.applyParam.bankAccountOpening = this.backForm.bankAccountOpening this.applyParam.bankAccountOpening = this.backForm.bankAccountOpening
this.applyParam.bankAccountId = this.backForm.bankAccountId this.applyParam.bankAccountId = this.backForm.bankAccountId
this.applyParam.approvalStatus = this.backForm.approvalStatus this.applyParam.approvalStatus = this.backForm.approvalStatus
this.applyParam = { this.applyParam = {
...this.applyParam, ...this.applyParam,
operatStep: 5, operatStep: 5,
} }
api.saveApplyInfo(this.applyParam).then((res) => { api.saveApplyInfo(this.applyParam).then((res) => {
if (res['success']) { if (res['success']) {
uni.navigateTo({ uni.navigateTo({
...@@ -257,6 +297,9 @@ ...@@ -257,6 +297,9 @@
.wrapper{ .wrapper{
flex: 1; flex: 1;
} }
.requireCode{
color: red;
}
} }
.form-control { .form-control {
min-width: 440rpx; min-width: 440rpx;
......
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
</view> </view>
<view class="content"> <view class="content">
<view class="ulBox"> <view class="ulBox">
<view class="liBox" v-for="contractItem in contractTermsList" @click="readContract(contractItem)"> <view class="liBox" v-for="(contractItem,index) in contractTermsList" :key="index" @click="readContract(contractItem)">
<text class="iconfont icon-yuanxingweixuanzhong" v-if="!contractItem.confirmStatus"></text> <text class="iconfont icon-yuanxingweixuanzhong" v-if="!contractItem.confirmStatus"></text>
<text class="iconfont icon-selected-copy" v-if="contractItem.confirmStatus"></text> <text class="iconfont icon-selected-copy" v-if="contractItem.confirmStatus"></text>
<text class="itemName"> {{contractItem.termName}}</text> <text class="itemName"> {{contractItem.termName}}</text>
...@@ -46,16 +46,12 @@ ...@@ -46,16 +46,12 @@
<view class="title"> <view class="title">
{{curTitle}} {{curTitle}}
</view> </view>
<scroll-view scroll-y style="height: 100%;"> <scroll-view scroll-y style="height:70vh" class="scrollBox">
<view class="contract" v-html="curContract"></view> <view class="contract" v-html="curContract"></view>
<!-- <view :class="nineTime == false?'agree':'gree'" @click="agree(curContractId)"> <!-- :style="btnStyle" -->
<text>同意</text>
<text style="margin-left: 10rpx;" v-if="nineTime">({{remainTimes}}s)</text>
</view> -->
<view class="agree" @click="agree(curContractId)" >同意</view> <view class="agree" @click="agree(curContractId)" >同意</view>
</scroll-view> </scroll-view>
</view> </view>
</template> </template>
...@@ -104,6 +100,11 @@ ...@@ -104,6 +100,11 @@
} }
}, 500) }, 500)
}, },
computed: {
btnStyle(){
return this.curContractId =='16'?'position: fixed;bottom: 0;':null
}
},
methods: { methods: {
goBack() { goBack() {
uni.navigateBack({ uni.navigateBack({
...@@ -233,7 +234,10 @@ ...@@ -233,7 +234,10 @@
<style lang="scss" scoped> <style lang="scss" scoped>
@import 'applyCommon.scss'; @import 'applyCommon.scss';
::v-deep .uni-scroll-view-content{
display: flex;
flex-direction: column;
}
.container { .container {
background-color: #FBFBFB; background-color: #FBFBFB;
} }
...@@ -242,14 +246,15 @@ ...@@ -242,14 +246,15 @@
height: 100%; height: 100%;
background-color: rgba(0, 0, 0, 0.5); background-color: rgba(0, 0, 0, 0.5);
top: 0; top: 0;
width: 100%;
} }
.toast { .toast {
position: fixed; position: fixed;
left: 0; left: 0;
right: 0; right: 0;
min-width: 320px; // min-width: 320px;
max-width: 640px; // max-width: 640px;
width: 100%; width: 100%;
margin: 0 auto; margin: 0 auto;
z-index: 1; z-index: 1;
...@@ -267,18 +272,24 @@ ...@@ -267,18 +272,24 @@
z-index: 2; z-index: 2;
animation: slowUp .5s ease both; animation: slowUp .5s ease both;
overflow: auto; overflow: auto;
.title { .title {
text-align: center; text-align: center;
font-weight: bold; font-weight: bold;
font-size: 16px; font-size: 28rpx;
padding: 10px; padding: 10px;
} }
.scrollBox{
display: flex;
flex-direction: column;
}
.contract { .contract {
// overflow: hidden;
padding: 10px; padding: 10px;
font-size: 20rpx; font-size: 15rpx;
padding-bottom: 50rpx;
flex-grow: 1;
} }
.agree { .agree {
...@@ -290,8 +301,11 @@ ...@@ -290,8 +301,11 @@
color: #fff; color: #fff;
font-size: 20px; font-size: 20px;
font-weight: bold; font-weight: bold;
position: relative; // position: absolute;
bottom: 0; // bottom: 0;
// position: fixed;
// bottom: 0;
} }
.gree { .gree {
width: 100%; width: 100%;
......
...@@ -29,12 +29,19 @@ ...@@ -29,12 +29,19 @@
</view> </view>
<!--这里必须用v-show否则打回重新签名时会获取不到dom元素--> <!--这里必须用v-show否则打回重新签名时会获取不到dom元素-->
<view class="signatureContent" v-show="!applyParam.personalSignOssPath"> <view class="signatureContent" v-show="!applyParam.personalSignOssPath">
<e-signature :style="{'width':'100vw','height':'80vh'}" :showCanvas="showCanvas" ref="signatureComponent" @sendImage="getImage" ></e-signature> <!-- :style="{'height':'80vh'}" -->
<e-signature :showCanvas="showCanvas" ref="signatureComponent" @sendImage="getImage" ></e-signature>
<view class="clearBox">
<view class="imgBox" >
<image src="../../static/clear.png" @click="clearImg" mode="widthFix"></image>
</view>
</view>
</view> </view>
<image :src="applyParam.personalSignOssPath" mode="widthFix" v-if="applyParam.personalSignOssPath"></image> <image :src="applyParam.personalSignOssPath" mode="widthFix" v-if="applyParam.personalSignOssPath"></image>
<view class="imgBox" style="margin-top: 20rpx;"> <!-- <view class="imgBox" style="margin-top: 20rpx;">
<image src="../../static/clear.png" @click="clearImg" mode="widthFix"></image> <image src="../../static/clear.png" @click="clearImg" mode="widthFix"></image>
</view> </view> -->
<view class="fixed" url="bank-card" @click="save()"> <view class="fixed" url="bank-card" @click="save()">
{{(this.applyParam.approvalStatus== 0 || this.applyParam.approvalStatus == 2)?'我自愿签订合伙人合同书':'下一步'}} {{(this.applyParam.approvalStatus== 0 || this.applyParam.approvalStatus == 2)?'我自愿签订合伙人合同书':'下一步'}}
</view> </view>
...@@ -214,11 +221,13 @@ ...@@ -214,11 +221,13 @@
// uni-page-wrapper{ // uni-page-wrapper{
// overflow: hidden!important; // overflow: hidden!important;
// } // }
.container{
background-color: #fff;
}
.signatureContent{ .signatureContent{
// padding: 0 36rpx 20rpx 26rpx;
background: #fff; background: #fff;
margin-top: 20rpx; margin-top: 20rpx;
height: 100%; height: auto;
position: relative; position: relative;
} }
.signature_action{ .signature_action{
...@@ -227,11 +236,20 @@ ...@@ -227,11 +236,20 @@
margin-top: 20rpx; margin-top: 20rpx;
uni-image{max-width: 120rpx;max-height: 120rpx;} uni-image{max-width: 120rpx;max-height: 120rpx;}
} }
.imgBox{ .clearBox{
position: absolute; display: flex;
top: 75%; align-items: center;
left: 40%; justify-content: center;
width: 120rpx; .imgBox{
height: 120rpx; display: flex;
align-items: center;
// position: absolute;
// bottom: -7%;
// left: 50%;
// transform: translateX(-50%);
width: 120rpx;
height: 120rpx;
}
} }
</style> </style>
\ No newline at end of file
...@@ -106,8 +106,8 @@ ...@@ -106,8 +106,8 @@
import api from '../../api/api'; import api from '../../api/api';
import { import {
CommonUpload, CommonUpload,
ckbigImg
} from '@/util/uploaderFile'; } from '@/util/uploaderFile';
// ckbigImg
export default { export default {
data() { data() {
return { return {
...@@ -175,7 +175,7 @@ ...@@ -175,7 +175,7 @@
}); });
}, },
clickImg(i) { clickImg(i) {
ckbigImg(i) // ckbigImg(i)
}, },
changeIndustry: function(e) { changeIndustry: function(e) {
this.industryIdx = e.detail.value; this.industryIdx = e.detail.value;
......
<template> <template>
<view class="container"> <view class="container">
<view class="classInfo" style="padding-top:80rpx"> <view style="flex: 1;">
<view class="iconfont icon-youjiantou zuojiantou" @click="goBack()" style="top:18rpx"> <view class="classInfo" style="padding-top:80rpx">
</view> <view class="iconfont icon-youjiantou zuojiantou" @click="goBack()" style="top:18rpx">
<course-item :thumbnailPath="courseInfoItem.displayImage" :title="courseInfoItem.fileTitle" :summaryBox="courseInfoItem.fileSynopsis" :dataList="{coursePrice:courseInfoItem.coursePrice,salesNumber:courseInfoItem.salesNumber}" :fileLecturerId="courseInfoItem.fileLecturerId"></course-item> </view>
</view> <course-item :thumbnailPath="courseInfoItem.displayImage" :title="courseInfoItem.fileTitle" :summaryBox="courseInfoItem.fileSynopsis" :dataList="{coursePrice:courseInfoItem.coursePrice,salesNumber:courseInfoItem.salesNumber}" :fileLecturerId="courseInfoItem.fileLecturerId"></course-item>
<!-- 订单支付明细 -->
<view class="payInfoBox">
<h4>订单支付明细</h4>
<view>
<text>积分抵扣:</text>
<text class="price">{{dropInfo.integralExchange}}</text>
</view>
<view>
<text>实际支付:</text>
<text>{{dropInfo.paymentAmount}}</text>
</view>
</view>
<!-- 退款明细 -->
<view class="dropDetailInfoBox">
<h4>退款明细</h4>
<view>
<text>支付违约金:<i class="iconfont icon-31tishi" @click="showModal()"></i></text>
<text class="price">{{dropInfo.breachCommission}}</text>
</view> </view>
<view> <!-- 订单支付明细 -->
<text>退款到账金额:</text> <view class="payInfoBox">
<text>{{dropInfo.refundFee}}</text> <h4 class="commonTitle">订单支付明细</h4>
<view>
<text class="commonTxt">积分抵扣:</text>
<text class="price">{{dropInfo.integralExchange}}</text>
</view>
<view>
<text class="commonTxt">实际支付:</text>
<text style="font-size: 26rpx;">{{dropInfo.paymentAmount}}</text>
</view>
</view> </view>
<view> <!-- 退款明细 -->
<text>退还积分:</text> <view class="dropDetailInfoBox">
<text>{{dropInfo.refundIntegralExchange}}</text> <h4 class="commonTitle">退款明细</h4>
<view>
<text class="commonTxt">支付违约金<i class="iconfont icon-31tishi iconStyle" @click="showModal()" style="margin-left: 3rpx;"></i></text>
<text class="price">{{dropInfo.breachCommission}}</text>
</view>
<view>
<text class="commonTxt">退款到账金额:</text>
<text style="font-size: 26rpx;">{{dropInfo.refundFee}}</text>
</view>
<view>
<text class="commonTxt">退还积分:</text>
<text class="commonTxt">{{dropInfo.refundIntegralExchange}}</text>
</view>
</view> </view>
</view> <!-- 退款原因 -->
<!-- 退款原因 --> <view class="dropInfoBox">
<view class="dropInfoBox"> <view class="dropBox">
<view class="dropBox"> <h4 class="commonTitle">退款原因</h4>
<h4>退款原因</h4> <view class="pickerBox" @click="showReason=true">
<view class="pickerBox"> <commonSelect
<picker @change="bindPickerChange" :value="dropIndex" :range="dropReasons" :range-key="'dropOptionName'"> :dataList="dropReasons"
<view class="uni-input" style="height: 80rpx;">{{dropReasons[dropIndex]['dropOptionName']}}</view> :visible="showReason"
</picker> :showValue="dropIndex"
<i class="iconfont icon-youjiantou"></i> placeholderTxt="26rpx"
chooseTxt="26rpx"
@confirm="bindPickerChange"
@close="showReason=false"
/>
</view>
</view> </view>
</view> </view>
</view> </view>
<!-- 提交申请 --> <!-- 提交申请 -->
<view class="submitApply" @click="submit()" > <view class="submitApply" @click="submit()" >
<text :class="{'gray':readonlyFlag}" >提交申请</text> <text :class="{'gray':readonlyFlag}" >提交申请</text>
...@@ -54,20 +62,10 @@ ...@@ -54,20 +62,10 @@
<view class="popup-content"> <view class="popup-content">
<view class="title"> <view class="title">
<text></text> <text></text>
<h3>违约金规则</h3> <h3 style="font-size: 28rpx;">违约金规则</h3>
<i class="iconfont icon-guanbi" @click="closePopup()"></i> <i class="iconfont icon-guanbi iconStyle" @click="closePopup()"></i>
</view>
<!-- <view class="">
1.购买后14天内未点开学习全额退费;
</view> </view>
<view class=""> <view class="">
<view class="">2.购买后15-30天未点开学习则:</view>
<view class="">假如:一个初级课程8000,报名费45 ,违约金比例:15%,那么违约金的费用一共是:8045*15% =1206.75; </view>
</view>
<view class="">
3.已点开课程学习或购买30天后不予退费。
</view> -->
<view class="">
1.购买后7天内未使用全额退费; 1.购买后7天内未使用全额退费;
</view> </view>
<view class=""> <view class="">
...@@ -84,19 +82,22 @@ ...@@ -84,19 +82,22 @@
<script> <script>
import api from "@/api/api"; import api from "@/api/api";
import courseItem from "@/components/courseItem/courseItem.vue"; import courseItem from "@/components/courseItem/courseItem.vue";
import commonSelect from '@/components/commonSelect/commonSelect.vue';
export default { export default {
components:{ components:{
courseItem courseItem,
commonSelect,
}, },
data() { data() {
return { return {
showReason:false,
courseInfoItem:{}, courseInfoItem:{},
fileId:null, fileId:null,
orderId:null, orderId:null,
userId: uni.getStorageSync('cffp_userId'), userId: uni.getStorageSync('cffp_userId'),
dropInfo:{}, dropInfo:{},
dropIndex:0, dropIndex:0,
dropReasons:[''], dropReasons:[{id:null,name:'请选择'}],
withdrawal: true, withdrawal: true,
readonlyFlag:false readonlyFlag:false
}; };
...@@ -107,8 +108,9 @@ ...@@ -107,8 +108,9 @@
delta: 1 delta: 1
}); });
}, },
bindPickerChange(e){ bindPickerChange(value){
this.dropIndex = e.detail.value; this.dropIndex = value;
this.showReason = false
}, },
showModal(){ showModal(){
this.$refs.popup.open() this.$refs.popup.open()
...@@ -138,7 +140,7 @@ ...@@ -138,7 +140,7 @@
submit(){ submit(){
if(!this.withdrawal){ if(!this.withdrawal){
uni.showToast({ uni.showToast({
title: '已退不能重新申请', title: '已退不能重新申请',
icon: 'none', icon: 'none',
duration: 2000 duration: 2000
}); });
...@@ -161,6 +163,8 @@ ...@@ -161,6 +163,8 @@
refundIntegralExchange:this.dropInfo.refundIntegralExchange, refundIntegralExchange:this.dropInfo.refundIntegralExchange,
refundReason:this.dropReasons[this.dropIndex]['dropOptionName'] refundReason:this.dropReasons[this.dropIndex]['dropOptionName']
} }
// console.log('param',param);
// return
api.unifiedRefund(param).then(res=>{ api.unifiedRefund(param).then(res=>{
if(res['success']){ if(res['success']){
uni.navigateTo({ uni.navigateTo({
...@@ -184,8 +188,14 @@ ...@@ -184,8 +188,14 @@
// 退款原因 // 退款原因
dropOptionsQuery(){ dropOptionsQuery(){
api.dropOptionsQuery({code:'REFUND_REASON'}).then(res=>{ api.dropOptionsQuery({code:'REFUND_REASON'}).then(res=>{
if(res['success']){ if(res['success']&&res['data']['dropMasterInfoList'][0]['dropOptionsInfoList']){
this.dropReasons = res['data']['dropMasterInfoList'][0]['dropOptionsInfoList']
let result = res['data']['dropMasterInfoList'][0]['dropOptionsInfoList'].map(item=>{
item.name = item.dropOptionName
return item
})
this.dropReasons = this.dropReasons.concat(result);
console.log('this.dropReasons',this.dropReasons );
} }
uni.hideLoading() uni.hideLoading()
}) })
...@@ -206,19 +216,26 @@ ...@@ -206,19 +216,26 @@
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.container{ .container{
padding: 10rpx 20rpx; padding: 10rpx 20rpx;
height: 100%; height: 100%;
position: relative; position: relative;
.commonTitle{
font-size: 26rpx;
}
.commonTxt{
font-size: 25rpx;
}
.classInfo{ .classInfo{
background-color: #fff; background-color: #fff;
padding: 20rpx 14rpx 14rpx 20rpx; padding: 20rpx 14rpx 14rpx 20rpx;
} }
.payInfoBox,.dropDetailInfoBox,.dropInfoBox{ .payInfoBox,.dropDetailInfoBox{
padding: 30rpx 14rpx 14rpx 20rpx; padding: 30rpx 14rpx 14rpx 20rpx;
margin-bottom: 10rpx; margin-bottom: 10rpx;
background-color: #fff; background-color: #fff;
border-radius: 10rpx;
view{ view{
margin-top: 22rpx; margin-top: 22rpx;
display: flex; display: flex;
...@@ -226,15 +243,17 @@ ...@@ -226,15 +243,17 @@
} }
text{ text{
&.price{ &.price{
font-size: 25rpx;
color: #FA6900; color: #FA6900;
} }
} }
} }
.submitApply{ .submitApply{
position: fixed; margin-top: 30rpx;
bottom: 20rpx; // position: fixed;
left: 0; // bottom: 0rpx;
// left: 0;
width: 100%; width: 100%;
text{ text{
display: flex; display: flex;
...@@ -246,6 +265,7 @@ ...@@ -246,6 +265,7 @@
justify-content: center; justify-content: center;
align-items: center; align-items: center;
margin: 0 auto; margin: 0 auto;
font-size: 28rpx;
} }
text.gray{ text.gray{
...@@ -254,10 +274,12 @@ ...@@ -254,10 +274,12 @@
} }
.popup-content{ .popup-content{
border-radius: 10rpx;
view{ view{
font-size: 30rpx; font-size: 28rpx;
color: #666; color: #666;
margin-bottom: 10rpx; margin-bottom: 10rpx;
} }
.title{ .title{
display: flex; display: flex;
...@@ -271,7 +293,10 @@ ...@@ -271,7 +293,10 @@
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: baseline; align-items: baseline;
height: 80rpx; background-color: #fff;
padding: 20rpx;
border-radius: 10rpx;
box-sizing: border-box;
.pickerBox{ .pickerBox{
display: flex; display: flex;
align-items: baseline; align-items: baseline;
......
...@@ -102,7 +102,7 @@ ...@@ -102,7 +102,7 @@
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.wrapper{ .wrapper{
padding: 60rpx 30rpx; padding: 60rpx 30rpx;
.content{ .content{
......
...@@ -52,7 +52,7 @@ ...@@ -52,7 +52,7 @@
}, },
methods:{ methods:{
dateFormat(val){ dateFormat(val){
return dataHandling.dateFormat(val,'yyyy-MM-dd') return dataHandling.dateFormat2(val,'yyyy-MM-dd')
}, },
goBack(){ goBack(){
uni.navigateBack({ uni.navigateBack({
...@@ -109,7 +109,7 @@ ...@@ -109,7 +109,7 @@
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.others{ .others{
padding:30rpx; padding:30rpx;
margin-top: 30rpx; margin-top: 30rpx;
......
...@@ -166,7 +166,7 @@ ...@@ -166,7 +166,7 @@
}) })
}, },
dateFormat(val){ dateFormat(val){
return dataHandling.dateFormat(val,'yyyy-MM-dd') return dataHandling.dateFormat2(val,'yyyy-MM-dd')
}, },
tokefu(){ tokefu(){
let url = 'http://q.url.cn/abkzV9?_type=wpa&qidian=true' // URL是要跳转的外部地址 作为参数 let url = 'http://q.url.cn/abkzV9?_type=wpa&qidian=true' // URL是要跳转的外部地址 作为参数
...@@ -184,7 +184,7 @@ ...@@ -184,7 +184,7 @@
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.container{ .container{
// padding-top: 40rpx; // padding-top: 40rpx;
.certifyIntro{ .certifyIntro{
......
...@@ -188,7 +188,7 @@ ...@@ -188,7 +188,7 @@
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.content { .content {
width: 100vw; width: 100vw;
padding-top: 80rpx; padding-top: 80rpx;
......
...@@ -140,6 +140,6 @@ ...@@ -140,6 +140,6 @@
} }
</script> </script>
<style> <style lang="scss" scoped>
</style> </style>
...@@ -45,7 +45,7 @@ ...@@ -45,7 +45,7 @@
<!-- 课程详情图 --> <!-- 课程详情图 -->
<view class="courseTitleContent"> <view class="courseTitleContent">
<view class="courseTitle"> <view class="courseTitle">
<view class="" style="width: 70%;"> <view class="" style="width: 100%;">
<h4>{{courseInfo.fileTitle}}</h4> <h4>{{courseInfo.fileTitle}}</h4>
</view> </view>
<view class="shareF"> <view class="shareF">
...@@ -63,8 +63,8 @@ ...@@ -63,8 +63,8 @@
</view> </view>
</view> </view>
<view class="dataBox"> <view class="dataBox">
<strong v-if="courseInfo.status==1 || courseInfo.status==2">{{Number(courseInfo.coursePrice).toFixed(2)}}</strong> <strong v-if="(courseInfo.status==1 || courseInfo.status==2 )&& courseInfo.coursePrice !== 0">{{Number(courseInfo.coursePrice).toFixed(2)}}</strong>
<strong v-if="(courseInfo.status==1 || courseInfo.status==2 )&& courseInfo.coursePrice == 0">免费</strong> <!-- <strong v-if="(courseInfo.status==1 || courseInfo.status==2 )&& courseInfo.coursePrice == 0">免费</strong> -->
<!-- <text v-if="courseInfo.status==2" style="color: #F15A1F;margin-right: 20rpx;"><i <!-- <text v-if="courseInfo.status==2" style="color: #F15A1F;margin-right: 20rpx;"><i
class="iconfont icon-yifukuan"></i>已购</text> --> class="iconfont icon-yifukuan"></i>已购</text> -->
<text v-if="courseInfo.coursePrice != 0">{{courseInfo.salesNumber}}{{showName}}</text> <text v-if="courseInfo.coursePrice != 0">{{courseInfo.salesNumber}}{{showName}}</text>
...@@ -75,12 +75,10 @@ ...@@ -75,12 +75,10 @@
<!-- 课程介绍,相关课程,讲师 --> <!-- 课程介绍,相关课程,讲师 -->
<view class="courseProBox"> <view class="courseProBox">
<!-- tab区域 --> <!-- tab区域 -->
<view class="tab"> <!-- <view class="tab">
<text :class="{'actived': tabType===1}" @click="switchTab(1)">详情</text> <text :class="{'actived': tabType===1}" @click="switchTab(1)">详情</text>
<!-- <text :class="{'actived': tabType===2}" @click="switchTab(2)">相关课程</text> -->
<!-- <text :class="{'actived': tabType===4}" @click="switchTab(4)">服务流程</text> -->
<text :class="{'actived': tabType===3}" @click="switchTab(3)">讲师</text> <text :class="{'actived': tabType===3}" @click="switchTab(3)">讲师</text>
</view> </view> -->
<!-- tabContent区域 --> <!-- tabContent区域 -->
<view class="tabContent"> <view class="tabContent">
<!-- 课程介绍 --> <!-- 课程介绍 -->
...@@ -200,6 +198,7 @@ ...@@ -200,6 +198,7 @@
}, },
data() { data() {
return { return {
addSystemType:'', //因为会从其他公众号跳转过来所以接受一下公众号的类型
systemType:companyInfo.systemType, systemType:companyInfo.systemType,
showName:'购买', showName:'购买',
successMessage:'', successMessage:'',
...@@ -412,6 +411,7 @@ ...@@ -412,6 +411,7 @@
} }
}, },
goBack() { goBack() {
console.log('返回');
uni.navigateBack({ uni.navigateBack({
delta: 1 delta: 1
}); });
...@@ -431,7 +431,8 @@ ...@@ -431,7 +431,8 @@
'&coursesharing=1' + '&serialsNo=' + nanoid() + '&shareCode=' + shareCode + '&shareUserId=' + '&coursesharing=1' + '&serialsNo=' + nanoid() + '&shareCode=' + shareCode + '&shareUserId=' +
this.userId + '&jumpUrl=' + jumptime + "&", this.userId + '&jumpUrl=' + jumptime + "&",
title: this.courseInfo.fileTitle, title: this.courseInfo.fileTitle,
summary: `加入我们开启学习之旅`, // summary: `加入我们开启学习之旅`,
summary: this.courseInfo.fileSynopsis,
imageUrl: this.courseInfo.displayImage, imageUrl: this.courseInfo.displayImage,
fileId: this.fileId, fileId: this.fileId,
shareCode: shareCode shareCode: shareCode
...@@ -578,6 +579,11 @@ ...@@ -578,6 +579,11 @@
} else { } else {
this.isRenderVideo = true; this.isRenderVideo = true;
} }
// #ifdef H5
const shareCode = nanoid() + this.userId
const jumptime = Date.parse(new Date()) / 1000
this.getshareData2(shareCode, jumptime,0)
// #endif
} }
}) })
}, },
...@@ -780,13 +786,17 @@ ...@@ -780,13 +786,17 @@
} }
}) })
}, },
getshareData2(shareCode,jumptime) { getshareData2(shareCode,jumptime,type=1) {
let newLink = type==1?shareURL + "/pages/courseDetail/courseDetail?fileId=" + this.fileId +
'&coursesharing=1' + '&serialsNo=' + nanoid() + '&shareCode=' + shareCode + '&shareUserId=' +
this.userId + '&jumpUrl=' + jumptime + "&"
: shareURL + "/pages/courseDetail/courseDetail?fileId=" + this.fileId
console.log('this.courseInfo',this.courseInfo);
let data = { let data = {
title: this.courseInfo.fileTitle, title: this.courseInfo.fileTitle,
desc: '加入我们开启学习之旅', // desc: '加入我们开启学习之旅',
link: shareURL + "/pages/courseDetail/courseDetail?fileId=" + this.fileId + desc:this.courseInfo.fileSynopsis,
'&coursesharing=1' + '&serialsNo=' + nanoid() + '&shareCode=' + shareCode + '&shareUserId=' + link: newLink, //分享链接
this.userId + '&jumpUrl=' + jumptime + "&", //分享链接
imgUrl: this.courseInfo.displayImage, //图片 imgUrl: this.courseInfo.displayImage, //图片
} }
//安卓机型获取当前页面路径 //安卓机型获取当前页面路径
...@@ -802,14 +812,19 @@ ...@@ -802,14 +812,19 @@
} }
} }
// let url = window.location.href.split('#')[0] // let url = window.location.href.split('#')[0]
hshare(data, url) hshare(data, url)
this.submitsuessc(shareCode,jumptime) if(type==1){
this.submitsuessc(shareCode,jumptime)
}
}, },
// H5 自定义分享 // H5 自定义分享
getshareData() { getshareData() {
let data = { let data = {
title: this.courseInfo.fileTitle, title: this.courseInfo.fileTitle,
desc: '加入我们开启学习之旅', // desc: '加入我们开启学习之旅',
desc:this.courseInfo.fileSynopsis,
link: window.location.href, //分享链接 link: window.location.href, //分享链接
imgUrl: this.courseInfo.displayImage, //图片 imgUrl: this.courseInfo.displayImage, //图片
} }
...@@ -820,7 +835,7 @@ ...@@ -820,7 +835,7 @@
JsApiTicketApi() { JsApiTicketApi() {
let WxConfigRequestVO = { let WxConfigRequestVO = {
url: window.location.href.split('#')[0], url: window.location.href.split('#')[0],
systemType: '1' systemType:this.addSystemType? this.addSystemType:'1'
} }
api.Wxshare(WxConfigRequestVO).then(res => { api.Wxshare(WxConfigRequestVO).then(res => {
jWeixin.config({ jWeixin.config({
...@@ -901,6 +916,9 @@ ...@@ -901,6 +916,9 @@
} }
}, },
onLoad(option) { onLoad(option) {
if(option.addSystemType){
this.addSystemType = option.addSystemType
}
if(this.systemType == 'IOS'){ if(this.systemType == 'IOS'){
this.showName = '预约'; this.showName = '预约';
this.show = false; this.show = false;
...@@ -932,6 +950,7 @@ ...@@ -932,6 +950,7 @@
if(!this.realName){ if(!this.realName){
this.queryInfo(); this.queryInfo();
} }
// this.switchTab(1); // this.switchTab(1);
}, },
onShow() { onShow() {
...@@ -942,6 +961,7 @@ ...@@ -942,6 +961,7 @@
this.tabType = 1; this.tabType = 1;
this.courseDetail(); this.courseDetail();
uni.setStorageSync('entryUrl',window.location.href.split('#')[0]) uni.setStorageSync('entryUrl',window.location.href.split('#')[0])
}, },
mounted() { mounted() {
let _this = this; let _this = this;
...@@ -993,7 +1013,13 @@ ...@@ -993,7 +1013,13 @@
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.container{
width: 100%;
height: auto;
box-sizing: border-box;
// padding: 20rpx;
}
page { page {
padding: 0; padding: 0;
} }
...@@ -1042,7 +1068,9 @@ ...@@ -1042,7 +1068,9 @@
} }
.courseTitleContent { .courseTitleContent {
height: 150rpx; box-sizing: border-box;
width: 100%;
height: auto;
background-color: #fff; background-color: #fff;
margin-bottom: 10rpx; margin-bottom: 10rpx;
padding: 20rpx 0rpx 20rpx 30rpx; padding: 20rpx 0rpx 20rpx 30rpx;
...@@ -1052,7 +1080,7 @@ ...@@ -1052,7 +1080,7 @@
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
margin-bottom: 16rpx; margin-bottom: 16rpx;
box-sizing: border-box;
h4 { h4 {
font-size: 40rpx; font-size: 40rpx;
} }
......
<template> <template>
<view class="pad"> <view class="pad">
<!--搜索组件--> <!--搜索组件-->
<search :isSearch="1" :userId = "userId" @send="getCourseList"></search> <search
:isSearch="1"
:userId = "userId"
@send="getCourseList"
:initialQuery="queryName"
></search>
<!--轮播组件--> <!--轮播组件-->
<view class="banner"> <view class="banner">
<view class="uni-margin-wrap"> <view class="uni-margin-wrap">
<carousel :carouselList="fileUploadItemCFFPList"></carousel> <carousel :carouselList="fileUploadItemCFFPList"></carousel>
</view> </view>
</view> </view>
<h4 v-if="cffpCourseInfos.length<=0" class="noListTip">暂无课程列表</h4> <h4 v-if="cffpCourseInfos.length<=0" class="noListTip">暂无产品列表</h4>
<view class="ulBox" v-if="cffpCourseInfos.length>0"> <view class="ulBox" v-if="cffpCourseInfos.length>0">
<view class="liBox" v-for="item in cffpCourseInfos" :key="item.fileId" @click="goDetail(item)"> <view class="liBox" v-for="item in cffpCourseInfos" :key="item.fileId" @click="goDetail(item)">
<course-item :thumbnailPath="item.displayImage" :title="item.fileTitle" :summaryBox="item.fileSynopsis" :dataList="{coursePrice:item.coursePrice,salesNumber:item.salesNumber}" :tagList="{v1:item.fileLecturerRanks,v2:item.fileLecturerName}"></course-item> <!-- :tagList="{v1:item.fileLecturerRanks,v2:item.fileLecturerName}" -->
<course-item
:thumbnailPath="item.displayImage"
:title="item.fileTitle"
:summaryBox="item.fileSynopsis"
:dataList="{coursePrice:item.coursePrice,salesNumber:item.salesNumber}"
></course-item>
</view> </view>
</view> </view>
</view> </view>
...@@ -43,9 +55,14 @@ ...@@ -43,9 +55,14 @@
carousel, carousel,
search search
}, },
onLoad(){
this.queryName = uni.getStorageSync('queryName'); onLoad() {
}, this.queryName = uni.getStorageSync('queryName') || '';
},
onShow() {
this.queryName = uni.getStorageSync('queryName') || '';
this.courseList();
},
methods:{ methods:{
goDetail(item){ goDetail(item){
uni.navigateTo({ uni.navigateTo({
...@@ -53,6 +70,7 @@ ...@@ -53,6 +70,7 @@
}); });
}, },
courseList(){ courseList(){
const param = { const param = {
queryName:this.queryName queryName:this.queryName
} }
...@@ -70,6 +88,7 @@ ...@@ -70,6 +88,7 @@
} }
}, },
getCourseList(res){ getCourseList(res){
console.log('res',res);
this.queryName = res; this.queryName = res;
this.courseList() this.courseList()
}, },
...@@ -97,13 +116,18 @@ ...@@ -97,13 +116,18 @@
} }
this.courseList(); this.courseList();
}, },
onTabItemTap() {
// 通过tabbar切换时清空storage
uni.removeStorageSync('queryName');
},
onHide() { onHide() {
this.queryName = ''
uni.removeStorageSync('queryName') uni.removeStorageSync('queryName')
} }
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.ulBox,.liBox{ .ulBox,.liBox{
padding-bottom: 30rpx; padding-bottom: 30rpx;
display: flex; display: flex;
...@@ -120,11 +144,13 @@ ...@@ -120,11 +144,13 @@
} }
.pad{ .pad{
padding:0 30rpx 20rpx 30rpx; padding:0 30rpx 20rpx 30rpx;
.banner { .banner {
border-radius: 20rpx; border-radius: 20rpx;
overflow: hidden; overflow: hidden;
margin-bottom: 30rpx;
.swiper{ .swiper{
height: 200rpx; height: 250rpx;
} }
} }
} }
......
...@@ -68,7 +68,7 @@ ...@@ -68,7 +68,7 @@
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.container{ .container{
height: 100%; height: 100%;
margin-bottom: 20rpx; margin-bottom: 20rpx;
......
...@@ -80,7 +80,7 @@ ...@@ -80,7 +80,7 @@
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.container{ .container{
height:100%; height:100%;
.top{ .top{
......
...@@ -63,7 +63,7 @@ ...@@ -63,7 +63,7 @@
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.container{ .container{
height: 100vh; height: 100vh;
background: url('../../static/app-plus/registerBg.png') 100% 100%; background: url('../../static/app-plus/registerBg.png') 100% 100%;
......
...@@ -2,12 +2,12 @@ ...@@ -2,12 +2,12 @@
<view class="content"> <view class="content">
<view class="logo"> <view class="logo">
<image :src="imgSrc" alt="logo" srcset="" class="iconBox" mode="widthFix"></image> <image :src="imgSrc" alt="logo" srcset="" class="iconBox" mode="widthFix"></image>
<view>欢迎登录使用{{areaName}}</view> <view>欢迎使用{{areaName}}</view>
</view> </view>
<view class="content-login"> <view class="content-login">
<view class="login_title"> <!-- <view class="login_title">
{{liginName}} {{liginName}}
</view> </view> -->
<view class="login-text"> <view class="login-text">
<text class="text">{{form.name}}</text> <text class="text">{{form.name}}</text>
</view> </view>
...@@ -16,8 +16,8 @@ ...@@ -16,8 +16,8 @@
</view> </view>
<view class="login-code"> <view class="login-code">
<!-- <view class="text" style="display: flex;justify-content: space-between;"> --> <!-- <view class="text" style="display: flex;justify-content: space-between;"> -->
<input name="form.code" placeholder="输入验证码" v-model="form.code" type="number" maxlength="6"/> <input style="font-size: 28rpx;" name="form.code" placeholder="输入验证码" v-model="form.code" type="number" maxlength="6"/>
<text @click="sendMessage()" style="width: 180rpx;" :class="{'grey':disabledSendBtn}">{{sendCodeHtml}}</text> <text @click="sendMessage()" style="width: 180rpx;text-align: right;font-size: 28rpx;" :class="{'grey':disabledSendBtn}">{{sendCodeHtml}}</text>
<!-- </view> --> <!-- </view> -->
</view> </view>
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
<text class="file" @click="getFile(2)">隐私政策</text> <text class="file" @click="getFile(2)">隐私政策</text>
</view> </view>
<view class="footer" @click="nextstep()"> <view class="footer" @click="nextstep()">
<text>下一步</text> <text>登录 / 注册</text>
</view> </view>
</view> </view>
...@@ -160,7 +160,7 @@ ...@@ -160,7 +160,7 @@
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.content { .content {
height: 100vh; height: 100vh;
background: #20279B; background: #20279B;
...@@ -189,7 +189,7 @@ ...@@ -189,7 +189,7 @@
padding: 40rpx 60rpx; padding: 40rpx 60rpx;
overflow: hidden; overflow: hidden;
margin-bottom: 30rpx; margin-bottom: 30rpx;
min-height: 65%; // min-height: 65%;
.login_title{ .login_title{
text-align: center; text-align: center;
font-size: 40rpx; font-size: 40rpx;
...@@ -199,6 +199,7 @@ ...@@ -199,6 +199,7 @@
width: 100%; width: 100%;
border-bottom: 1px solid #CECECE; border-bottom: 1px solid #CECECE;
padding: 20rpx 0; padding: 20rpx 0;
font-size: 28rpx;
.text{ .text{
padding: 20rpx; padding: 20rpx;
} }
......
<template> <template>
<view class="padding-top container"> <view class="padding-top container">
<text class="iconfont icon-youjiantou zuojiantou" @click="goBack()" style="top: 20rpx;"></text> <text class="iconfont icon-youjiantou zuojiantou" @click="goBack()" style="top: 20rpx;"></text>
<!-- tab选项 -->
<view class="tabTitle"> <view class="tabTitle">
<text :class="{'actived': tabType===1}" @click="switchTab(1)">基本信息</text> <text :class="{'actived': tabType===1}" @click="switchTab(1)">基本信息</text>
<text :class="{'actived': tabType===2}" @click="switchTab(2)">邀请信息</text> <text :class="{'actived': tabType===2}" @click="switchTab(2)">邀请信息</text>
...@@ -13,7 +13,14 @@ ...@@ -13,7 +13,14 @@
<view class="ulBox"> <view class="ulBox">
<view class="liBox"> <view class="liBox">
<text>姓名:</text> <text>姓名:</text>
<text><input v-model="dataForm.name" class="uni-input" maxlength="15" placeholder="姓名" /></text> <text>
<input
v-model="dataForm.name"
class="uni-input"
maxlength="10"
placeholder="姓名"
/>
</text>
</view> </view>
<view class="liBox"> <view class="liBox">
<text>手机号:</text> <text>手机号:</text>
...@@ -251,6 +258,7 @@ ...@@ -251,6 +258,7 @@
}, },
// 发起邀请事件 // 发起邀请事件
shareToggle() { shareToggle() {
//this.dataForm.partnerLevel = this.applyIdentity == 0 ? 'B1' : 'A1' //this.dataForm.partnerLevel = this.applyIdentity == 0 ? 'B1' : 'A1'
this.dataForm.partnerLevel = 'P1' this.dataForm.partnerLevel = 'P1'
this.dataForm.hasCrossDistrict = this.isCross == true ? '1' : '0' this.dataForm.hasCrossDistrict = this.isCross == true ? '1' : '0'
...@@ -267,6 +275,11 @@ ...@@ -267,6 +275,11 @@
}); });
return false return false
} }
if(!common.nameValid(this.dataForm.name)){
uni.showToast({title: '请填写真实姓名',duration: 2000,icon: 'none'})
this.dataForm.name = ''
return
}
if (common.mobileNoValid(this.dataForm.mobileNumber)) { if (common.mobileNoValid(this.dataForm.mobileNumber)) {
api.saveApplyInfo(this.dataForm).then(res => { api.saveApplyInfo(this.dataForm).then(res => {
if (res['success']) { if (res['success']) {
...@@ -368,7 +381,7 @@ ...@@ -368,7 +381,7 @@
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.container { .container {
position: relative; position: relative;
height: 100vh; height: 100vh;
...@@ -379,12 +392,14 @@ ...@@ -379,12 +392,14 @@
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-around; justify-content: space-around;
padding: 30rpx 60rpx 0; padding: 30rpx;
box-sizing: border-box;
text { text {
font-size: 26rpx;
&.actived { &.actived {
color: #333; color: #333;
border-bottom: 4rpx solid #20269B; border-bottom: 4rpx solid #20269B;
font-size: 24rpx;
} }
} }
} }
...@@ -414,13 +429,15 @@ ...@@ -414,13 +429,15 @@
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
font-size: 26rpx;
&:last-child { &:last-child {
border: none; border: none;
} }
.uni-input { .uni-input {
text-align: right; text-align: right;
font-size: 26rpx;
width: 400rpx;
} }
text { text {
...@@ -536,6 +553,7 @@ ...@@ -536,6 +553,7 @@
line-height: 50rpx; line-height: 50rpx;
border-radius: 30rpx; border-radius: 30rpx;
background: #20269B; background: #20269B;
font-size: 25rpx;
} }
.popup-footer { .popup-footer {
......
...@@ -161,7 +161,7 @@ ...@@ -161,7 +161,7 @@
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.certify_content { .certify_content {
background: #F1F6FF; background: #F1F6FF;
border-radius: 24rpx 24rpx 0 0; border-radius: 24rpx 24rpx 0 0;
......
...@@ -230,7 +230,7 @@ ...@@ -230,7 +230,7 @@
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.container{ .container{
height: 100%; height: 100%;
.dataCountBox{ .dataCountBox{
......
...@@ -100,7 +100,7 @@ ...@@ -100,7 +100,7 @@
}) })
}, },
dateFormat(val){ dateFormat(val){
return dataHandling.dateFormat(val,'yyyy-MM-dd') return dataHandling.dateFormat2(val,'yyyy-MM-dd')
}, },
// 状态 // 状态
statusInfo(val){ statusInfo(val){
...@@ -150,7 +150,7 @@ ...@@ -150,7 +150,7 @@
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.container{ .container{
position: relative; position: relative;
height: 100%; height: 100%;
......
...@@ -77,7 +77,7 @@ ...@@ -77,7 +77,7 @@
} }
}, },
dateFormat(val){ dateFormat(val){
return dataHandling.dateFormat(val); return dataHandling.dateFormat2(val);
}, },
viewDetail(item){ viewDetail(item){
uni.navigateTo({ uni.navigateTo({
...@@ -94,7 +94,7 @@ ...@@ -94,7 +94,7 @@
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.container{ .container{
position: relative; position: relative;
height: 100%; height: 100%;
......
...@@ -50,7 +50,7 @@ ...@@ -50,7 +50,7 @@
<h4>积分明细</h4> <h4>积分明细</h4>
</view> </view>
<view class="point_content_list"> <view class="point_content_list">
<view>课程大类</view> <view>产品名称</view>
<view>积分来源</view> <view>积分来源</view>
<view>获得积分</view> <view>获得积分</view>
<view>操作</view> <view>操作</view>
...@@ -78,7 +78,7 @@ ...@@ -78,7 +78,7 @@
maxDate:`${new Date().getFullYear()}-${new Date().getMonth() + 1}`, maxDate:`${new Date().getFullYear()}-${new Date().getMonth() + 1}`,
navList:[{name:'日积分',timeFlag:'D'},{name:'月积分',timeFlag:'M'},{name:'年积分',timeFlag:'Y'}], navList:[{name:'日积分',timeFlag:'D'},{name:'月积分',timeFlag:'M'},{name:'年积分',timeFlag:'Y'}],
timeFlag:'D', timeFlag:'D',
pointList:[{name:'课程大类',id:1,source:'销售收入',classify:'家组信托',score:100}], // pointList:[{name:'课程大类',id:1,source:'销售收入',classify:'家组信托',score:100}],
sumCommissionAmount:'',//总积分 sumCommissionAmount:'',//总积分
nowSumCommissionAmount:'', //当前(日月年)积分 nowSumCommissionAmount:'', //当前(日月年)积分
prePercent:'',//比前日、上月,上年多或少的百分比数据 prePercent:'',//比前日、上月,上年多或少的百分比数据
...@@ -175,7 +175,7 @@ ...@@ -175,7 +175,7 @@
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.container{ .container{
.top{ .top{
background: linear-gradient(179deg, #F8B588 0%, rgba(255,239,216,0.2) 100%); background: linear-gradient(179deg, #F8B588 0%, rgba(255,239,216,0.2) 100%);
......
...@@ -124,7 +124,8 @@ ...@@ -124,7 +124,8 @@
timeFlag: this.timeFlag, timeFlag: this.timeFlag,
commissionType:this.commissionType, commissionType:this.commissionType,
productType: this.productType, productType: this.productType,
queryType:this.commissionAmount<0?2:null queryType:this.commissionAmount<0?2:null,
queryPage:1
} }
// const param = { // const param = {
// isDtl: 1, // isDtl: 1,
...@@ -174,7 +175,7 @@ ...@@ -174,7 +175,7 @@
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.container{ .container{
.top{ .top{
padding: 30rpx; padding: 30rpx;
......
...@@ -3,10 +3,14 @@ ...@@ -3,10 +3,14 @@
<!-- 时间选择 --> <!-- 时间选择 -->
<view class="timeSelectContent"> <view class="timeSelectContent">
<text class="iconfont icon-youjiantou zuojiantou" @click="goBack()"></text> <text class="iconfont icon-youjiantou zuojiantou" @click="goBack()"></text>
<picker mode="date" :value="queryDate" :end="maxDate" fields="month" @change="bindDateChange"> <CommonTimePicker
<view class="uni-input">{{queryDate}}</view> :timeData="startDate"
</picker> :visible="showTime1"
<i class="iconfont icon-youjiantou xiajiantou"></i> @confirmDate="changeStartTime"
@closeTime="showTime1=false"
@click="showTime1=true"
/>
</view> </view>
<!-- 分享统计 --> <!-- 分享统计 -->
<view class="shareStatisticalContent"> <view class="shareStatisticalContent">
...@@ -49,17 +53,17 @@ ...@@ -49,17 +53,17 @@
</view> </view>
<view class="countsContent"> <view class="countsContent">
<view @click="goDetail(item.fileId,1)"> <view @click="goDetail(item.fileId,1)">
<i class="iconfont icon-zhuanfa"></i> <i class="iconfont icon-zhuanfa iconStyle"></i>
<text>分享</text> <text>分享</text>
<text>{{item.shareCount}}</text> <text>{{item.shareCount}}</text>
</view> </view>
<view @click="goDetail(item.fileId,2)"> <view @click="goDetail(item.fileId,2)">
<i class="iconfont icon-yidu"></i> <i class="iconfont icon-yidu iconStyle"></i>
<text>阅读</text> <text>阅读</text>
<text>{{item.readCount}}</text> <text>{{item.readCount}}</text>
</view> </view>
<view @click="goDetail(item.fileId,3)"> <view @click="goDetail(item.fileId,3)">
<i class="iconfont icon-yifukuan"></i> <i class="iconfont icon-yifukuan iconStyle"></i>
<text>购买</text> <text>购买</text>
<text>{{item.buyCount}}</text> <text>{{item.buyCount}}</text>
</view> </view>
...@@ -74,17 +78,21 @@ ...@@ -74,17 +78,21 @@
<script> <script>
import api from "@/api/api"; import api from "@/api/api";
import courseItem from "@/components/courseItem/courseItem.vue"; import courseItem from "@/components/courseItem/courseItem.vue";
import dataHandling from "@/util/dataHandling";
import CommonTimePicker from '@/components/commonTimePicker/commonTimePicker.vue';
import { import {
fmdata fmdata
} from '@/util/currentDate.js' } from '@/util/currentDate.js'
export default { export default {
components: { components: {
courseItem courseItem,
CommonTimePicker
}, },
data() { data() {
return { return {
showTime1:false,
startDate:{year:dataHandling.getDateParts().year,month:dataHandling.getDateParts().month},
queryDate: fmdata(new Date(), 'M'), queryDate: fmdata(new Date(), 'M'),
// queryDate:`${new Date().getFullYear()}-${new Date().getMonth() + 1}`,
maxDate: `${new Date().getFullYear()}-${new Date().getMonth() + 1}`, maxDate: `${new Date().getFullYear()}-${new Date().getMonth() + 1}`,
userId: uni.getStorageSync('cffp_userId'), userId: uni.getStorageSync('cffp_userId'),
coursesCountInfos: { coursesCountInfos: {
...@@ -99,16 +107,19 @@ ...@@ -99,16 +107,19 @@
} }
}, },
methods: { methods: {
changeStartTime(obj){
this.startDate = obj
this.queryDate=`${obj.year}-${obj.month<10?`0${obj.month}`:obj.month}`
this.userShareCount();
this.userShareQuery();
this.showTime1 = false
},
goBack() { goBack() {
uni.navigateBack({ uni.navigateBack({
delta: 1 delta: 1
}); });
}, },
bindDateChange: function(e) {
this.queryDate = e.detail.value;
this.userShareCount();
this.userShareQuery();
},
userShareCount() { userShareCount() {
const params = { const params = {
userId: this.userId, userId: this.userId,
...@@ -155,8 +166,11 @@ ...@@ -155,8 +166,11 @@
}, },
// 查看积分 // 查看积分
viewIntegral() { viewIntegral() {
// uni.navigateTo({
// url: `/pages/myPoints/myPoints`
// })
uni.navigateTo({ uni.navigateTo({
url: `/pages/myPoints/myPoints` url: `/pages/pointsExchange/pointsExchange`
}) })
} }
}, },
...@@ -170,7 +184,7 @@ ...@@ -170,7 +184,7 @@
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.container { .container {
height: 100%; height: 100%;
......
<template> <template>
<view class="container"> <view class="container">
<!-- 课程详情 --> <view style="flex: 1;">
<template v-if="courseInfoItem"> <!-- 课程详情 -->
<view class="courseItemBox" style="padding-top:80rpx"> <template v-if="courseInfoItem">
<view class="iconfont icon-youjiantou zuojiantou" @click="goBack()" style="top:18rpx"> <view class="courseItemBox" style="padding-top:80rpx">
</view> <view class="iconfont icon-youjiantou zuojiantou" @click="goBack()" style="top:18rpx">
<course-item :thumbnailPath="courseInfoItem.displayImage" :title="courseInfoItem.fileTitle" </view>
:summaryBox="courseInfoItem.fileSynopsis" <course-item :thumbnailPath="courseInfoItem.displayImage" :title="courseInfoItem.fileTitle"
:dataList="{coursePrice:courseInfoItem.coursePrice,salesNumber:courseInfoItem.salesNumber}" :summaryBox="courseInfoItem.fileSynopsis"
:fileLecturerId="courseInfoItem.fileLecturerId" :fileId="fileId"></course-item> :dataList="{coursePrice:courseInfoItem.coursePrice,salesNumber:courseInfoItem.salesNumber}"
</view> :fileLecturerId="courseInfoItem.fileLecturerId" :fileId="fileId"></course-item>
</template> </view>
<!-- 价格明细 --> </template>
<view class="priceInfoContent"> <!-- 价格明细 -->
<h4>价格明细</h4> <view class="priceInfoContent">
<view><text>现价</text><text>¥{{Number(courseInfoItem.coursePrice).toFixed(2)}}</text></view> <h4>价格明细</h4>
<view> <view ><text class="txtFont">现价</text><text>¥{{Number(courseInfoItem.coursePrice).toFixed(2)}}</text></view>
<text @click="toggle(1,'bottom')">积分抵扣<i class="iconfont icon-31tishi"></i></text> <view>
<text class="integralBox" @click="toggle(2,'bottom')" <text class="txtFont" @click="toggle(1,'bottom')">积分抵扣<i class="iconfont icon-31tishi txtFont"></i></text>
v-if="intergralInfo.preFortune">{{isDeduction != 'true' ? '未选' : '已选'}}积分,可抵扣{{deductionCore}}<i <text class="integralBox" @click="toggle(2,'bottom')"
class="iconfont icon-youjiantou"></i></text> v-if="intergralInfo.preFortune">{{isDeduction != 'true' ? '未选' : '已选'}}积分,可抵扣{{deductionCore}}<i
<text style="color: #666666;font-size: 30rpx;" v-else>暂无积分</text> class="iconfont icon-youjiantou iconStyle"></i></text>
</view> <text style="color: #666666;font-size: 30rpx;" v-else>暂无积分</text>
<view><text>合计</text> </view>
<text v-if="isRedirect == 1">{{calculatedPrice}}</text> <view><text class="txtFont">合计</text>
<text v-else>¥{{Number(totalPrice).toFixed(2)}}</text> <text v-if="isRedirect == 1">{{calculatedPrice}}</text>
</view> <text v-else>¥{{Number(totalPrice).toFixed(2)}}</text>
</view> </view>
<!-- 支付方式 --> </view>
<view class="paymentMethodContent"> <!-- 支付方式 -->
<h4>选择支付方式</h4> <view class="paymentMethodContent">
<view class="paymentItem" @click="selectPaymentMethod(2)"> <h4>选择支付方式</h4>
<view> <view class="paymentItem" @click="selectPaymentMethod(2)">
<i class="iconfont icon-zhifubao"></i> <view>
<text>支付宝支付</text> <i class="iconfont icon-zhifubao"></i>
</view> <text class="txtFont">支付宝支付</text>
<view class="selectRadio" :class="{'actived':paymentMethod===2}"> </view>
<i class="iconfont icon-duihao"></i> <view class="selectRadio" :class="{'actived':paymentMethod===2}">
</view> <i class="iconfont icon-duihao txtFont"></i>
</view> </view>
<view class="paymentItem" @click="selectPaymentMethod(1)" v-if="deviceType==3"> </view>
<view> <view class="paymentItem" @click="selectPaymentMethod(1)" v-if="deviceType==3">
<i class="iconfont icon-py_weixinzhifu"></i> <view>
<text>微信支付</text> <i class="iconfont icon-py_weixinzhifu txtFont"></i>
</view> <text>微信支付</text>
<view class="selectRadio" :class="{'actived':paymentMethod===1}"> </view>
<i class="iconfont icon-duihao"></i> <view class="selectRadio" :class="{'actived':paymentMethod===1}">
</view> <i class="iconfont icon-duihao txtFont"></i>
</view> </view>
<!-- #ifdef APP-PLUS --> </view>
<!-- <view class="paymentItem" @click="selectPaymentMethod(1)"> <!-- #ifdef APP-PLUS -->
<view> <!-- <view class="paymentItem" @click="selectPaymentMethod(1)">
<i class="iconfont icon-py_weixinzhifu"></i> <view>
<text>微信支付</text> <i class="iconfont icon-py_weixinzhifu"></i>
</view> <text>微信支付</text>
<view class="selectRadio" :class="{'actived':paymentMethod===1}"> </view>
<i class="iconfont icon-duihao"></i> <view class="selectRadio" :class="{'actived':paymentMethod===1}">
</view> <i class="iconfont icon-duihao"></i>
</view> --> </view>
<!-- #endif --> </view> -->
<!-- #endif -->
</view>
</view> </view>
<!-- 底部 --> <!-- 底部 -->
<view class="totalContent"> <view class="totalContent">
<view class="priceInfoBox"> <view class="priceInfoBox">
...@@ -93,9 +96,9 @@ ...@@ -93,9 +96,9 @@
<view class="title"> <view class="title">
<text></text> <text></text>
<h3>{{popupTitle}}</h3> <h3>{{popupTitle}}</h3>
<i class="iconfont icon-guanbi" @click="closePopup(1)"></i> <i class="iconfont icon-guanbi iconStyle" @click="closePopup(1)"></i>
</view> </view>
<view v-if="popupType===1"><text>1积分=1元,积分抵扣如同现金,所有课程均可使用.</text></view> <view v-if="popupType===1"><text>1积分=1元,积分抵扣如同现金,所有产品均可使用</text></view>
<view v-if="popupType===2"> <view v-if="popupType===2">
<view class="deductionInfoItem" :class="{'actived':isDeduction == 'true'}" @click="selectDeduction(true)"> <view class="deductionInfoItem" :class="{'actived':isDeduction == 'true'}" @click="selectDeduction(true)">
<view style="display: flex;"> <view style="display: flex;">
...@@ -106,7 +109,7 @@ ...@@ -106,7 +109,7 @@
</view> </view>
</view> </view>
<view class="selectRadio"> <view class="selectRadio">
<i class="iconfont icon-duihao"></i> <i class="iconfont icon-duihao " style="font-size: 28rpx;"></i>
</view> </view>
</view> </view>
<view class="deductionInfoItem" :class="{'actived':isDeduction == 'false'}" @click="selectDeduction(false)"> <view class="deductionInfoItem" :class="{'actived':isDeduction == 'false'}" @click="selectDeduction(false)">
...@@ -114,7 +117,7 @@ ...@@ -114,7 +117,7 @@
<text>不使用积分抵扣</text> <text>不使用积分抵扣</text>
</view> </view>
<view class="selectRadio"> <view class="selectRadio">
<i class="iconfont icon-duihao"></i> <i class="iconfont icon-duihao" style="font-size: 28rpx;"></i>
</view> </view>
</view> </view>
<view class="confirmBtn" @click="closePopup(1);"> <view class="confirmBtn" @click="closePopup(1);">
...@@ -129,7 +132,7 @@ ...@@ -129,7 +132,7 @@
<view class="title"> <view class="title">
<text></text> <text></text>
<h3>{{popupTitle}}</h3> <h3>{{popupTitle}}</h3>
<i class="iconfont icon-guanbi" @click="closePopup(2)"></i> <i class="iconfont icon-guanbi" style="font-size: 28rpx;" @click="closePopup(2)"></i>
</view> </view>
<view class="integralDeductionContent"> <view class="integralDeductionContent">
<view class="intergralItem"> <view class="intergralItem">
...@@ -157,7 +160,7 @@ ...@@ -157,7 +160,7 @@
<view class="tips"> <view class="tips">
<!-- <view class="text-center">请点击右上角菜单</view> --> <!-- <view class="text-center">请点击右上角菜单</view> -->
<view style="line-height: 60rpx;">戳这里,点击<text class="iconfont icon-liulanqi"></text> <view style="line-height: 60rpx;">戳这里,点击<text class="iconfont icon-liulanqi"></text>
按钮,使用系统浏览器打开页面完成支付,完成后请返回微信,到【销售课程】下,查看购买订单。</view> 按钮,使用系统浏览器打开页面完成支付,完成后请返回微信,到【我的->成交订单】下,查看购买订单。</view>
</view> </view>
</view> </view>
</view> </view>
...@@ -528,17 +531,31 @@ ...@@ -528,17 +531,31 @@
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
::v-deep .uni-popup .uni-popup__wrapper{
margin: 0 !important;
}
.container { .container {
position: relative; // position: relative;
height: 95vh; width: 100%;
box-sizing: border-box;
display: flex;
flex-direction: column;
.txtFont{
font-size: 27rpx;
}
.courseItemBox { .courseItemBox {
padding: 20rpx 30rpx; padding: 20rpx 30rpx;
background-color: #fff; background-color: #fff;
} }
.popup-content { .popup-content {
border-radius: 15rpx 15rpx 0 0;
padding: 20rpx;
box-sizing: border-box;
width: 100%;
.title { .title {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
...@@ -630,6 +647,7 @@ ...@@ -630,6 +647,7 @@
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
font-size: 28rpx;
} }
} }
...@@ -674,6 +692,7 @@ ...@@ -674,6 +692,7 @@
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
font-size: 28rpx;
} }
} }
...@@ -683,16 +702,18 @@ ...@@ -683,16 +702,18 @@
background-color: #fff; background-color: #fff;
margin: 0 10rpx; margin: 0 10rpx;
padding: 20rpx; padding: 20rpx;
border-radius: 10rpx;
} }
.priceInfoContent { .priceInfoContent {
view { view {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
text { text {
&:last-child { &:last-child {
font-weight: bold; font-weight: bold;
font-size: 27rpx;
} }
&.integralBox { &.integralBox {
...@@ -728,6 +749,9 @@ ...@@ -728,6 +749,9 @@
} }
.paymentMethodContent { .paymentMethodContent {
margin-top: 20rpx;
.paymentItem { .paymentItem {
display: flex; display: flex;
align-items: center; align-items: center;
...@@ -770,11 +794,12 @@ ...@@ -770,11 +794,12 @@
} }
.totalContent { .totalContent {
position: absolute; // position: absolute;
bottom: 0; // bottom: 0;
left: 0; // left: 0;
width: 100%; // width: 100%;
padding: 40rpx 28rpx; padding: 40rpx 28rpx;
margin-bottom: 20rpx;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
...@@ -794,6 +819,7 @@ ...@@ -794,6 +819,7 @@
color: #fff; color: #fff;
padding: 14rpx 38rpx; padding: 14rpx 38rpx;
border-radius: 80rpx; border-radius: 80rpx;
font-size: 28rpx;
} }
.gray { .gray {
......
...@@ -13,7 +13,10 @@ ...@@ -13,7 +13,10 @@
<view v-for="item in orderInfoList.filter(item=>item.pageArea===2)" :key="item.id" class="liBox"> <view v-for="item in orderInfoList.filter(item=>item.pageArea===2)" :key="item.id" class="liBox">
<text>{{item.name}}:</text> <text>{{item.name}}:</text>
<text <text
:style="{color:item.color ? item.color : '#666'}">{{item.type==='currency' && item.value ? '¥' : ''}}{{item.value ? item.value : '/'}}</text> :style="{color:item.color ? item.color : '#666'}"
>
{{item.type==='currency' && item.value ? '¥' : ''}}{{item.value ? item.value : '/'}}
</text>
</view> </view>
</view> </view>
<!-- 退课 --> <!-- 退课 -->
...@@ -28,6 +31,7 @@ ...@@ -28,6 +31,7 @@
<script> <script>
import api from "@/api/api"; import api from "@/api/api";
import common from "@/common/common"; import common from "@/common/common";
import dataHandling from "@/util/dataHandling";
export default { export default {
data() { data() {
return { return {
...@@ -74,14 +78,14 @@ ...@@ -74,14 +78,14 @@
alias: 'userName', alias: 'userName',
pageArea: 1 pageArea: 1
}, },
{ // {
id: 6, // id: 6,
name: '商品讲师', // name: '商品讲师',
value: '/', // value: '/',
type: 'string', // type: 'string',
alias: 'lecturerName', // alias: 'lecturerName',
pageArea: 1 // pageArea: 1
}, // },
{ {
id: 7, id: 7,
name: '订单现价', name: '订单现价',
...@@ -164,14 +168,33 @@ ...@@ -164,14 +168,33 @@
api.userCourseInfo(param).then(res => { api.userCourseInfo(param).then(res => {
if (res['success']) { if (res['success']) {
const data = this.orderDetail = res['data']['orderDetail']; const data = this.orderDetail = res['data']['orderDetail'];
if(this.orderDetail.effectiveEndDate){
this.orderDetail.effectiveEndDate = dataHandling.dateFormat2(this.orderDetail.effectiveEndDate)
}
if(this.orderDetail.orderConfirmDate){
this.orderDetail.orderConfirmDate = dataHandling.dateFormat2(this.orderDetail.orderConfirmDate)
}
this.fileId = data.fileId; this.fileId = data.fileId;
let deleteFlag = false
Object.keys(data).map((key, item) => { Object.keys(data).map((key, item) => {
this.orderInfoList.forEach(val => { this.orderInfoList.forEach(val => {
if (val.alias == key) { if (val.alias == key) {
val.value = data[key]; val.value = data[key];
} }
if(val.alias=='salesCommission'&&!val.value) {
deleteFlag = true
}
}) })
}) })
if(deleteFlag){
this.orderInfoList = this.orderInfoList.filter(item => {
// 保留所有项,除非是 salesCommission 为空且是 id 为 10 或 11 的项
return !(deleteFlag && (item.id === 10 || item.id === 11));
});
}
} }
uni.hideLoading() uni.hideLoading()
}) })
...@@ -206,7 +229,7 @@ ...@@ -206,7 +229,7 @@
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.container { .container {
height: 100%; height: 100%;
......
...@@ -18,18 +18,19 @@ ...@@ -18,18 +18,19 @@
<view class="courlistBox"> <view class="courlistBox">
<view class="course_content"> <view class="course_content">
<view class="tag"> <view class="tag">
<h4>精品课程</h4> <h4>推荐产品</h4>
<view @click="goToCourselist()">更多<text class="iconfont icon-youjiantou"></text></view> <view @click="goToCourselist()">更多<text class="iconfont icon-youjiantou"></text></view>
<!-- <view v-if="this.isRedirect == 1" @click="goToCourselist()">更多<text class="iconfont icon-youjiantou"></text></view> --> <!-- <view v-if="this.isRedirect == 1" @click="goToCourselist()">更多<text class="iconfont icon-youjiantou"></text></view> -->
</view> </view>
<view class="ulBox" v-if="cffpCourseInfos.length>0"> <view class="ulBox" v-if="cffpCourseInfos.length>0">
<view class="liBox" v-for="item in cffpCourseInfos" :key="item.fileId" @click="goDetail(item)"> <view class="liBox" v-for="item in cffpCourseInfos" :key="item.fileId" @click="goDetail(item)">
<course-item :thumbnailPath="item.displayImage" :title="item.fileTitle" :summaryBox="item.fileSynopsis" :dataList="{coursePrice:item.coursePrice,salesNumber:item.salesNumber}" :tagList="{v1:item.fileLecturerRanks,v2:item.fileLecturerName}"></course-item> <!-- :tagList="{v1:item.fileLecturerRanks,v2:item.fileLecturerName}" -->
<course-item :thumbnailPath="item.displayImage" :title="item.fileTitle" :summaryBox="item.fileSynopsis" :dataList="{coursePrice:item.coursePrice,salesNumber:item.salesNumber}" ></course-item>
</view> </view>
</view> </view>
</view> </view>
</view> </view>
<tabBar :currentPage="currentPage"></tabBar> <tabBar :currentPage="currentPage" :infoTotal="infoTotal"></tabBar>
</view> </view>
</template> </template>
...@@ -49,9 +50,29 @@ ...@@ -49,9 +50,29 @@
userId:'', userId:'',
isRedirect:'', isRedirect:'',
currentPage: '', currentPage: '',
infoTotal:0
}; };
}, },
onShow() {
let loginType = uni.getStorageSync('loginType')
if(loginType !== "visitor" ){
this.querySystemMessage()
}else{
this.infoTotal = 0
}
},
methods:{ methods:{
querySystemMessage() {
api.querySystemMessage({systemType:1,userId:uni.getStorageSync('cffp_userId')}).then(res => {
if (res['success']&& res['data']['dataList'].length>0) {
this.infoTotal = res['data']['dataList'].filter(item=>{
return item.isRead == 0
}).length
}else {
this.infoTotal = 0
}
});
},
courseList(){ courseList(){
const param = { const param = {
queryName:this.queryName queryName:this.queryName
...@@ -124,7 +145,7 @@ ...@@ -124,7 +145,7 @@
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.ulBox{ .ulBox{
flex-direction: column; flex-direction: column;
} }
...@@ -197,7 +218,7 @@ ...@@ -197,7 +218,7 @@
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
h4{ h4{
margin-left: 20rpx; // margin-left: 20rpx;
} }
} }
.tag:before{ .tag:before{
......
...@@ -85,7 +85,7 @@ ...@@ -85,7 +85,7 @@
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.content{ .content{
width: 100%; width: 100%;
......
...@@ -84,7 +84,7 @@ ...@@ -84,7 +84,7 @@
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.top{ .top{
display: flex; display: flex;
height: 80rpx; height: 80rpx;
......
...@@ -22,5 +22,5 @@ ...@@ -22,5 +22,5 @@
} }
</script> </script>
<style> <style lang="scss" scoped>
</style> </style>
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
<view class="" v-if="item.isType == 'text'"> <view class="" v-if="item.isType == 'text'">
<text>{{item.contentType}}</text> <text>{{item.contentType}}</text>
</view> </view>
<i v-else class="iconfont icon-youjiantou"></i> <i v-else class="iconfont icon-youjiantou iconStyle"></i>
</view> </view>
</view> </view>
</view> </view>
...@@ -62,7 +62,7 @@ ...@@ -62,7 +62,7 @@
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.container{ .container{
height: 100%; height: 100%;
background: #FFFFFF; background: #FFFFFF;
...@@ -81,7 +81,7 @@ ...@@ -81,7 +81,7 @@
.infoBox { .infoBox {
display: flex; display: flex;
align-items: center; align-items: center;
font-size: 28rpx;
image { image {
width: 52rpx !important; width: 52rpx !important;
height: 52rpx; height: 52rpx;
......
...@@ -60,6 +60,6 @@ ...@@ -60,6 +60,6 @@
} }
</script> </script>
<style scoped> <style lang="scss" scoped>
</style> </style>
...@@ -12,10 +12,10 @@ ...@@ -12,10 +12,10 @@
<text style="font-size: 28rpx;">注销账号后不可恢复,该账号绑定的所有权益、积分、记录等数据也将都被清空且无法恢复,包括:</text> <text style="font-size: 28rpx;">注销账号后不可恢复,该账号绑定的所有权益、积分、记录等数据也将都被清空且无法恢复,包括:</text>
</view> </view>
<ul class="tips"> <ul class="tips">
<li>所有积分权益不可使用</li> <li>所有积分权益不可使用</li>
<li>已购买的课程无法观看</li> <li>所有分享数据被清空;</li>
<li>已获得认证的证书无法查看</li> <li>所有订单数据被清空;</li>
<li>学习数据将被清除</li> <li>其他未列数据被清空且无法恢复</li>
</ul> </ul>
<view class="footer" style=""> <view class="footer" style="">
<view class="footer-submitbtn" style="" @click="sunmit()"> <view class="footer-submitbtn" style="" @click="sunmit()">
...@@ -63,8 +63,10 @@ ...@@ -63,8 +63,10 @@
title: '操作成功', title: '操作成功',
icon: 'none' icon: 'none'
}); });
// 清空全部本地存储
uni.clearStorageSync();
uni.redirectTo({ uni.redirectTo({
url:'/components/login/login' url:'/components/login/login?from=index'
}) })
} }
}) })
...@@ -73,7 +75,7 @@ ...@@ -73,7 +75,7 @@
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.container{ .container{
padding: 0 20rpx; padding: 0 20rpx;
} }
......
...@@ -68,7 +68,7 @@ ...@@ -68,7 +68,7 @@
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.personalInfo { .personalInfo {
background: #fff; background: #fff;
width: 95%; width: 95%;
......
...@@ -101,5 +101,6 @@ ...@@ -101,5 +101,6 @@
.btn{ .btn{
background: #20269B; background: #20269B;
border-radius: 40rpx; border-radius: 40rpx;
font-size: 28rpx;
} }
</style> </style>
...@@ -111,7 +111,7 @@ ...@@ -111,7 +111,7 @@
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.content{ .content{
height: 100%; height: 100%;
width: 100vw; width: 100vw;
......
<template> <template>
<view class="content"> <view class="content">
<view class="content-header" v-if="levelName"> <view class="content-header" v-if="levelName">
<view class="concent-title"> <!-- <view class="concent-title">
<text class="concent-text">{{levelName}}</text> <text class="concent-text">{{levelName}}</text>
</view> </view> -->
</view> </view>
<view v-if="dataShowType ==1" style="text-align: right;margin: 20px;"> <view v-if="dataShowType ==1" style="text-align: right;margin: 20rpx 50rpx;font-size: 28rpx;">
总合计:{{count}} 总合计:{{count}}
</view> </view>
<view class=""> <view class="tableTitle">
<view class="d-box"> <!-- 原本的结构 -->
<!-- <view class="d-td" v-for="item in datatitleList"> <!-- <view class="d-box">
<span class="">{{item}}</span>
</view> -->
<view class="d-td" style="text-align: left;"> <view class="d-td" style="text-align: left;">
<text v-if="dataShowType ==1">成员</text> <text v-if="dataShowType ==1">成员</text>
<text v-if="dataShowType == 2">育成团队</text> <text v-if="dataShowType == 2">育成团队</text>
...@@ -25,6 +23,25 @@ ...@@ -25,6 +23,25 @@
<text v-if="dataShowType ==1">关系</text> <text v-if="dataShowType ==1">关系</text>
<text v-if="dataShowType == 2">数量</text> <text v-if="dataShowType == 2">数量</text>
</view> </view>
</view> -->
<view class="d-box" v-if="dataShowType ==1">
<view class="d-td" style="text-align: center;" >
<text >上级</text>
</view>
<view class="d-td" style="text-align: center;">
<text>成员</text>
</view>
<view class="d-td" style="text-align:center;">
<text>职级</text>
</view>
</view>
<view class="d-box " v-if="dataShowType ==2" style="margin: 20px;">
<view class="d-td" >
<text >育成团队部长</text>
</view>
<view class="d-td" >
<text >育成日期</text>
</view>
</view> </view>
<lazy-tree v-if="dataList" :datatitleList="datatitleList" :dataList="dataList" type="2" :dataShowType="dataShowType"></lazy-tree> <lazy-tree v-if="dataList" :datatitleList="datatitleList" :dataList="dataList" type="2" :dataShowType="dataShowType"></lazy-tree>
<!-- <myteam-table :datatitleList="datatitleList" :dataList="dataList" type="1"></myteam-table> --> <!-- <myteam-table :datatitleList="datatitleList" :dataList="dataList" type="1"></myteam-table> -->
...@@ -71,7 +88,7 @@ ...@@ -71,7 +88,7 @@
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.content{ .content{
height: 100%; height: 100%;
width: 100vw; width: 100vw;
...@@ -97,7 +114,9 @@ ...@@ -97,7 +114,9 @@
} }
} }
} }
.tableTitle{
// padding: 0 20rpx;
}
.d-box { .d-box {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
......
<template> <template>
<view class="content"> <view class="content">
<view style="text-align: right;margin: 20rpx 40rpx;"> <view style="text-align: right;margin: 20rpx 40rpx;font-size: 28rpx;">
总合计:{{count}} 总合计:{{count}}
</view> </view>
<view class="content-box"> <view class="content-box">
<view class="content-box-title" v-for="item in datatitleList"> <view class="content-box-title" v-for="(item,index) in datatitleList" :key="index">
<text class="title">{{item}}</text> <text class="title">{{item}}</text>
</view> </view>
</view> </view>
<view class="content-sam-box" v-for="pointItem in otherList"> <view class="content-sam-box" v-for="(pointItem,index) in otherList" :key="index">
<span class="content-box-title">{{pointItem.name}}</span> <span class="content-box-title cell">{{pointItem.parentName}}</span>
<span class="content-box-title">{{pointItem.levelName}}</span> <span class="content-box-title cell">{{pointItem.name}}</span>
<span class="content-box-title">{{pointItem.parentName}}</span> <span class="content-box-title cell">{{pointItem.levelName}}</span>
<span class="content-box-title">{{pointItem.referrer}}</span> <span class="content-box-title cell">{{pointItem.referrer}}</span>
</view> </view>
<!-- <view class=""> <!-- <view class="">
<myteam-table :datatitleList="datatitleList" :dataList="dataList" tabletype="1" type="3"></myteam-table> <myteam-table :datatitleList="datatitleList" :dataList="dataList" tabletype="1" type="3"></myteam-table>
...@@ -37,7 +37,8 @@ ...@@ -37,7 +37,8 @@
// }, // },
data() { data() {
return { return {
datatitleList: ['成员', '职级', '上级', '关系'], // datatitleList: ['成员', '职级', '上级', '关系'],
datatitleList: ['上级', '成员', '职级', '关系'],
dataList:[], dataList:[],
// dataList: [{ // dataList: [{
// title: '所属组织1', // title: '所属组织1',
...@@ -71,11 +72,12 @@ ...@@ -71,11 +72,12 @@
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.content{ .content{
height: 100%; height: 100%;
width: 100vw; width: 98vw;
margin-top: 20px; margin-top: 20px;
box-sizing: border-box;
} }
.content-box { .content-box {
...@@ -88,15 +90,19 @@ ...@@ -88,15 +90,19 @@
.content-box-title { .content-box-title {
flex: 1; flex: 1;
font-size: 28rpx;
} }
.content-sam-box{ .content-sam-box{
background-color: #fff; background-color: #fff;
display: flex; display: flex;
align-items: center; align-items: center;
font-size: 26rpx; font-size: 24rpx;
justify-content: space-between; justify-content: space-between;
padding: 10px 0; padding: 20rpx 0;
color: #333333; color: #333333;
border-bottom: 1px solid #F2F2F2;; border-bottom: 1px solid #F2F2F2;
.cell{
font-size: 24rpx;
}
} }
</style> </style>
<template> <template>
<view class="container"> <view class="container">
<text class="iconfont icon-youjiantou zuojiantou" @click="goBack()" style="left: 20rpx;"></text> <view class="teamHeader">
<view class="iconfont icon-youjiantou zuojiantou" @click="goBack()" ></view>
<view v-if="tabType!==2">
<text style="font-size: 30rpx;">团队总人数:{{teamCount}}</text>
<view class="desTxt">
不包含育成团队
</view>
</view>
</view>
<!-- <text class="iconfont icon-youjiantou zuojiantou" @click="goBack()" style="left: 20rpx;"></text> --> <!-- <text class="iconfont icon-youjiantou zuojiantou" @click="goBack()" style="left: 20rpx;"></text> -->
<!-- tab选项 --> <!-- tab选项 -->
<view class="tabTitle"> <view class="tabTitle">
<text :class="{'actived': tabType===3}" @click="switchTab(3)">直辖团队</text> <text :class="{'actived': tabType===3}" @click="switchTab(3)">直辖团队</text>
<text :class="{'actived': tabType===1}" @click="switchTab(1)">所辖团队</text> <text :class="{'actived': tabType===1}" @click="switchTab(1)">所辖团队</text>
...@@ -25,8 +35,8 @@ ...@@ -25,8 +35,8 @@
</view> </view>
<view class="other" v-if="tabType===3"> <view class="other" v-if="tabType===3">
<other-team v-if="otherList" :otherList="otherList" :count="countOther"></other-team> <other-team v-if="otherList" :otherList="otherList" :count="countOther"></other-team>
<view v-else class="zdata" style=""> <view v-else class="zdata" >
<text>暂无数据!</text> 暂无数据!
</view> </view>
</view> </view>
</view> </view>
...@@ -38,6 +48,7 @@ ...@@ -38,6 +48,7 @@
import Members from './members.vue'; import Members from './members.vue';
import OtherTeam from './otherteam.vue'; import OtherTeam from './otherteam.vue';
import Jurisdiction from './jurisdiction.vue'; import Jurisdiction from './jurisdiction.vue';
import dataHandling from "@/util/dataHandling";
export default { export default {
components: { components: {
OtherTeam, OtherTeam,
...@@ -55,7 +66,8 @@ ...@@ -55,7 +66,8 @@
directList: null, //直属团队数组 directList: null, //直属团队数组
raiseList: null, //所辖团队数组 raiseList: null, //所辖团队数组
otherList: null, // 其他 otherList: null, // 其他
levelName: null levelName: null,
teamCount:0//团队总人数,育成团队人数不算
} }
}, },
onLoad() { onLoad() {
...@@ -74,14 +86,16 @@ ...@@ -74,14 +86,16 @@
getmyseatem() { getmyseatem() {
api.queryMyTeamInfo({ api.queryMyTeamInfo({
userId: this.userId, userId: this.userId,
type: '2' type: '1'
}).then(res =>{ }).then(res =>{
if(res['success']){ if(res['success']){
let data = res.data let data = res.data
if(data.orgInfo) { if(data.orgInfo) {
//this.levelName =data.orgInfo.areaCenterName; //this.levelName =data.orgInfo.areaCenterName;
this.levelName = data.orgInfo.name; this.levelName = data.orgInfo.name;
this.teamCount = data.orgInfo.count
} }
// data.directList = [{levelName:'1',name:'1',parentName:'1'}]
if(data.directList && data.directList.length != 0 && data.directList != null){ if(data.directList && data.directList.length != 0 && data.directList != null){
this.directList = data['directList']; this.directList = data['directList'];
this.count = this.directList.length; this.count = this.directList.length;
...@@ -94,6 +108,7 @@ ...@@ -94,6 +108,7 @@
this.raiseList = data['raiseList']; this.raiseList = data['raiseList'];
this.countRaise = this.raiseList.length; this.countRaise = this.raiseList.length;
this.raiseList.forEach((x)=>{ this.raiseList.forEach((x)=>{
x.raiseTime = dataHandling.dateFormat2(x.raiseTime)
this.$set(x, 'hasChildren', true) this.$set(x, 'hasChildren', true)
this.$set(x, 'children' , []) this.$set(x, 'children' , [])
}) })
...@@ -118,26 +133,32 @@ ...@@ -118,26 +133,32 @@
this.tabType = type; this.tabType = type;
}, },
dateFormat(val) { dateFormat(val) {
return dataHandling.dateFormat(val); return dataHandling.dateFormat2(val);
} }
}, },
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.container { .container {
position: relative; position: relative;
height: 100%; height: 100%;
text-align: center; text-align: center;
margin-bottom: 20px; margin-bottom: 20px;
background: #FFFFFF; background: #FFFFFF;
.teamHeader{
margin-top: 20rpx;
height: 90rpx;
.desTxt{
color: rgba(102, 102, 102, 1);
font-size: 25rpx;
margin-top: 3rpx;
}
}
.zuojiantou{ .zuojiantou{
display: inline-block;
transform: rotate(180deg); transform: rotate(180deg);
font-size: 30rpx; font-size: 30rpx;
z-index: 1; z-index: 1;
position: absolute;
top: 20rpx;
} }
.tabTitle { .tabTitle {
color: #666666; color: #666666;
...@@ -146,7 +167,7 @@ ...@@ -146,7 +167,7 @@
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
// justify-content: space-around; // justify-content: space-around;
padding: 80rpx 30rpx 0; padding: 50rpx 30rpx 0;
font-size: 28rpx; font-size: 28rpx;
text { text {
...@@ -159,23 +180,29 @@ ...@@ -159,23 +180,29 @@
.text-ce{ .text-ce{
margin: auto; margin: auto;
} }
.zdata{ .zdata{
width: 100vw; width: 100vw;
text-align: center; // display: flex;
margin-top: 40rpx;color: #666666; // align-items: center;
} // justify-content: center;
text-align: center;
margin-top: 40rpx;color: #666666;
font-size: 28rpx;
}
.tabContent { .tabContent {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
padding: 0 20rpx; // padding: 0 20rpx;
box-sizing: border-box;
.direct-team { .direct-team {
width: 223px; width: 223px;
height: 40px; height: 40px;
opacity: 1; opacity: 1;
border: 1px solid #3F52B7; border: 1px solid #3F52B7;
margin: 15px auto; margin: 15px auto;
text { text {
color: #333; color: #333;
} }
......
...@@ -2,31 +2,30 @@ ...@@ -2,31 +2,30 @@
<view class="content"> <view class="content">
<view class="header"> <view class="header">
<text class="iconfont icon-youjiantou zuojiantou" @click="goBack()"></text> <text class="iconfont icon-youjiantou zuojiantou" @click="goBack()"></text>
<view class="header-time" style=""> <view class="header-time" @click="openTime('start')">
<time-picker @change="change" fields="month" :icon="true"> <CommonTimePicker
</time-picker> :timeData="startDate"
:visible="showTime1"
@confirmDate="changeStartTime"
@closeTime="showTime1=false"
/>
</view> </view>
<view style="margin: 10rpx 20rpx;"> <view style="margin: 10rpx 20rpx;font-size: 28rpx;">
<text>-</text> <text>-</text>
</view> </view>
<view class="header-time"> <view class="header-time" @click="openTime('end')">
<time-picker @change="changetimeend" fields="month" :icon="true"> <CommonTimePicker
</time-picker> :timeData="endDate"
:birthDay="false"
:visible="showTime2"
@confirmDate="changeEndTime"
@closeTime="showTime2=false"
>
</CommonTimePicker>
</view> </view>
<!-- <view class="timeSelectContent">
<picker @change="bindPickerChange" :value="index" :range="array">
<view class="uni-input">{{array[index] || "选择季度"}} </view>
</picker>
</view>
<view class="timeSelectContent">
<picker @change="mountdchange" :value="montdindex" :range="mountdList">
<view class="uni-input"> {{mountdList[montdindex] || "选择月份"}} </view>
</picker>
</view> -->
</view> </view>
<view class="content-btn"> <view class="content-btn">
<view class="" v-for="(item,index) in teamList"> <view class="" v-for="(item,index) in teamList" :key="index">
<view :class="teamtype===index ? 'content-btn_under-Check' : 'content-btn_under'" <view :class="teamtype===index ? 'content-btn_under-Check' : 'content-btn_under'"
@click="ckteam(index)"> @click="ckteam(index)">
<text <text
...@@ -37,36 +36,38 @@ ...@@ -37,36 +36,38 @@
<view class="classtotal"> <view class="classtotal">
<view class="classtotal-box"> <view class="classtotal-box">
<span class="totalsingular">{{totalOrder || 0}}</span> <span class="totalsingular">{{totalOrder || 0}}</span>
<p>总单数</p> <p class="desTxt">总单数</p>
</view> </view>
<view class="classtotal-box" style="width: 40%;"> <view class="classtotal-box" style="width: 40%;">
<span class="totalsingular">{{totalCoursePrice || 0}}</span> <span class="totalsingular">{{totalCoursePrice || 0}}</span>
<p>总销售额</p> <p class="desTxt">总销售额</p>
<p style="font-size: 18rpx;white-space:nowrap">温馨提示:业绩以最终核算为准</p> <p style="font-size: 18rpx;white-space:nowrap">温馨提示:业绩以最终核算为准</p>
</view> </view>
<view class="classtotal-box"> <view class="classtotal-box">
<span class="totalsingular">{{totalIncome || 0}}</span> <span class="totalsingular">{{totalIncome || 0}}</span>
<p>总销售收入</p> <p class="desTxt">总销售收入</p>
</view> </view>
</view> </view>
<view class="team"> <view class="team">
<view style="display: flex;"> <view style="display: flex;">
<view class="team-a"> <view class="team-a">
</view>
</view> <text style="font-size: 30rpx;">团队排名</text>
<text>团队排名</text>
</view> </view>
</view>
<view class="team-c" @click="sortswitch()"> <view class="sortBox">
<view class="" style="width: 30rpx;height: 30rpx;"> <view
<image style="width: 30rpx;height: 30rpx;" src="../../../static/sort.png" mode=""></image> class="team-c"
</view> @click="sortswitch(item)"
<text v-if="teListsort == true">按销售额收入排序</text> v-for="(item,index) in sortArr"
<text v-else>按销售额排序</text> :key="index"
:class="{active:item.id == currentSort }"
>
<text style="margin-left: 10rpx;">{{item.name}}</text>
</view> </view>
</view> </view>
<view v-if="listType == true"> <view v-if="listType == true">
<myteam-table :datatitleList="datatitleList" :dataList="dataList" felTyle="achievement"></myteam-table> <myteam-table :datatitleList="datatitleList" :dataList="dataList" felTyle="achievement" :currentTitle="currentSort"></myteam-table>
</view> </view>
<h4 class="noListTip" v-else>暂无数据!</h4> <h4 class="noListTip" v-else>暂无数据!</h4>
</view> </view>
...@@ -75,17 +76,23 @@ ...@@ -75,17 +76,23 @@
<script> <script>
import api from "../../../api/api"; import api from "../../../api/api";
import TimePicker from '@/components/myteam/time-picker.vue'; import TimePicker from '@/components/myteam/time-picker.vue';
import CommonTimePicker from '@/components/commonTimePicker/commonTimePicker.vue';
import MyteamTable from '@/components/myteam/myteam-table.vue'; import MyteamTable from '@/components/myteam/myteam-table.vue';
import dataHandling from "@/util/dataHandling";
export default { export default {
components: { components: {
TimePicker, TimePicker,
MyteamTable MyteamTable,
CommonTimePicker
}, },
data() { data() {
return { return {
//datatitleList: ['姓名', '所属组织', '单数', '销售额', '销售收入'], startDate:{year:dataHandling.getDateParts().year,month:dataHandling.getDateParts().month},
//teamList: ['直辖团队', '所辖团队', '其他'], endDate:{year:dataHandling.getDateParts().year,month:dataHandling.getDateParts().month},
datatitleList: ['姓名', '单数', '销售额', '销售收入'], showTime1:false,
showTime2:false,
datatitleList1: ['姓名', '单数', '销售额', '销售收入'],
datatitleList2: ['销售日期', '单数', '销售额', '销售收入'],
teamList: ['直辖团队', '所辖团队', '育成团队'], teamList: ['直辖团队', '所辖团队', '育成团队'],
teamtype: 0, teamtype: 0,
montdindex: 0, montdindex: 0,
...@@ -122,13 +129,62 @@ ...@@ -122,13 +129,62 @@
courseOrPolicy: '1', courseOrPolicy: '1',
type: '2' type: '2'
}, },
dataList: [] dataList: [],
sortArr:[
{
name:'销售额',
value:'coursePrice',
sortDirection:1,
id:'1',
},
// {
// name:'销售额收入',
// value:'courseIncome',
// sortDirection:1,
// id:'2'
// },
{
name:'销售日期',
value:'courseIncome',
sortDirection:1,
id:4
}
],
currentSort:'1',
currentTitle:'1',
}
},
computed: {
datatitleList(){
return this.currentSort =='1' || this.currentSort =='2' ?this.datatitleList1:this.datatitleList2
} }
}, },
onLoad() { onLoad() {
this.getqueryTeamAchievement() this.getqueryTeamAchievement()
}, },
methods: { methods: {
changeStartTime(obj){
this.startDate = obj
this.CffpOrgInfoReqVO.startDate=`${obj.year}-${obj.month<10?`0${obj.month}`:obj.month}`
this.getqueryTeamAchievement()
this.showTime1 = false
},
changeEndTime(obj){
this.endDate = obj
this.CffpOrgInfoReqVO.endDate=`${obj.year}-${obj.month<10?`0${obj.month}`:obj.month}`
this.getqueryTeamAchievement()
this.showTime2 = false
},
openTime(key){
if(key=='start'){
this.showTime1 = true
return
}
if(key=='end'){
this.showTime2 = true
return
}
},
goBack(){ goBack(){
uni.navigateBack({ uni.navigateBack({
delta: 1 delta: 1
...@@ -169,23 +225,41 @@ ...@@ -169,23 +225,41 @@
if (res['success']) { if (res['success']) {
this.listType = true this.listType = true
this.dataList = res.data.list || []; this.dataList = res.data.list || [];
if(this.dataList.length>0){
this.dataList.forEach(item=>{
item.saleDate = dataHandling.dateFormat2(item.saleDate,'yyyy-MM-dd')
})
}
this.totalOrder = res.data.totalOrder ? res.data.totalOrder : '0'; this.totalOrder = res.data.totalOrder ? res.data.totalOrder : '0';
this.totalCoursePrice = res.data.totalCoursePrice ? res.data.totalCoursePrice : '0'; this.totalCoursePrice = res.data.totalCoursePrice ? res.data.totalCoursePrice : '0';
this.totalIncome = res.data.totalIncome ? res.data.totalIncome : '0'; this.totalIncome = res.data.totalIncome ? res.data.totalIncome : '0';
// this.sortswitch();
} }
}) })
}, },
sortswitch() { sortswitch(obj) {
this.teListsort = !this.teListsort this.currentSort = obj.id
this.dataList.sort((a, b) => { if(obj.id == 4){
//排序基于的数据 this.CffpOrgInfoReqVO.sortType = obj.id
if (this.teListsort == false) { this.getqueryTeamAchievement()
return b.courseIncome - a.courseIncome; }else{
} else { delete this.CffpOrgInfoReqVO.sortType
return b.coursePrice - a.coursePrice; this.getqueryTeamAchievement()
} }
})
// 以前的写法
// this.teListsort = !this.teListsort
// this.dataList.sort((a, b) => {
// //排序基于的数据
// if (this.teListsort == false) {
// return b.courseIncome - a.courseIncome;
// } else {
// return b.coursePrice - a.coursePrice;
// }
// })
// this.dataList.sort((a, b) => {
// return b.key - a.key;
// })
}, },
mountdchange(e) { mountdchange(e) {
this.montdindex = e.detail.value this.montdindex = e.detail.value
...@@ -193,6 +267,10 @@ ...@@ -193,6 +267,10 @@
ckteam(e) { ckteam(e) {
this.teamtype = e this.teamtype = e
this.listType = false this.listType = false
this.currentSort = '1'
if(this.CffpOrgInfoReqVO?.sortType){
delete this.CffpOrgInfoReqVO.sortType
}
this.getqueryTeamAchievement() this.getqueryTeamAchievement()
}, },
// 这个是时间组件返回的时间值 // 这个是时间组件返回的时间值
...@@ -208,9 +286,15 @@ ...@@ -208,9 +286,15 @@
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
::v-deep .uni-popup .uni-popup__wrapper{
margin: 0 !important;
}
.desTxt{
font-size: 26rpx;
}
.content { .content {
width: 100vw; width: 100%;
height: 100%; height: 100%;
} }
...@@ -224,8 +308,13 @@ ...@@ -224,8 +308,13 @@
} }
.header-time { .header-time {
border: 1px solid #EFEDED; background: rgba(245, 245, 245, 1);
padding: 10rpx 15rpx; padding: 10rpx 15rpx;
.timeBox{
width: 100%;
background-color: #fff;
border-radius: 10rpx 10rpx 0 0;
}
} }
.content-btn { .content-btn {
...@@ -301,7 +390,12 @@ ...@@ -301,7 +390,12 @@
font-weight: 500; font-weight: 500;
line-height: 46rpx; line-height: 46rpx;
} }
.sortBox{
display: flex;
justify-content: flex-start;
align-items: center;
margin: 20rpx 40rpx;
}
.team { .team {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
...@@ -323,16 +417,26 @@ ...@@ -323,16 +417,26 @@
} }
.team-c { .team-c {
margin-right: 30rpx;
box-sizing: border-box;
display: flex; display: flex;
align-items: center; align-items: center;
padding: 0 10rpx; justify-content: flex-start;
height: 40rpx; padding: 10rpx 20rpx;
// height: 40rpx;
font-size: 28rpx; font-size: 28rpx;
text-align: center; // text-align: center;
color: #FFFFFF; color: rgba(46, 38, 29, 1);
background: #20269B; background: rgba(247, 247, 247, 1);
border-radius: 5rpx; border-radius: 5rpx;
opacity: 1; opacity: 1;
&.active{
background: rgba(32, 39, 155, 1);
color: #fff;
}
}
.team-c:last-child{
margin-right: 0rpx;
} }
.title { .title {
......
...@@ -3,8 +3,7 @@ ...@@ -3,8 +3,7 @@
<text class="iconfont icon-youjiantou zuojiantou" @click="goBack()" style="left: 20rpx;"></text> <text class="iconfont icon-youjiantou zuojiantou" @click="goBack()" style="left: 20rpx;"></text>
<view class="header"> <view class="header">
<view class="headportrait" @click="uploadAvatar()"> <view class="headportrait" @click="uploadAvatar()">
<!-- <image :src="optionForm.headPicture ? optionForm.headPicture :'../../static/myteam/Group1633.png'" mode=""></image> --> <image :src="optionForm.headPicture ? optionForm.headPicture :companyLogo" mode="widthFix"></image>
<image :src="optionForm.headPicture ? optionForm.headPicture :companyLogo" mode=""></image>
</view> </view>
</view> </view>
<!-- <view class="linechart"> <!-- <view class="linechart">
...@@ -12,18 +11,25 @@ ...@@ -12,18 +11,25 @@
</view> --> </view> -->
<view class="band"> <view class="band">
<view class="contentItem"> <view class="contentItem">
<text>真实名称</text> <text class="left">真实名称</text>
<input class="user-input" v-model="optionForm.realName" type="text" placeholder="请输入姓名" /> <input
class="user-input"
v-model="optionForm.realName"
type="text"
placeholder="请输入姓名"
maxlength="10"
/>
</view> </view>
<view class="contentItem"> <view class="contentItem">
<text>昵称</text> <text class="left">昵称</text>
<input class="user-input" v-model="optionForm.nickName" maxlength="10" type="text" <input class="user-input" v-model="optionForm.nickName" maxlength="10" type="text"
placeholder="请输入3~10个字符" /> placeholder="请输入3~10个字符" />
</view> </view>
<view class="contentItem"> <!-- <view class="contentItem">
<text>个人简介</text> <text>个人简介</text>
<textarea class="user-textarea" v-model="optionForm.userDescription" placeholder="请输入个人简介"></textarea> <textarea class="user-textarea" v-model="optionForm.userDescription" placeholder="请输入个人简介"></textarea>
</view> </view> -->
</view> </view>
<view class="footer"> <view class="footer">
<button class="user-button" @tap="submitinfo">保存</button> <button class="user-button" @tap="submitinfo">保存</button>
...@@ -43,6 +49,9 @@ ...@@ -43,6 +49,9 @@
export default { export default {
data() { data() {
return { return {
isComposing: false,
// 敏感词列表(可扩展)
bannedWords: ["admin", "test", "root", "password"],
companyType : companyInfo.companyType, companyType : companyInfo.companyType,
companyLogo : '../../static/myteam/logo.png', companyLogo : '../../static/myteam/logo.png',
dataForm: { dataForm: {
...@@ -88,6 +97,55 @@ ...@@ -88,6 +97,55 @@
this.optionForm = JSON.parse(options.customerBasicInfo) this.optionForm = JSON.parse(options.customerBasicInfo)
}, },
methods: { methods: {
handleKeyDown(e) {
console.log('this.isComposing',this.isComposing);
const key = e.key;
if (this.isComposing || ["Backspace", "Delete", "ArrowLeft", "ArrowRight"].includes(key)) return;
if (!/^[a-zA-Z0-9\u4e00-\u9fa5]$/.test(key)) {
e.preventDefault();
uni.showToast({ title: "请输入汉字", icon: "none" });
}
},
handleInput(e) {
if (this.isComposing) return; // 正在输入拼音,不处理
let value = e.detail.value;
// 1. 过滤特殊字符(仅允许英文、数字、汉字)
value = value.replace(/[^a-zA-Z0-9\u4e00-\u9fa5]/g, "");
// 2. 检查敏感词
const hasBannedWord = this.bannedWords.some(word =>
value.toLowerCase().includes(word.toLowerCase())
);
if (hasBannedWord) {
uni.showToast({
title: "包含敏感词汇,请修改",
icon: "none"
});
value = value.replace(new RegExp(this.bannedWords.join("|"), "gi"), "");
}
// 3. 限制长度(20字符)
if (value.length > 20) {
value = value.slice(0, 20);
uni.showToast({
title: "最多输入20个字符",
icon: "none"
});
}
// 4. 更新数据
this.optionForm.realName = value;
this.$nextTick(() => this.optionForm.realName = value); // iOS 兼容
},
handleCompositionEnd(e) {
this.isComposing = false;
this.handleInput(e); // 拼音输入结束,检查内容
},
goBack() { goBack() {
let back = getCurrentPages(); let back = getCurrentPages();
if (back && back.length > 1) { if (back && back.length > 1) {
...@@ -111,18 +169,8 @@ ...@@ -111,18 +169,8 @@
return; return;
}else if (!common.nameValid(this.optionForm.realName)) { }else if (!common.nameValid(this.optionForm.realName)) {
let that = this; let that = this;
uni.showModal({ uni.showToast({title: '请填写真实姓名',duration: 2000,icon: 'none'});
content: '真实姓名不合规,是否继续保存', this.optionForm.realName = ''
confirmText: '保存',
cancelText: '取消',
success: function (res) {
if (res.confirm) {
that.saveUserInfo();
}else{
return;
}
}
});
}else{ }else{
this.saveUserInfo(); this.saveUserInfo();
} }
...@@ -149,13 +197,21 @@ ...@@ -149,13 +197,21 @@
} }
</script> </script>
<style scoped> <style scoped lang="scss">
.input-tip {
color: #ff5a5f;
font-size: 12px;
margin-left: 10px;
}
.content { .content {
padding-top: 20rpx;
width: 100vw; width: 100vw;
} }
.user-input { .user-input {
text-align: right; text-align: right;
padding-right: 15rpx;
flex: 1;
} }
.user-textarea { .user-textarea {
...@@ -176,16 +232,25 @@ ...@@ -176,16 +232,25 @@
} }
.headportrait { .headportrait {
width: 250rpx; width: 200rpx;
height: 250rpx; height: 200rpx;
/* border: 1rpx solid aqua; */ border-radius: 50%;
border-radius: 50%; overflow: hidden;
position: relative;
/* 添加以下属性强制硬件加速 */
transform: translateZ(0);
-webkit-transform: translateZ(0);
backface-visibility: hidden;
-webkit-backface-visibility: hidden;
} }
.headportrait image { .headportrait image {
width: 100%; width: 100%;
height: 100%; height: 100%;
border-radius: 50%; object-fit: cover;
/* 同样为图片添加硬件加速 */
transform: translateZ(0);
-webkit-transform: translateZ(0);
} }
/* .headportrait-img { /* .headportrait-img {
...@@ -201,6 +266,9 @@ ...@@ -201,6 +266,9 @@
justify-content: space-between; justify-content: space-between;
border-bottom: 2rpx solid #E4E4E4; border-bottom: 2rpx solid #E4E4E4;
padding: 20rpx; padding: 20rpx;
.left{
width: 120rpx;
}
} }
.footer { .footer {
......
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