Commit 5d5d57f0 by yuzhenWang

发布生产合并分支

parent e4b94a5a
...@@ -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/font1/iconfont.css";
@import "@/static/font/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: 200rpx;" @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;">
...@@ -149,9 +149,10 @@ ...@@ -149,9 +149,10 @@
<style lang="scss" scoped> <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,22 +31,28 @@ ...@@ -31,22 +31,28 @@
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
...@@ -12,11 +12,11 @@ ...@@ -12,11 +12,11 @@
<view class="text-wrap">{{summaryBox}}</view> <view class="text-wrap">{{summaryBox}}</view>
</view> </view>
<view class="dataBox" v-if="dataList"> <view class="dataBox" v-if="dataList">
<view class="price" >{{dataList.coursePrice}}</view> <view class="price" v-if="dataList.coursePrice != 0" >{{dataList.coursePrice}}</view>
<text v-if="dataList.coursePrice == 0">免费</text> <!-- <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>
......
<template> <template>
<view class="wrapper"> <view class="wrapper">
<view v-if="loginType=='resetpw' || goBack" @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>欢迎登录使用{{companyName}}</view>
</view> </view>
<view class="content"> <view class="content">
<view class="login_title"> <!-- <view class="login_title">
{{loginTypeName}} {{loginTypeName}}
</view>
<form>
<!-- <view class="inputItem" v-if="loginType==='register'">
<input class="uni-input" name="invitationCode" placeholder="输入邀请码(非必填)" v-model="invitation_code"/>
</view> --> </view> -->
<form>
<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>
...@@ -24,7 +21,7 @@ ...@@ -24,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"/>
...@@ -43,24 +40,25 @@ ...@@ -43,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>
...@@ -68,9 +66,8 @@ ...@@ -68,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>
...@@ -92,6 +89,7 @@ ...@@ -92,6 +89,7 @@
//用户输入信息 //用户输入信息
form:{ form:{
mobile:null, mobile:null,
// code:'250106',
code:null, code:null,
password:null, password:null,
}, },
...@@ -129,7 +127,9 @@ ...@@ -129,7 +127,9 @@
this.loginType = 'codelogin'; this.loginType = 'codelogin';
return; return;
} }
this.loginType='visitor'
this.initForm()
uni.removeTabBarBadge({ index: 3 });
// 获取跳转来源(通过路由参数) // 获取跳转来源(通过路由参数)
const pages = getCurrentPages(); const pages = getCurrentPages();
const currentPage = pages[pages.length - 1]; const currentPage = pages[pages.length - 1];
...@@ -141,13 +141,16 @@ ...@@ -141,13 +141,16 @@
url:'/pages/index/index' url:'/pages/index/index'
}) })
} else if (from === 'personalCenter') { } else if (from === 'personalCenter') {
uni.switchTab({
url:'/pages/personalCenter/personalCenter' this.loginIn(1,'personalCenter')
}) // uni.switchTab({
// url:'/pages/personalCenter/personalCenter'
// })
} else if (pages.length > 1) { } else if (pages.length > 1) {
// 从普通页跳转过来,且页面栈中有上一页,直接返回 // 从普通页跳转过来,且页面栈中有上一页,直接返回
uni.navigateBack({ delta: 1 }); uni.navigateBack({ delta: 1 });
this.loginIn(1,'')
}else { }else {
// 默认情况(如直接打开登录页),跳转到首页 // 默认情况(如直接打开登录页),跳转到首页
uni.switchTab({ uni.switchTab({
...@@ -198,7 +201,7 @@ ...@@ -198,7 +201,7 @@
} }
}, 1000); }, 1000);
}, },
loginIn(loginType){ loginIn(loginType,urlType){
uni.showLoading({ uni.showLoading({
title: '加载中...' title: '加载中...'
}); });
...@@ -213,9 +216,16 @@ ...@@ -213,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']);
if(urlType == 'personalCenter'){
uni.switchTab({
url:'/pages/personalCenter/personalCenter'
})
}else {
uni.switchTab({ uni.switchTab({
url:'/pages/index/index' url:'/pages/index/index'
}) })
}
}else{ }else{
uni.showToast({ uni.showToast({
title: res['message'], title: res['message'],
...@@ -393,13 +403,15 @@ ...@@ -393,13 +403,15 @@
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; 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;
...@@ -420,7 +432,7 @@ ...@@ -420,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;
...@@ -430,12 +442,14 @@ ...@@ -430,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: " ";
...@@ -465,6 +479,10 @@ ...@@ -465,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;
...@@ -472,22 +490,28 @@ ...@@ -472,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> -->
<!-- @click="open(item, i)" -->
<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 class="d-td" @click="open(item, i)" v-else :style="{'margin-left':(item.level * 20)+'rpx'}">
<text>{{item.name}}</text>
</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"
>
{{pointItem.saleDate }}
</view>
<view
style="white-space: wrap;width: 100rpx;margin-left: 5rpx;"
v-if="currentTitle == '1' || currentTitle == '2'"
>
{{pointItem.name }}
</view>
</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;">
...@@ -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 <input
class="searchInput" class="searchInput"
type="text" type="text"
...@@ -18,8 +10,8 @@ ...@@ -18,8 +10,8 @@
@input="handleInput" @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>
...@@ -108,29 +100,27 @@ ...@@ -108,29 +100,27 @@
} }
}, },
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;
} }
......
<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": {
"": {
"name": "验证码输入框",
"version": "2.0",
"dependencies": { "dependencies": {
"echarts": "^5.4.1", "dayjs": {
"nanoid": "^4.0.0" "version": "1.11.13",
} "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz",
"integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg=="
}, },
"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": { "dependencies": {
"node": "^14 || ^16 || >=18" "tslib": {
}
},
"node_modules/tslib": {
"version": "2.3.0", "version": "2.3.0",
"resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz", "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
"integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
}, },
"node_modules/zrender": { "zrender": {
"version": "5.6.1", "version": "5.6.1",
"resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.6.1.tgz", "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.6.1.tgz",
"integrity": "sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==", "integrity": "sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==",
"dependencies": { "requires": {
"tslib": "2.3.0" "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>
...@@ -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">
......
...@@ -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,'');
}, },
...@@ -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,7 +57,35 @@ ...@@ -54,7 +57,35 @@
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>
......
...@@ -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;
...@@ -271,14 +276,20 @@ ...@@ -271,14 +276,20 @@
.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;}
} }
.clearBox{
display: flex;
align-items: center;
justify-content: center;
.imgBox{ .imgBox{
position: absolute; display: flex;
top: 75%; align-items: center;
left: 40%; // position: absolute;
// bottom: -7%;
// left: 50%;
// transform: translateX(-50%);
width: 120rpx; width: 120rpx;
height: 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 style="flex: 1;">
<view class="classInfo" style="padding-top:80rpx"> <view class="classInfo" style="padding-top:80rpx">
<view class="iconfont icon-youjiantou zuojiantou" @click="goBack()" style="top:18rpx"> <view class="iconfont icon-youjiantou zuojiantou" @click="goBack()" style="top:18rpx">
</view> </view>
...@@ -7,44 +8,51 @@ ...@@ -7,44 +8,51 @@
</view> </view>
<!-- 订单支付明细 --> <!-- 订单支付明细 -->
<view class="payInfoBox"> <view class="payInfoBox">
<h4>订单支付明细</h4> <h4 class="commonTitle">订单支付明细</h4>
<view> <view>
<text>积分抵扣:</text> <text class="commonTxt">积分抵扣:</text>
<text class="price">{{dropInfo.integralExchange}}</text> <text class="price">{{dropInfo.integralExchange}}</text>
</view> </view>
<view> <view>
<text>实际支付:</text> <text class="commonTxt">实际支付:</text>
<text>{{dropInfo.paymentAmount}}</text> <text style="font-size: 26rpx;">{{dropInfo.paymentAmount}}</text>
</view> </view>
</view> </view>
<!-- 退款明细 --> <!-- 退款明细 -->
<view class="dropDetailInfoBox"> <view class="dropDetailInfoBox">
<h4>退款明细</h4> <h4 class="commonTitle">退款明细</h4>
<view> <view>
<text>支付违约金:<i class="iconfont icon-31tishi" @click="showModal()"></i></text> <text class="commonTxt">支付违约金<i class="iconfont icon-31tishi iconStyle" @click="showModal()" style="margin-left: 3rpx;"></i></text>
<text class="price">{{dropInfo.breachCommission}}</text> <text class="price">{{dropInfo.breachCommission}}</text>
</view> </view>
<view> <view>
<text>退款到账金额:</text> <text class="commonTxt">退款到账金额:</text>
<text>{{dropInfo.refundFee}}</text> <text style="font-size: 26rpx;">{{dropInfo.refundFee}}</text>
</view> </view>
<view> <view>
<text>退还积分:</text> <text class="commonTxt">退还积分:</text>
<text>{{dropInfo.refundIntegralExchange}}</text> <text class="commonTxt">{{dropInfo.refundIntegralExchange}}</text>
</view> </view>
</view> </view>
<!-- 退款原因 --> <!-- 退款原因 -->
<view class="dropInfoBox"> <view class="dropInfoBox">
<view class="dropBox"> <view class="dropBox">
<h4>退款原因</h4> <h4 class="commonTitle">退款原因</h4>
<view class="pickerBox"> <view class="pickerBox" @click="showReason=true">
<picker @change="bindPickerChange" :value="dropIndex" :range="dropReasons" :range-key="'dropOptionName'"> <commonSelect
<view class="uni-input" style="height: 80rpx;">{{dropReasons[dropIndex]['dropOptionName']}}</view> :dataList="dropReasons"
</picker> :visible="showReason"
<i class="iconfont icon-youjiantou"></i> :showValue="dropIndex"
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,9 +108,9 @@ ...@@ -107,9 +108,9 @@
delta: 1 delta: 1
}); });
}, },
bindPickerChange(e){ bindPickerChange(value){
console.log('执行了'); this.dropIndex = value;
this.dropIndex = e.detail.value; this.showReason = false
}, },
showModal(){ showModal(){
this.$refs.popup.open() this.$refs.popup.open()
...@@ -139,7 +140,7 @@ ...@@ -139,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
}); });
...@@ -162,6 +163,8 @@ ...@@ -162,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({
...@@ -185,8 +188,14 @@ ...@@ -185,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()
}) })
...@@ -212,14 +221,21 @@ ...@@ -212,14 +221,21 @@
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;
...@@ -227,15 +243,17 @@ ...@@ -227,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;
...@@ -247,6 +265,7 @@ ...@@ -247,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{
...@@ -255,10 +274,12 @@ ...@@ -255,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;
...@@ -272,7 +293,10 @@ ...@@ -272,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;
......
...@@ -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({
......
...@@ -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是要跳转的外部地址 作为参数
......
...@@ -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>
...@@ -198,6 +198,7 @@ ...@@ -198,6 +198,7 @@
}, },
data() { data() {
return { return {
addSystemType:'', //因为会从其他公众号跳转过来所以接受一下公众号的类型
systemType:companyInfo.systemType, systemType:companyInfo.systemType,
showName:'购买', showName:'购买',
successMessage:'', successMessage:'',
...@@ -410,6 +411,7 @@ ...@@ -410,6 +411,7 @@
} }
}, },
goBack() { goBack() {
console.log('返回');
uni.navigateBack({ uni.navigateBack({
delta: 1 delta: 1
}); });
...@@ -833,7 +835,7 @@ ...@@ -833,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({
...@@ -914,6 +916,9 @@ ...@@ -914,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;
......
...@@ -2,7 +2,6 @@ ...@@ -2,7 +2,6 @@
<view class="container"> <view class="container">
<view class="top"> <view class="top">
<view class="compony"> <view class="compony">
<!-- <image :src="cffpUserInfo.logo" mode="widthFix" style="max-width:320rpx"></image> -->
<image src="@/static/logo1.png" mode="widthFix" style="width: 120rpx !important;"></image> <image src="@/static/logo1.png" mode="widthFix" style="width: 120rpx !important;"></image>
<text class="name">{{cffpUserInfo.name}}</text> <text class="name">{{cffpUserInfo.name}}</text>
<text class="iconfont icon-31tishi" @click="getIntroduce('center')"></text> <text class="iconfont icon-31tishi" @click="getIntroduce('center')"></text>
...@@ -21,19 +20,18 @@ ...@@ -21,19 +20,18 @@
></search> ></search>
<!--轮播组件--> <!--轮播组件-->
<view class="banner"> <view class="banner" style="overflow: none;">
<view class="uni-margin-wrap"> <view class="uni-margin-wrap">
<carousel :carouselList="cffpUserInfo.fileUploadItemList" ></carousel>
<carousel :carouselList="cffpUserInfo.fileUploadItemList"></carousel>
</view> </view>
</view> </view>
</view> </view>
<view class="message" @click="jumpToAnnouncement()"> <view class="message" @click="jumpToAnnouncement()">
<view style="display: flex;align-items: center;"> <view style="display: flex;align-items: center;">
<text class="iconfont icon-gonggao"></text> <text class="iconfont icon-gonggao"></text>
<text>{{announcementInfo}}</text> <text style="font-size: 27rpx;">{{announcementInfo}}</text>
</view> </view>
<text class="iconfont icon-youjiantou"></text> <text class="iconfont icon-youjiantou iconStyle"></text>
</view> </view>
<view class="content"> <view class="content">
<view class="featureContent"> <view class="featureContent">
...@@ -41,11 +39,14 @@ ...@@ -41,11 +39,14 @@
<view class="nav_wrapper"> <view class="nav_wrapper">
<view class="nav_content" v-for="featureItem in featureLists" :key="featureItem.key" <view class="nav_content" v-for="featureItem in featureLists" :key="featureItem.key"
@click="featureSelect(featureItem)"> @click="featureSelect(featureItem)">
<view style="width: 120rpx;text-align: center;"> <!-- <view style="width: 120rpx;text-align: center;">
<image :src="'/static/moduleIcon/'+featureItem.icon + '.png'" alt="" srcset="" <image :src="'/static/moduleIcon/'+featureItem.icon + '.png'" alt="" srcset=""
mode="widthFix"></image> mode="widthFix"></image>
</view> -->
<view class="imgbox">
<view class="iconfont iconSize" :class="`${featureItem.icon}`"></view>
</view> </view>
<view>{{featureItem.name}}</view> <view style="font-size: 26rpx;">{{featureItem.name}}</view>
</view> </view>
</view> </view>
</view> </view>
...@@ -53,7 +54,7 @@ ...@@ -53,7 +54,7 @@
<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()" style="font-size: 30rpx;">更多<text class="iconfont icon-youjiantou iconStyle"></text></view>
</view> </view>
<!-- <courselist :onlyShowList="0"></courselist> --> <!-- <courselist :onlyShowList="0"></courselist> -->
<view class="ulBox" v-if="cffpCourseInfos.length>0"> <view class="ulBox" v-if="cffpCourseInfos.length>0">
...@@ -101,22 +102,22 @@ ...@@ -101,22 +102,22 @@
}, },
featureLists: [{ featureLists: [{
key: '00', key: '00',
name: '销售中心', name: '成交订单',
icon: 'salesCourse', icon:'icon-dingdan',
link: '/pages/saleCourseLists/saleCourseLists', link: '/pages/saleCourseLists/saleCourseLists',
isOpen: true isOpen: true
}, },
{ {
key: '01', key: '01',
name: '我的积分', name: '佣金',
icon: 'integral', icon: 'icon-yongjin',
link: '/pages/myPoints/myPoints', link: '/pages/pointsExchange/pointsExchange',
isOpen: true isOpen: true
}, },
{ {
key: '02', key: '02',
name: '申请加盟', name: '申请加盟',
icon: 'applyJoin', icon: 'icon-hezuo',
link: '/pages/application-process/basic-info', link: '/pages/application-process/basic-info',
isOpen: true isOpen: true
}, },
...@@ -130,7 +131,7 @@ ...@@ -130,7 +131,7 @@
{ {
key: '04', key: '04',
name: '邀请加盟', name: '邀请加盟',
icon: 'shareJoin', icon: 'icon-yaoqing',
link: '/pages/inviteJoin/inviteJoin', link: '/pages/inviteJoin/inviteJoin',
isOpen: true, isOpen: true,
isJoin: true isJoin: true
...@@ -191,6 +192,7 @@ ...@@ -191,6 +192,7 @@
this.showSearch = true; this.showSearch = true;
this.searchQuery = ''; this.searchQuery = '';
}); });
}, },
onLoad(options) { onLoad(options) {
if(options.clearFlag){ if(options.clearFlag){
...@@ -221,6 +223,7 @@ ...@@ -221,6 +223,7 @@
this.loginornot = false this.loginornot = false
}else{ }else{
this.loginornot = true; this.loginornot = true;
this.querySystemMessage()
} }
this.queryAreaCenterInfo(); this.queryAreaCenterInfo();
} else { } else {
...@@ -247,6 +250,29 @@ ...@@ -247,6 +250,29 @@
}) })
} }
}, },
querySystemMessage() {
api.querySystemMessage({systemType:1,userId:uni.getStorageSync('cffp_userId')}).then(res => {
if (res['success']&& res['data']['dataList'].length>0) {
let total = res['data']['dataList'].filter(item=>{
return item.isRead == 0
})
if(total.length>0){
console.log('index',total.length);
uni.setTabBarBadge({
index: 3,
text: total.length.toString()
});
}else {
uni.removeTabBarBadge({ index: 3 });
}
}else {
uni.removeTabBarBadge({ index: 3 });
}
});
},
goDetail(item) { goDetail(item) {
uni.navigateTo({ uni.navigateTo({
url: `/pages/courseDetail/courseDetail?fileId=${item.fileId}` url: `/pages/courseDetail/courseDetail?fileId=${item.fileId}`
...@@ -408,7 +434,7 @@ ...@@ -408,7 +434,7 @@
overflow: hidden; overflow: hidden;
margin-bottom: 30rpx; margin-bottom: 30rpx;
.swiper{ .swiper{
height: 250rpx; height:250rpx;
} }
} }
} }
...@@ -418,9 +444,10 @@ ...@@ -418,9 +444,10 @@
align-items: center; align-items: center;
margin: 20rpx 0; margin: 20rpx 0;
background-color: #fff; background-color: #fff;
padding: 10rpx 0 10rpx 30rpx; padding: 20rpx;
justify-content: space-between; justify-content: space-between;
box-sizing: border-box;
border-radius: 10rpx;
.icon-gonggao { .icon-gonggao {
font-size: 60rpx; font-size: 60rpx;
color: #20279b; color: #20279b;
...@@ -439,58 +466,69 @@ ...@@ -439,58 +466,69 @@
position: relative; position: relative;
.featureContent { .featureContent {
padding-top: 10px; box-sizing: border-box;
padding: 30rpx 0;
.nav_wrapper { .nav_wrapper {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-around; justify-content: space-around;
flex-wrap: wrap; flex-wrap: wrap;
width: 100%; width: 100%;
box-sizing: border-box;
// padding: 10rpx;
.nav_content { .nav_content {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
margin-bottom: 20rpx;
flex: 0 0 20%; flex: 0 0 20%;
font-size: 14px; font-size: 14px;
color: #666; color: rgba(51, 51, 51, 1);
margin: 10px 2%; // margin: 10px 2%;
image { image {
max-width: 80%; max-width: 80%;
} }
.imgbox{
margin-bottom: 10rpx;
.iconSize{
font-size: 40rpx;
}
}
} }
} }
} }
} }
.course_content { .course_content {
background: #fff;
position: relative; position: relative;
padding-bottom: 30rpx; padding-bottom: 30rpx;
// background-color: pink;
.tag { .tag {
box-sizing: border-box;
padding: 20rpx; padding: 20rpx;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
position: relative;
background: #fff;
margin-bottom: 20rpx;
border-radius: 10rpx;
h4 { h4 {
margin-left: 20rpx; margin-left: 20rpx;
font-size: 32rpx;
} }
} }
.tag:before { .tag:before {
position: absolute; position: absolute;
left: 20rpx; left: 20rpx;
top: 20rpx; top: 50%;
transform: translateY(-50%);
display: inline-block; display: inline-block;
content: ''; content: '';
width: 2px; width: 2px;
height: 16px; height: 32rpx;
background-color: #5F83FF; background-color: #20279b;
border-radius: 2px; border-radius: 2px;
} }
} }
...@@ -499,12 +537,15 @@ ...@@ -499,12 +537,15 @@
.ulBox { .ulBox {
flex-direction: column; flex-direction: column;
width: 100%; width: 100%;
box-sizing: border-box;
// background-color: #20279b;
} }
.liBox { .liBox {
box-sizing: border-box;
background-color: #fff; background-color: #fff;
border-radius: 20rpx; border-radius: 20rpx;
margin-bottom: 10rpx; margin-bottom: 20rpx;
padding: 10rpx; padding: 10rpx;
width: 100%; width: 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>
...@@ -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']) {
...@@ -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 {
......
...@@ -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){
......
...@@ -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({
......
...@@ -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,
......
...@@ -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`
}) })
} }
}, },
......
<template> <template>
<view class="container"> <view class="container">
<view style="flex: 1;">
<!-- 课程详情 --> <!-- 课程详情 -->
<template v-if="courseInfoItem"> <template v-if="courseInfoItem">
<view class="courseItemBox" style="padding-top:80rpx"> <view class="courseItemBox" style="padding-top:80rpx">
...@@ -14,15 +15,15 @@ ...@@ -14,15 +15,15 @@
<!-- 价格明细 --> <!-- 价格明细 -->
<view class="priceInfoContent"> <view class="priceInfoContent">
<h4>价格明细</h4> <h4>价格明细</h4>
<view><text>现价</text><text>¥{{Number(courseInfoItem.coursePrice).toFixed(2)}}</text></view> <view ><text class="txtFont">现价</text><text>¥{{Number(courseInfoItem.coursePrice).toFixed(2)}}</text></view>
<view> <view>
<text @click="toggle(1,'bottom')">积分抵扣<i class="iconfont icon-31tishi"></i></text> <text class="txtFont" @click="toggle(1,'bottom')">积分抵扣<i class="iconfont icon-31tishi txtFont"></i></text>
<text class="integralBox" @click="toggle(2,'bottom')" <text class="integralBox" @click="toggle(2,'bottom')"
v-if="intergralInfo.preFortune">{{isDeduction != 'true' ? '未选' : '已选'}}积分,可抵扣{{deductionCore}}<i v-if="intergralInfo.preFortune">{{isDeduction != 'true' ? '未选' : '已选'}}积分,可抵扣{{deductionCore}}<i
class="iconfont icon-youjiantou"></i></text> class="iconfont icon-youjiantou iconStyle"></i></text>
<text style="color: #666666;font-size: 30rpx;" v-else>暂无积分</text> <text style="color: #666666;font-size: 30rpx;" v-else>暂无积分</text>
</view> </view>
<view><text>合计</text> <view><text class="txtFont">合计</text>
<text v-if="isRedirect == 1">{{calculatedPrice}}</text> <text v-if="isRedirect == 1">{{calculatedPrice}}</text>
<text v-else>¥{{Number(totalPrice).toFixed(2)}}</text> <text v-else>¥{{Number(totalPrice).toFixed(2)}}</text>
</view> </view>
...@@ -33,23 +34,23 @@ ...@@ -33,23 +34,23 @@
<view class="paymentItem" @click="selectPaymentMethod(2)"> <view class="paymentItem" @click="selectPaymentMethod(2)">
<view> <view>
<i class="iconfont icon-zhifubao"></i> <i class="iconfont icon-zhifubao"></i>
<text>支付宝支付</text> <text class="txtFont">支付宝支付</text>
</view> </view>
<view class="selectRadio" :class="{'actived':paymentMethod===2}"> <view class="selectRadio" :class="{'actived':paymentMethod===2}">
<i class="iconfont icon-duihao"></i> <i class="iconfont icon-duihao txtFont"></i>
</view> </view>
</view> </view>
<view class="paymentItem" @click="selectPaymentMethod(1)" v-if="deviceType==3"> <view class="paymentItem" @click="selectPaymentMethod(1)" v-if="deviceType==3">
<view> <view>
<i class="iconfont icon-py_weixinzhifu"></i> <i class="iconfont icon-py_weixinzhifu txtFont"></i>
<text>微信支付</text> <text>微信支付</text>
</view> </view>
<view class="selectRadio" :class="{'actived':paymentMethod===1}"> <view class="selectRadio" :class="{'actived':paymentMethod===1}">
<i class="iconfont icon-duihao"></i> <i class="iconfont icon-duihao txtFont"></i>
</view> </view>
</view> </view>
<!-- #ifdef APP-PLUS --> <!-- #ifdef APP-PLUS -->
<!-- <view class="paymentItem" @click="selectPaymentMethod(1)"> <!-- <view class="paymentItem" @click="selectPaymentMethod(1)">
<view> <view>
<i class="iconfont icon-py_weixinzhifu"></i> <i class="iconfont icon-py_weixinzhifu"></i>
<text>微信支付</text> <text>微信支付</text>
...@@ -60,6 +61,8 @@ ...@@ -60,6 +61,8 @@
</view> --> </view> -->
<!-- #endif --> <!-- #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>
...@@ -529,16 +532,30 @@ ...@@ -529,16 +532,30 @@
</script> </script>
<style lang="scss" scoped> <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,6 +702,7 @@ ...@@ -683,6 +702,7 @@
background-color: #fff; background-color: #fff;
margin: 0 10rpx; margin: 0 10rpx;
padding: 20rpx; padding: 20rpx;
border-radius: 10rpx;
} }
.priceInfoContent { .priceInfoContent {
...@@ -693,6 +713,7 @@ ...@@ -693,6 +713,7 @@
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>
<!-- 退课 --> <!-- 退课 -->
...@@ -166,21 +169,32 @@ ...@@ -166,21 +169,32 @@
if (res['success']) { if (res['success']) {
const data = this.orderDetail = res['data']['orderDetail']; const data = this.orderDetail = res['data']['orderDetail'];
if(this.orderDetail.effectiveEndDate){ if(this.orderDetail.effectiveEndDate){
this.orderDetail.effectiveEndDate = dataHandling.dateFormat(this.orderDetail.effectiveEndDate) this.orderDetail.effectiveEndDate = dataHandling.dateFormat2(this.orderDetail.effectiveEndDate)
} }
if(this.orderDetail.orderConfirmDate){ if(this.orderDetail.orderConfirmDate){
this.orderDetail.orderConfirmDate = dataHandling.dateFormat(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()
}) })
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
</view> </view>
</view> </view>
</view> </view>
<tabBar :currentPage="currentPage"></tabBar> <tabBar :currentPage="currentPage" :infoTotal="infoTotal"></tabBar>
</view> </view>
</template> </template>
...@@ -50,9 +50,29 @@ ...@@ -50,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
...@@ -198,7 +218,7 @@ ...@@ -198,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{
......
...@@ -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>
...@@ -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;
......
...@@ -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>
<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: 20rpx 50rpx;font-size: 28rpx;">
<view v-if="dataShowType ==1" style="text-align: right;margin: 20px;"> 总合计:{{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> -->
...@@ -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',
...@@ -74,8 +75,9 @@ ...@@ -74,8 +75,9 @@
<style lang="scss" scoped> <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,7 +133,7 @@ ...@@ -118,7 +133,7 @@
this.tabType = type; this.tabType = type;
}, },
dateFormat(val) { dateFormat(val) {
return dataHandling.dateFormat(val); return dataHandling.dateFormat2(val);
} }
}, },
} }
...@@ -131,13 +146,19 @@ ...@@ -131,13 +146,19 @@
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;
// display: flex;
// align-items: center;
// justify-content: center;
text-align: center; text-align: center;
margin-top: 40rpx;color: #666666; 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>团队排名</text> <text style="font-size: 30rpx;">团队排名</text>
</view> </view>
<view class="team-c" @click="sortswitch()">
<view class="" style="width: 30rpx;height: 30rpx;">
<image style="width: 30rpx;height: 30rpx;" src="../../../static/sort.png" mode=""></image>
</view> </view>
<text v-if="teListsort == true">按销售额收入排序</text> <view class="sortBox">
<text v-else>按销售额排序</text> <view
class="team-c"
@click="sortswitch(item)"
v-for="(item,index) in sortArr"
: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()
}, },
// 这个是时间组件返回的时间值 // 这个是时间组件返回的时间值
...@@ -209,8 +287,14 @@ ...@@ -209,8 +287,14 @@
</script> </script>
<style lang="scss" scoped> <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,29 +11,25 @@ ...@@ -12,29 +11,25 @@
</view> --> </view> -->
<view class="band"> <view class="band">
<view class="contentItem"> <view class="contentItem">
<!-- @keydown="handleKeyDown" <text class="left">真实名称</text>
@compositionstart="isComposing = true"
@compositionend="handleCompositionEnd"
@input="handleInput" -->
<text>真实名称</text>
<input <input
class="user-input" class="user-input"
v-model="optionForm.realName" v-model="optionForm.realName"
type="text" type="text"
placeholder="请输入姓名" placeholder="请输入姓名"
maxlength="20" 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>
...@@ -176,18 +171,6 @@ ...@@ -176,18 +171,6 @@
let that = this; let that = this;
uni.showToast({title: '请填写真实姓名',duration: 2000,icon: 'none'}); uni.showToast({title: '请填写真实姓名',duration: 2000,icon: 'none'});
this.optionForm.realName = '' this.optionForm.realName = ''
// uni.showModal({
// content: '真实姓名不合规,是否继续保存',
// confirmText: '保存',
// cancelText: '取消',
// success: function (res) {
// if (res.confirm) {
// that.saveUserInfo();
// }else{
// return;
// }
// }
// });
}else{ }else{
this.saveUserInfo(); this.saveUserInfo();
} }
...@@ -214,18 +197,21 @@ ...@@ -214,18 +197,21 @@
} }
</script> </script>
<style scoped> <style scoped lang="scss">
.input-tip { .input-tip {
color: #ff5a5f; color: #ff5a5f;
font-size: 12px; font-size: 12px;
margin-left: 10px; 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 {
...@@ -246,16 +232,25 @@ ...@@ -246,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 {
...@@ -271,6 +266,9 @@ ...@@ -271,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 {
......
<template> <template>
<view class="container"> <view class="container">
<view class="kuaiBox" v-for="item in mainMenuLists" :key="item.id">
<view class="kuaiTit">
{{item.categoryName}}
</view>
<view class="kuaiCon">
<!-- @click="goDetail(menuItem)" -->
<view
class="kuaiItem"
v-for="menuItem in item.children.filter(v=>v.isShow)"
:key="menuItem.title"
@click="goDetail(menuItem)"
>
<view class="imgbox">
<view class="iconfont iconSize" :class="`${menuItem.icon}`"></view>
</view>
<view class="">
{{menuItem.title}}
</view>
</view>
<view class="header">
</view>
</view>
<!-- <view class="header">
<view class="" style="width: 60rpx;height: 60rpx;"> <view class="" style="width: 60rpx;height: 60rpx;">
<image style="width: 60rpx;height: 60rpx;" src="../../static/tabbar/sfp_active.png" mode=""></image> <image style="width: 60rpx;height: 60rpx;" src="../../static/tabbar/sfp_active.png" mode=""></image>
</view> </view>
<text>SFP</text> <text>SFP</text>
</view> </view> -->
<view class="content-box"> <!-- <view class="content-box">
<view class="content" v-for="(item,index) in remList" :key="index" style="width: 50%;justify-content: center;"> <view class="content" v-for="(item,index) in remList" :key="index" style="width: 50%;justify-content: center;">
<view class=""> <view class="">
<view class="content-box-item" @click="gotobach(item)"> <view class="content-box-item" @click="gotobach(item)">
...@@ -21,7 +43,7 @@ ...@@ -21,7 +43,7 @@
</view> </view>
</view> </view> -->
<!-- <tabBar :currentPage="currentPage" ></tabBar> --> <!-- <tabBar :currentPage="currentPage" ></tabBar> -->
</view> </view>
</template> </template>
...@@ -33,6 +55,16 @@ ...@@ -33,6 +55,16 @@
data() { data() {
return { return {
currentPage:'product', currentPage:'product',
mainMenuLists:[
{id:'00',categoryName:'计算器',
children:[
{title:'购房能力',icon:'icon-goufang',link: '/sfp/housePurchase/housePurchase',isOpen:true,isShow:true,isTips: false,},
{title:'子女教育',icon:'icon-jiaoyu',link: '/sfp/childEdu/childEdu',isOpen:true,isShow:true,isTips: false,},
{title:'保单单复利',icon:'icon-ROI',link: '/sfp/index/index',isOpen:true,isShow:true,isTips: false,},
],
},
],
remList: [ remList: [
/* { /* {
link:'', link:'',
...@@ -72,12 +104,86 @@ ...@@ -72,12 +104,86 @@
uni.navigateTo({ uni.navigateTo({
url:item.link url:item.link
}) })
},
goDetail(item) {
if (item.isShow == true && item.isOpen == true) {
if (item.isTips == true) {
uni.showModal({
title: item.title,
content: '确定要进行' + item.title + '操作吗?',
showCancel: true,
success: function(res) {
if (res.confirm) {
uni.showToast({
title: '操作成功',
icon: 'none'
});
} else {
console.log('已取消')
}
}
});
} else if (item.link != null) {
uni.navigateTo({
url: item.link
});
}else {
console.log('错误抛出')
}
} else {
common.errorDialog(2, '该模块正在开发中,敬请期待!', '提示');
}
} }
} }
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.container{
box-sizing:border-box;
background-color: #f7f7f7;
height: 92.9vh;
padding: 30rpx;
.kuaiBox{
box-sizing: border-box;
background: #fff;
width: 100%;
padding: 10rpx 20rpx;
border-radius: 8rpx;
.kuaiTit{
font-size: 30rpx;
}
.kuaiCon{
margin-top: 30rpx;
display: flex;
align-items: center;
justify-content: flex-start;
flex-wrap: wrap;
width: 100%;
.kuaiItem{
display: flex;
align-items: center;
flex-direction: column;
margin-bottom: 40rpx;
font-size: 26rpx;
/* 关键修改:计算宽度时考虑间距 */
width: calc((100% - 40rpx * 2) / 3); /* 3个子项,左右各20rpx间距 */
margin-right: 40rpx; /* 右侧间距 */
.imgbox{
margin-bottom: 10rpx;
.iconSize{
font-size: 40rpx;
}
}
}
/* 每行第3个子项去掉右侧间距 */
.kuaiItem:nth-child(3n) {
margin-right: 0;
}
}
}
}
.header { .header {
display: flex; display: flex;
justify-content: center; justify-content: center;
......
...@@ -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>
<view class="returnDetailContainer"> <view class="returnDetailContainer">
<h4>根据交易方式不同,退款处理时间不同,请在对应的时间内注意查看到账情况:</h4> <h4>根据交易方式不同,退款处理时间不同,请在对应的时间内注意查看到账情况:</h4>
......
...@@ -3,11 +3,14 @@ ...@@ -3,11 +3,14 @@
<!-- 时间选择 --> <!-- 时间选择 -->
<view class="top"> <view class="top">
<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="timeSelectContent"> <view class="timeSelectContent" @click="showTime1=true">
<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"
/>
</view> </view>
</view> </view>
<!-- 销售统计 --> <!-- 销售统计 -->
...@@ -80,14 +83,18 @@ ...@@ -80,14 +83,18 @@
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 {fmdata} from '@/util/currentDate.js' import {fmdata} from '@/util/currentDate.js'
import CommonTimePicker from '@/components/commonTimePicker/commonTimePicker.vue';
import dataHandling from "@/util/dataHandling";
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 < 10 ? '0' + (new Date().getMonth() + 1): 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,6 +106,13 @@ ...@@ -99,6 +106,13 @@
} }
}, },
methods: { methods: {
changeStartTime(obj){
this.startDate = obj
this.queryDate=`${obj.year}-${obj.month<10?`0${obj.month}`:obj.month}`
this.userCourseList();
this.userCourseCount();
this.showTime1 = false
},
goBack(){ goBack(){
uni.navigateBack({ uni.navigateBack({
delta: 1 delta: 1
...@@ -116,11 +130,7 @@ ...@@ -116,11 +130,7 @@
url:`/pages/orderDetail/orderDetail?id=${item.orderId}&type=${type}&Withdrawal=1` url:`/pages/orderDetail/orderDetail?id=${item.orderId}&type=${type}&Withdrawal=1`
}) })
}, },
bindDateChange: function(e) {
this.queryDate = e.detail.value;
this.userCourseList();
this.userCourseCount();
},
switchTab(type){ switchTab(type){
this.tabType = type this.tabType = type
this.userCourseList() this.userCourseList()
...@@ -166,8 +176,11 @@ ...@@ -166,8 +176,11 @@
// }, // },
// 查看积分 // 查看积分
viewIntegral(){ viewIntegral(){
// uni.navigateTo({
// url:`/pages/myPoints/myPoints`
// })
uni.navigateTo({ uni.navigateTo({
url:`/pages/myPoints/myPoints` url:`/pages/pointsExchange/pointsExchange`
}) })
}, },
}, },
...@@ -178,6 +191,8 @@ ...@@ -178,6 +191,8 @@
}, },
onShow() { onShow() {
let app22 = getCurrentPages().length let app22 = getCurrentPages().length
this.userCourseCount()
this.userCourseList()
} }
} }
</script> </script>
...@@ -217,6 +232,7 @@ ...@@ -217,6 +232,7 @@
padding: 20rpx 14rpx; padding: 20rpx 14rpx;
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
.statisticItem{ .statisticItem{
flex: 1; flex: 1;
min-width: 33%; min-width: 33%;
...@@ -243,6 +259,9 @@ ...@@ -243,6 +259,9 @@
} }
.saleDetailContent{ .saleDetailContent{
margin: 10rpx 20rpx; margin: 10rpx 20rpx;
.noListTip{
font-size: 30rpx;
}
.saleOrderInfoItem{ .saleOrderInfoItem{
padding: 18rpx 0rpx 18rpx 10rpx; padding: 18rpx 0rpx 18rpx 10rpx;
border-radius: 20rpx; border-radius: 20rpx;
......
...@@ -3,12 +3,12 @@ ...@@ -3,12 +3,12 @@
<view class="top"> <view class="top">
<view class="iconfont icon-youjiantou zuojiantou" @click="goBack()"> <view class="iconfont icon-youjiantou zuojiantou" @click="goBack()">
</view> </view>
<view style="width: 60%;text-align: right;"> <view class="commonTitle" style="width: 60%;text-align: right;">
消息列表 消息列表
</view> </view>
<view class="clear" @click="oneKeyRead()"> <view class="clear" @click="oneKeyRead()" >
<text class="iconfont icon-weibiaoti544"></text> <text class="iconfont icon-saoba myIcon" ></text>
<text>清除未读</text> <text>一键已读</text>
</view> </view>
</view> </view>
<view class="content" v-if="system_msgs_list && system_msgs_list.length > 0"> <view class="content" v-if="system_msgs_list && system_msgs_list.length > 0">
...@@ -39,19 +39,22 @@ ...@@ -39,19 +39,22 @@
export default{ export default{
data(){ data(){
return{ return{
system_msgs_list:null, system_msgs_list:[],
} }
}, },
onLoad(){ onLoad(){
this.querySystemMessage(); this.querySystemMessage();
}, },
onShow(){
this.querySystemMessage();
},
methods:{ methods:{
querySystemMessage() { querySystemMessage() {
api.querySystemMessage({systemType:1,userId:uni.getStorageSync('cffp_userId')}).then(res => { api.querySystemMessage({systemType:1,userId:uni.getStorageSync('cffp_userId')}).then(res => {
if (res['success']) { if (res['success']&&res['data']['dataList']&&res['data']['dataList'].length>0) {
this.system_msgs_list = res['data']['dataList']; this.system_msgs_list = res['data']['dataList'];
}else{ }else{
this.system_msgs_list = null; this.system_msgs_list = [];
} }
}); });
}, },
...@@ -66,26 +69,30 @@ ...@@ -66,26 +69,30 @@
}, },
goBack(){ goBack(){
uni.switchTab({ uni.switchTab({
url:'../index/index' // url:'../index/index',
url:'/pages/personalCenter/personalCenter'
}) })
}, },
oneKeyRead(){ oneKeyRead(){
if( this.system_msgs_list.length == 0){ if( this.system_msgs_list.length == 0){
uni.showToast({ uni.showToast({
title: '暂无可清除未读消息', title: '暂无未读消息',
duration: 2000, duration: 2000,
icon: 'none' icon: 'none'
}) })
return false return
} }
let that = this
uni.showModal({
// title: '确定将所有未读消息标为已读?',
content:'确定将所有未读消息标为已读?',
showCancel: true,
success: function(res) {
if (res.confirm) {
api.oneKeyRead({systemType:1,userId:uni.getStorageSync('cffp_userId')}).then((res)=>{ api.oneKeyRead({systemType:1,userId:uni.getStorageSync('cffp_userId')}).then((res)=>{
if(res['success']){ if(res['success']){
uni.showToast({ that.querySystemMessage();
title: '已清除所有未读信息',
duration: 2000,
icon: 'none'
})
this.querySystemMessage();
}else{ }else{
uni.showToast({ uni.showToast({
title: res['message'], title: res['message'],
...@@ -94,6 +101,27 @@ ...@@ -94,6 +101,27 @@
}) })
} }
}) })
} else if (res.cancel) {
console.log('用户点击取消');
}
}
});
// api.oneKeyRead({systemType:1,userId:uni.getStorageSync('cffp_userId')}).then((res)=>{
// if(res['success']){
// uni.showToast({
// title: '所有信息都已读',
// duration: 2000,
// icon: 'none'
// })
// this.querySystemMessage();
// }else{
// uni.showToast({
// title: res['message'],
// duration: 2000,
// icon: 'none'
// })
// }
// })
} }
} }
} }
...@@ -112,9 +140,10 @@ ...@@ -112,9 +140,10 @@
.clear{ .clear{
display: flex; display: flex;
align-items: center; align-items: center;
.icon-weibiaoti544{ flex-direction: column;
.myIcon{
color: #5359cd; color: #5359cd;
font-size: 50rpx; font-size: 40rpx;
} }
text:nth-child(2){ text:nth-child(2){
color: #999999; color: #999999;
...@@ -151,7 +180,7 @@ ...@@ -151,7 +180,7 @@
margin-bottom: 20rpx; margin-bottom: 20rpx;
padding-top: 20rpx; padding-top: 20rpx;
.title{ .title{
font-size: 40rpx; font-size: 30rpx;
} }
.date{ .date{
color: #999999; color: #999999;
...@@ -169,7 +198,7 @@ ...@@ -169,7 +198,7 @@
.announcement_des{ .announcement_des{
margin: 20rpx 0; margin: 20rpx 0;
color: #666666; color: #666666;
font-size: 32rpx; font-size: 26rpx;
} }
} }
.to_detail{ .to_detail{
......
<template> <template>
<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 class="commonTitle">消息详情</text>
</view> </view>
<view class="announcement_detail_wrapper container"> <view class="announcement_detail_wrapper container">
<view class="content"> <view class="content">
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
<view class="date"> <view class="date">
发布时间:{{systemMsgInfo.createdAt}} 发布时间:{{systemMsgInfo.createdAt}}
</view> </view>
<view v-html="systemMsgInfo.context"></view> <view style="font-size: 25rpx;" v-html="systemMsgInfo.context"></view>
</view> </view>
</view> </view>
</template> </template>
...@@ -81,6 +81,7 @@ ...@@ -81,6 +81,7 @@
margin: 20rpx 0; margin: 20rpx 0;
border-bottom: 2rpx #F8F8F8 solid; border-bottom: 2rpx #F8F8F8 solid;
padding-bottom: 20rpx; padding-bottom: 20rpx;
font-size: 24rpx;
} }
.content{ .content{
margin-top: 20rpx; margin-top: 20rpx;
......
<template> <template>
<view class=""> <view class="">
<view class="content_wrapper"> <view class="content_wrapper">
<h4>劳务报酬税缴纳规则</h4> <h4 style="font-size: 28rpx;">劳务报酬税缴纳规则</h4>
<view class="content"> <view class="content">
根据国家相关法律法规,提现将由银盾家办官方代缴个税后(按劳务报酬税率计算),付款到用户的微信钱包内。 根据规则,奖实行按月累计扣税,若在当月发起多次提现,本次扣税基数将累计当月全部的提现金额。以下供参考,详细可在国家税务局查询。 根据国家相关法律法规,提现将由银盾家办公司代缴个税后(按劳务报酬税率计算),付款到用户的微信钱包/支付宝账户/银行卡内。 根据规则,将实行按月累计扣税,若在当月发起多次提现,本次扣税基数将累计当月全部的提现金额。以下内容供参考,详细内容可在国家税务局查询。
</view> </view>
<h4 style="text-align: center;">劳务报酬所得预扣率表</h4> <h4 style="text-align: center;font-size: 28rpx;">劳务报酬所得预扣率表</h4>
<view style="color:#666;text-align: center;margin-bottom: 20rpx;"> <view style="color:#666;text-align: center;margin-bottom: 20rpx;font-size: 22rpx;">
(居民个人劳务报酬所得预预缴适用) (居民个人劳务报酬所得预预缴适用)
</view> </view>
<view style="margin-bottom: 20rpx;"> <view style="margin-bottom: 20rpx;">
<view class="list"> <view class="list">
<view class="list_item title">级数</view> <view class="list_item title">级数</view>
<view class="list_item title">预扣预缴应纳所得额</view> <view class="list_item title">预扣预缴应纳所得额</view>
<view class="list_item title">预扣率(%)</view> <view class="list_item title">预扣率(%)</view>
<view class="list_item title">速算扣除数</view> <view class="list_item title">速算扣除数</view>
</view> </view>
...@@ -37,7 +37,19 @@ ...@@ -37,7 +37,19 @@
</view> </view>
<view style="color: #666666;font-size: 24rpx;"> <view style="color: #666666;font-size: 24rpx;">
应纳税所得额=劳务报酬所得 - 减除费用,即: 当劳务报酬所得不超过4000元: 应纳税所得额=劳务报酬所得 - 800当劳务报酬所得超过: 应纳税所得额=劳务报酬所得(超过4000元)×(1-20%)预扣预缴税额=应纳税所得额×预扣率-速算扣除数。 <view class="">
应纳税所得额=劳务报酬所得 - 减除费用,即:
</view>
<view class="">
当劳务报酬所得不超过4000元: 应纳税所得额=劳务报酬所得 - 800;
</view>
<view class="">
当劳务报酬所得超过4000元: 应纳税所得额=劳务报酬所得 ×(1-20%);
</view>
<view class="">
预扣预缴税额=应纳税所得额×预扣率-速算扣除数。
</view>
</view> </view>
<navigator class="btn" delta="1" open-type="navigateBack">知道了</navigator> <navigator class="btn" delta="1" open-type="navigateBack">知道了</navigator>
</view> </view>
...@@ -67,13 +79,18 @@ ...@@ -67,13 +79,18 @@
h4{ h4{
margin: 20rpx auto; margin: 20rpx auto;
} }
.btn{
background-color: #2A36AD;
font-size: 28rpx;
margin-bottom: 20rpx;
}
.content{ .content{
color: #666666; color: #666666;
font-size: 24rpx; font-size: 24rpx;
background: #fff; background: #fff;
} }
.list:nth-of-type(even) .list_item{ .list:nth-of-type(even) .list_item{
border-right:1px solid #20269B; border-right:1px solid #2A36AD;
} }
.list:nth-of-type(odd) .list_item{ .list:nth-of-type(odd) .list_item{
border-right:1px solid #fff; border-right:1px solid #fff;
...@@ -83,7 +100,7 @@ ...@@ -83,7 +100,7 @@
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
font-size: 24rpx; font-size: 24rpx;
border: 2rpx #20269B solid; border: 2rpx #2A36AD solid;
border-bottom: 0; border-bottom: 0;
.list_item{ .list_item{
width: 20%; width: 20%;
...@@ -98,7 +115,7 @@ ...@@ -98,7 +115,7 @@
width: 50%; width: 50%;
} }
.title{ .title{
background: #20269B; background: #2A36AD;
color: #fff; color: #fff;
} }
.list_item:nth-child(4){ .list_item:nth-child(4){
...@@ -106,7 +123,7 @@ ...@@ -106,7 +123,7 @@
} }
} }
.list:last-child{ .list:last-child{
border-bottom:2rpx #20269B solid; border-bottom:2rpx #2A36AD solid;
} }
} }
......
...@@ -28,10 +28,10 @@ ...@@ -28,10 +28,10 @@
<view class="paymentItem" @click="selectPaymentMethod(2)"> <view class="paymentItem" @click="selectPaymentMethod(2)">
<view> <view>
<i class="iconfont icon-zhifubao"></i> <i class="iconfont icon-zhifubao"></i>
<text>支付宝钱包</text> <text style="font-size: 28rpx;">支付宝钱包</text>
</view> </view>
<view class="selectRadio" :class="{'actived':paymentMethod===2}"> <view class="selectRadio" :class="{'actived':paymentMethod===2}">
<i class="iconfont icon-duihao"></i> <i class="iconfont icon-duihao" style="font-size: 28rpx;"></i>
</view> </view>
</view> </view>
...@@ -61,7 +61,7 @@ ...@@ -61,7 +61,7 @@
3、如需帮助,请联系银盾家办客服电话400-921-9290; 3、如需帮助,请联系银盾家办客服电话400-921-9290;
</view> </view>
</view> </view>
<view class="btn" @click="confirmWithdrawal()" :class="{'gray':readonlyFlag}" style="bottom: 30rpx;"> <view class="btn" @click="confirmWithdrawal()" :class="{'gray':readonlyFlag}" style="bottom: 30rpx;font-size: 28rpx;">
确认提现 确认提现
</view> </view>
</view> </view>
...@@ -157,6 +157,7 @@ ...@@ -157,6 +157,7 @@
if(res['success']){ if(res['success']){
uni.showModal({ uni.showModal({
content: '提现成功!', content: '提现成功!',
showCancel: false, // 不显示取消按钮
success: function (res) { success: function (res) {
if (res.confirm) { if (res.confirm) {
console.log('用户点击确定'); console.log('用户点击确定');
...@@ -168,6 +169,7 @@ ...@@ -168,6 +169,7 @@
}else{ }else{
uni.showModal({ uni.showModal({
content: res['message'], content: res['message'],
showCancel: false, // 不显示取消按钮
success: function (res) { success: function (res) {
if (res.confirm) { if (res.confirm) {
console.log('用户点击确定'); console.log('用户点击确定');
...@@ -332,13 +334,16 @@ ...@@ -332,13 +334,16 @@
} }
view:nth-child(2){ view:nth-child(2){
font-size: 40rpx; font-size: 40rpx;
color: #0A2F99; color: #2A36AD;
} }
} }
.content_wrapper{ .content_wrapper{
background: #fff; background: #fff;
margin: 20rpx auto; margin: 20rpx auto;
padding:0 30rpx; padding:0 30rpx;
.btn{
background-color: #2A36AD;
}
.btn.gray{ .btn.gray{
background: #666; background: #666;
} }
...@@ -347,6 +352,7 @@ ...@@ -347,6 +352,7 @@
padding: 20rpx 0; padding: 20rpx 0;
border-bottom: 2rpx solid #F2F2F2; border-bottom: 2rpx solid #F2F2F2;
justify-content: space-between; justify-content: space-between;
font-size: 28rpx;
} }
h4{ h4{
font-size: 32rpx; font-size: 32rpx;
...@@ -399,7 +405,7 @@ ...@@ -399,7 +405,7 @@
} }
.icon-gou{ .icon-gou{
font-size: 48rpx; font-size: 48rpx;
color: #0A2F99; color: #2A36AD;
} }
} }
...@@ -410,7 +416,7 @@ ...@@ -410,7 +416,7 @@
margin-bottom: 10rpx; margin-bottom: 10rpx;
} }
.rule{ .rule{
color: #0A2F99; color: #2A36AD
} }
} }
} }
......
...@@ -204,9 +204,12 @@ ...@@ -204,9 +204,12 @@
}, },
methods: { methods: {
goBack(){ goBack(){
uni.navigateTo({ uni.navigateBack({
url:'/pages/product/finance-calculator' delta: 1
}) });
// uni.navigateTo({
// url:'/pages/product/finance-calculator'
// })
}, },
init() { init() {
this.$refs.chart.init(echarts, chart => { this.$refs.chart.init(echarts, chart => {
......
...@@ -354,9 +354,12 @@ ...@@ -354,9 +354,12 @@
}, },
methods:{ methods:{
goBack(){ goBack(){
uni.navigateTo({ uni.navigateBack({
url:'/pages/product/finance-calculator' delta: 1
}) });
// uni.navigateTo({
// url:'/pages/product/finance-calculator'
// })
}, },
init() { init() {
this.$refs.chart.init(echarts, chart => { this.$refs.chart.init(echarts, chart => {
......
...@@ -257,9 +257,12 @@ ...@@ -257,9 +257,12 @@
}, },
methods: { methods: {
goBack(){ goBack(){
uni.navigateTo({ uni.navigateBack({
url:'/pages/product/finance-calculator' delta: 1
}) });
// uni.navigateTo({
// url:'/pages/product/finance-calculator'
// })
}, },
/* checkToken(){ /* checkToken(){
api.checkToken().then(res=>{ api.checkToken().then(res=>{
......
/* Logo 字体 */
@font-face {
font-family: "iconfont logo";
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
}
.logo {
font-family: "iconfont logo";
font-size: 160px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/* tabs */
.nav-tabs {
position: relative;
}
.nav-tabs .nav-more {
position: absolute;
right: 0;
bottom: 0;
height: 42px;
line-height: 42px;
color: #666;
}
#tabs {
border-bottom: 1px solid #eee;
}
#tabs li {
cursor: pointer;
width: 100px;
height: 40px;
line-height: 40px;
text-align: center;
font-size: 16px;
border-bottom: 2px solid transparent;
position: relative;
z-index: 1;
margin-bottom: -1px;
color: #666;
}
#tabs .active {
border-bottom-color: #f00;
color: #222;
}
.tab-container .content {
display: none;
}
/* 页面布局 */
.main {
padding: 30px 100px;
width: 960px;
margin: 0 auto;
}
.main .logo {
color: #333;
text-align: left;
margin-bottom: 30px;
line-height: 1;
height: 110px;
margin-top: -50px;
overflow: hidden;
*zoom: 1;
}
.main .logo a {
font-size: 160px;
color: #333;
}
.helps {
margin-top: 40px;
}
.helps pre {
padding: 20px;
margin: 10px 0;
border: solid 1px #e7e1cd;
background-color: #fffdef;
overflow: auto;
}
.icon_lists {
width: 100% !important;
overflow: hidden;
*zoom: 1;
}
.icon_lists li {
width: 100px;
margin-bottom: 10px;
margin-right: 20px;
text-align: center;
list-style: none !important;
cursor: default;
}
.icon_lists li .code-name {
line-height: 1.2;
}
.icon_lists .icon {
display: block;
height: 100px;
line-height: 100px;
font-size: 42px;
margin: 10px auto;
color: #333;
-webkit-transition: font-size 0.25s linear, width 0.25s linear;
-moz-transition: font-size 0.25s linear, width 0.25s linear;
transition: font-size 0.25s linear, width 0.25s linear;
}
.icon_lists .icon:hover {
font-size: 100px;
}
.icon_lists .svg-icon {
/* 通过设置 font-size 来改变图标大小 */
width: 1em;
/* 图标和文字相邻时,垂直对齐 */
vertical-align: -0.15em;
/* 通过设置 color 来改变 SVG 的颜色/fill */
fill: currentColor;
/* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
normalize.css 中也包含这行 */
overflow: hidden;
}
.icon_lists li .name,
.icon_lists li .code-name {
color: #666;
}
/* markdown 样式 */
.markdown {
color: #666;
font-size: 14px;
line-height: 1.8;
}
.highlight {
line-height: 1.5;
}
.markdown img {
vertical-align: middle;
max-width: 100%;
}
.markdown h1 {
color: #404040;
font-weight: 500;
line-height: 40px;
margin-bottom: 24px;
}
.markdown h2,
.markdown h3,
.markdown h4,
.markdown h5,
.markdown h6 {
color: #404040;
margin: 1.6em 0 0.6em 0;
font-weight: 500;
clear: both;
}
.markdown h1 {
font-size: 28px;
}
.markdown h2 {
font-size: 22px;
}
.markdown h3 {
font-size: 16px;
}
.markdown h4 {
font-size: 14px;
}
.markdown h5 {
font-size: 12px;
}
.markdown h6 {
font-size: 12px;
}
.markdown hr {
height: 1px;
border: 0;
background: #e9e9e9;
margin: 16px 0;
clear: both;
}
.markdown p {
margin: 1em 0;
}
.markdown>p,
.markdown>blockquote,
.markdown>.highlight,
.markdown>ol,
.markdown>ul {
width: 80%;
}
.markdown ul>li {
list-style: circle;
}
.markdown>ul li,
.markdown blockquote ul>li {
margin-left: 20px;
padding-left: 4px;
}
.markdown>ul li p,
.markdown>ol li p {
margin: 0.6em 0;
}
.markdown ol>li {
list-style: decimal;
}
.markdown>ol li,
.markdown blockquote ol>li {
margin-left: 20px;
padding-left: 4px;
}
.markdown code {
margin: 0 3px;
padding: 0 5px;
background: #eee;
border-radius: 3px;
}
.markdown strong,
.markdown b {
font-weight: 600;
}
.markdown>table {
border-collapse: collapse;
border-spacing: 0px;
empty-cells: show;
border: 1px solid #e9e9e9;
width: 95%;
margin-bottom: 24px;
}
.markdown>table th {
white-space: nowrap;
color: #333;
font-weight: 600;
}
.markdown>table th,
.markdown>table td {
border: 1px solid #e9e9e9;
padding: 8px 16px;
text-align: left;
}
.markdown>table th {
background: #F7F7F7;
}
.markdown blockquote {
font-size: 90%;
color: #999;
border-left: 4px solid #e9e9e9;
padding-left: 0.8em;
margin: 1em 0;
}
.markdown blockquote p {
margin: 0;
}
.markdown .anchor {
opacity: 0;
transition: opacity 0.3s ease;
margin-left: 8px;
}
.markdown .waiting {
color: #ccc;
}
.markdown h1:hover .anchor,
.markdown h2:hover .anchor,
.markdown h3:hover .anchor,
.markdown h4:hover .anchor,
.markdown h5:hover .anchor,
.markdown h6:hover .anchor {
opacity: 1;
display: inline-block;
}
.markdown>br,
.markdown>p>br {
clear: both;
}
.hljs {
display: block;
background: white;
padding: 0.5em;
color: #333333;
overflow-x: auto;
}
.hljs-comment,
.hljs-meta {
color: #969896;
}
.hljs-string,
.hljs-variable,
.hljs-template-variable,
.hljs-strong,
.hljs-emphasis,
.hljs-quote {
color: #df5000;
}
.hljs-keyword,
.hljs-selector-tag,
.hljs-type {
color: #a71d5d;
}
.hljs-literal,
.hljs-symbol,
.hljs-bullet,
.hljs-attribute {
color: #0086b3;
}
.hljs-section,
.hljs-name {
color: #63a35c;
}
.hljs-tag {
color: #333333;
}
.hljs-title,
.hljs-attr,
.hljs-selector-id,
.hljs-selector-class,
.hljs-selector-attr,
.hljs-selector-pseudo {
color: #795da3;
}
.hljs-addition {
color: #55a532;
background-color: #eaffea;
}
.hljs-deletion {
color: #bd2c00;
background-color: #ffecec;
}
.hljs-link {
text-decoration: underline;
}
/* 代码高亮 */
/* PrismJS 1.15.0
https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
/**
* prism.js default theme for JavaScript, CSS and HTML
* Based on dabblet (http://dabblet.com)
* @author Lea Verou
*/
code[class*="language-"],
pre[class*="language-"] {
color: black;
background: none;
text-shadow: 0 1px white;
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
text-align: left;
white-space: pre;
word-spacing: normal;
word-break: normal;
word-wrap: normal;
line-height: 1.5;
-moz-tab-size: 4;
-o-tab-size: 4;
tab-size: 4;
-webkit-hyphens: none;
-moz-hyphens: none;
-ms-hyphens: none;
hyphens: none;
}
pre[class*="language-"]::-moz-selection,
pre[class*="language-"] ::-moz-selection,
code[class*="language-"]::-moz-selection,
code[class*="language-"] ::-moz-selection {
text-shadow: none;
background: #b3d4fc;
}
pre[class*="language-"]::selection,
pre[class*="language-"] ::selection,
code[class*="language-"]::selection,
code[class*="language-"] ::selection {
text-shadow: none;
background: #b3d4fc;
}
@media print {
code[class*="language-"],
pre[class*="language-"] {
text-shadow: none;
}
}
/* Code blocks */
pre[class*="language-"] {
padding: 1em;
margin: .5em 0;
overflow: auto;
}
:not(pre)>code[class*="language-"],
pre[class*="language-"] {
background: #f5f2f0;
}
/* Inline code */
:not(pre)>code[class*="language-"] {
padding: .1em;
border-radius: .3em;
white-space: normal;
}
.token.comment,
.token.prolog,
.token.doctype,
.token.cdata {
color: slategray;
}
.token.punctuation {
color: #999;
}
.namespace {
opacity: .7;
}
.token.property,
.token.tag,
.token.boolean,
.token.number,
.token.constant,
.token.symbol,
.token.deleted {
color: #905;
}
.token.selector,
.token.attr-name,
.token.string,
.token.char,
.token.builtin,
.token.inserted {
color: #690;
}
.token.operator,
.token.entity,
.token.url,
.language-css .token.string,
.style .token.string {
color: #9a6e3a;
background: hsla(0, 0%, 100%, .5);
}
.token.atrule,
.token.attr-value,
.token.keyword {
color: #07a;
}
.token.function,
.token.class-name {
color: #DD4A68;
}
.token.regex,
.token.important,
.token.variable {
color: #e90;
}
.token.important,
.token.bold {
font-weight: bold;
}
.token.italic {
font-style: italic;
}
.token.entity {
cursor: help;
}
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