Commit 5d5d57f0 by yuzhenWang

发布生产合并分支

parent e4b94a5a
......@@ -2,9 +2,12 @@
import initApp from "@/util/router.js";
import {interceptor} from "@/util/interceptor";
import {baseURL,apiURL,cffpURL} from "@/environments/environment";
import api from './api/api';
export default {
onLaunch: function() {
console.log('App Launch');
// 处理外部链接参数
this.handleExternalUrlParams();
// #ifdef APP-PLUS
// uni.downloadFile({
// url: '/cffpUpdate/__UNI__ED34740.wgt',
......@@ -61,20 +64,128 @@
// #endif
interceptor();
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() {
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>
<style>
@import "@/static/font1/iconfont.css";
@import "@/static/font/iconfont.css";
/*每个页面公共css */
@font-face {
font-family: 'iconfont';
......@@ -93,16 +204,19 @@
}
.container{
background-color: #FBFBFB;
min-height: 100vh; /* 使用视口高度 */
height: auto !important;
height: 100vh;
}
.uni-popup .uni-popup__wrapper{
margin: 30rpx!important;
/* margin: 30rpx!important; */
}
.richTextContent img{
width: 100% !important;
}
.popupContainer .uni-popup .uni-popup__wrapper{
width: 80%;
border-radius: 20rpx;
/* width: 80%;
border-radius: 20rpx; */
}
.container uni-slider{
margin: 0;
......@@ -147,4 +261,11 @@
text-align: center;
line-height: 50rpx;
}
.iconStyle{
color: rgba(51, 51, 51, 1);
font-size: 28rpx;
}
.commonTitle{
font-size: 30rpx;
}
</style>
......@@ -6,8 +6,8 @@
<input class="uni-input" name="invitationCode" maxlength="11" placeholder="输入手机号" v-model="mobile" />
</view>
<view class="login-code">
<input name="form.code" placeholder="输入验证码" v-model="code" type="number" maxlength="6" />
<text style="width: 200rpx;" @click="sendMessage()" :class="{'grey':disabledSendBtn}">{{sendCode}}</text>
<input style="font-size: 26rpx;" name="form.code" placeholder="输入验证码" v-model="code" type="number" maxlength="6" />
<text style="width: 200rpx;text-align: right;" @click="sendMessage()" :class="{'grey':disabledSendBtn}">{{sendCode}}</text>
</view>
<view class="agree">
<label class="radio" style="padding-right: 10rpx;">
......@@ -149,9 +149,10 @@
<style lang="scss" scoped>
.content-box {
position: absolute;
// left:50%;
left: 10%;
top: 30%;
left:50%;
// left: 10%;
top: 50%;
transform: translate(-50%,-50%);
width: 630rpx;
height: 500rpx;
background: #FFFFFF;
......@@ -162,6 +163,10 @@
.inputItem {
border-bottom: 2rpx solid #CECECE;
padding: 20rpx;
font-size: 28rpx;
.uni-input{
font-size: 26rpx;
}
}
.file{
color: #20279B;
......@@ -184,7 +189,7 @@
justify-content: space-between;
border-bottom: 1px solid #CECECE;
padding: 20rpx;
font-size: 26rpx;
.grey {
font-size: 24rpx;
color: #CECECE;
......@@ -197,7 +202,7 @@
height: 100vh;
top: 50%;
left: 50%;
transform: translate3d(-50%, -50%, 0);
transform: translate(-50%, -50%);
/* width: -webkit-fill-available;
height: -webkit-fill-available; */
-webkit-backface-visibility: hidden;
......@@ -225,5 +230,6 @@
display: flex;
justify-content: center;
color: #FFFFFF;
font-size: 26rpx;
}
</style>
<template>
<swiper class="swiper" circular :indicator-dots="indicatorDots" :autoplay="autoplay" :interval="interval"
: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:'#'"> -->
<image :src="bannerItem.filePath" mode="widthFix" @click="jumpUrl(bannerItem.destinationAddress)"></image>
<!-- </uni-link> -->
......@@ -31,22 +31,28 @@
if (!url) {
return false
} else {
let index = url.indexOf(`${shareURL}/pages/`);
if (index != -1) {
const match = url.match(/fileId=([^&]*)/);
const fileId = match ? match[1] : null;
uni.navigateTo({
url: url.substring(index + 16, url.length)
url: `/pages/courseDetail/courseDetail?fileId=${fileId}`
})
} else {
// #ifdef H5
window.location.href = url;
// #endif
// #ifdef APP-PLUS
uni.navigateTo({
url: '/components/webview?url=' + url
// page.json定义的路径 传url 到webview界面去接收 实现跳转
})
//#endif
}
// 原来的跳转逻辑,不明白为啥这样跳
// let index = url.indexOf(`${shareURL}/pages/`);
// if (index != -1) {
// uni.navigateTo({
// url: url.substring(index + 16, url.length)
// })
// } else {
// // #ifdef H5
// window.location.href = url;
// // #endif
// // #ifdef APP-PLUS
// uni.navigateTo({
// url: '/components/webview?url=' + url
// // page.json定义的路径 传url 到webview界面去接收 实现跳转
// })
// //#endif
// }
}
}
......@@ -57,6 +63,6 @@
<style lang="scss">
.swiper {
height: 228rpx;
height: 300rpx;
}
</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 @@
<view class="text-wrap">{{summaryBox}}</view>
</view>
<view class="dataBox" v-if="dataList">
<view class="price" >{{dataList.coursePrice}}</view>
<text v-if="dataList.coursePrice == 0">免费</text>
<view class="price" v-if="dataList.coursePrice != 0" >{{dataList.coursePrice}}</view>
<!-- <text v-if="dataList.coursePrice == 0">免费</text> -->
<text v-if="dataList.coursePrice != 0">{{dataList.salesNumber}}人购买</text>
</view>
<view class="tagListBox" v-if="tagList || fileLecturerId">
<!-- <view class="tagListBox" v-if="tagList || fileLecturerId">
<template v-if="tagList">
<view class="tagItem" v-for="tagItem in tagConcat(tagList.v1,tagList.v2)">{{tagItem}}</view>
</template>
......@@ -24,7 +24,7 @@
<view class="tagItem" v-for="tagItem in tagConcat(_tagList.v1,_tagList.v2)">{{tagItem}}</view>
</template>
</view>
</view> -->
</view>
</view>
</template>
......
<template>
<view class="wrapper">
<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 class="logo">
<image :src="imgSrc" alt="logo" srcset="" class="iconBox" mode="widthFix"></image>
<!-- <view>欢迎登录使用{{companyName}}APP</view> -->
<view>欢迎登录使用{{companyName}}</view>
<view>欢迎使用{{companyName}}</view>
</view>
<view class="content">
<view class="login_title">
<!-- <view class="login_title">
{{loginTypeName}}
</view>
<form>
<!-- <view class="inputItem" v-if="loginType==='register'">
<input class="uni-input" name="invitationCode" placeholder="输入邀请码(非必填)" v-model="invitation_code"/>
</view> -->
<form>
<view class="inputItem" v-if="loginType!=='agentlogin'">
<input type="number" class="uni-input" name="mobileNo" placeholder="输入手机号" v-model="form.mobile" maxlength="11"/>
</view>
......@@ -24,7 +21,7 @@
</view>
<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"/>
<text @click="sendMessage()" :class="{'grey':disabledSendBtn}">{{sendCodeHtml}}</text>
<text style="font-size: 28rpx;" @click="sendMessage()" :class="{'grey':disabledSendBtn}">{{sendCodeHtml}}</text>
</view>
<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"/>
......@@ -43,24 +40,25 @@
</view>
</form>
<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 class="file" @click="getFile(1)">服务协议</text>
<text></text>
<text class="file" @click="getFile(2)">隐私政策</text>
</view>
<view class="login_btn" @click="loginInCheck()" v-if="loginType!='resetpw'">
{{loginType=='register'?'注册':'登录'}}
<!-- {{loginType=='register'?'注册':'登录'}} -->
登录 / 注册
</view>
<view class="login_btn" v-if="loginType=='resetpw'" @click="loginInCheck()">
保存
</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 v-if="loginType==='codelogin'" @click="loginType='register';loginTypeName='注册'">立即注册</text>
<text v-if="loginType!=='codelogin'" @click="loginType='resetpw';loginTypeName='重置密码'">忘记密码</text>
</view>
<view v-if="loginType!='resetpw'">
</view> -->
<!-- <view v-if="loginType!='resetpw'">
<view class="other_login">
<text class="text_line"></text>
<text style="margin: 0 40rpx;position: relative;top: 10rpx;">其他登录</text>
......@@ -68,9 +66,8 @@
</view>
<view class="login_type">
<text @click="loginType='visitor';initForm();loginIn(1)">游客</text>
<!-- <text @click="loginType = 'agentlogin';loginTypeName = '管理账号登录';">代理商</text> -->
</view>
</view>
</view> -->
</view>
</view>
</template>
......@@ -92,6 +89,7 @@
//用户输入信息
form:{
mobile:null,
// code:'250106',
code:null,
password:null,
},
......@@ -129,7 +127,9 @@
this.loginType = 'codelogin';
return;
}
this.loginType='visitor'
this.initForm()
uni.removeTabBarBadge({ index: 3 });
// 获取跳转来源(通过路由参数)
const pages = getCurrentPages();
const currentPage = pages[pages.length - 1];
......@@ -141,13 +141,16 @@
url:'/pages/index/index'
})
} 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) {
// 从普通页跳转过来,且页面栈中有上一页,直接返回
uni.navigateBack({ delta: 1 });
this.loginIn(1,'')
}else {
// 默认情况(如直接打开登录页),跳转到首页
uni.switchTab({
......@@ -198,7 +201,7 @@
}
}, 1000);
},
loginIn(loginType){
loginIn(loginType,urlType){
uni.showLoading({
title: '加载中...'
});
......@@ -213,9 +216,16 @@
uni.setStorageSync('cffp_userId',this.userId);
uni.setStorageSync('loginType',this.loginType);
uni.setStorageSync('uni-token', res.data['token']);
if(urlType == 'personalCenter'){
uni.switchTab({
url:'/pages/personalCenter/personalCenter'
})
}else {
uni.switchTab({
url:'/pages/index/index'
})
}
}else{
uni.showToast({
title: res['message'],
......@@ -393,13 +403,15 @@
margin: 40rpx;
width: 40rpx;
height: 40rpx;
// background: url('../../static/rpsloging.png') no-repeat;
}
.wrapper{
background: #20279B;
position: relative;
overflow: auto;
height: 100vh;
height:100vh;
padding-top: 50rpx;
box-sizing: border-box;
.logo{
text-align: center;
color: #fff;
......@@ -420,7 +432,7 @@
padding: 40rpx 60rpx;
overflow: hidden;
margin-bottom: 30rpx;
min-height: 65%;
// min-height: 65%;
.login_title{
text-align: center;
font-size: 40rpx;
......@@ -430,12 +442,14 @@
.inputItem{
position: relative;
margin-bottom: 30rpx;
font-size: 28rpx;
.codeBtn{
width: 70%;
}
.uni-input{
height: 80rpx;
line-height: 80rpx;
font-size: 28rpx;
}
.uni-input:after{
content: " ";
......@@ -465,6 +479,10 @@
font-size: 28rpx;
color:#666;
text-align: center;
.radio{
width: 30rpx;
height: 30rpx;
}
.file{
color: #20279B;
text-decoration: none;
......@@ -472,22 +490,28 @@
}
.login_btn{
height: 100rpx;
line-height: 100rpx;
text-align: center;
// line-height: 100rpx;
// text-align: center;
display: flex;
align-items: center;
justify-content: center;
margin: 40rpx auto;
color: #fff;
background: #20279B;
border-radius: 80rpx;
font-size: 28rpx;
}
.login_type{
display: flex;
justify-content: space-between;
margin: 30rpx;
font-size: 28rpx;
}
.other_login{
text-align: center;
color: #20279B;
position: relative;
font-size: 28rpx;
.text_line{
display: inline-block;
height: 1px;
......
......@@ -5,13 +5,13 @@
<view v-for="item in menuList.filter(v=>v.isShow)" :key="item.title" @click="goDetail(item)"
class="liBox">
<view class="infoBox">
<text>{{item.title}}</text>
<text style="font-size: 28rpx;">{{item.title}}</text>
</view>
<view class="iconBox">
<view class="" v-if="item.isType == 'text'">
<text>{{item.contentType}}</text>
<text style="font-size: 28rpx;">{{item.contentType}}</text>
</view>
<i v-else class="iconfont icon-youjiantou"></i>
<i v-else class="iconfont icon-youjiantou iconStyle"></i>
</view>
</view>
</view>
......
<template>
<view class="container">
<view class="d-table">
<view class="container" style="box-sizing: border-box;">
<view class="d-table" style="box-sizing: border-box;">
<!-- <view class="d-box">
<view class="d-td" v-for="item in datatitleList">
<span class="">{{item}}</span>
......@@ -15,15 +15,10 @@
<!-- 为了提高dom渲染效率,当list产生破坏性变动时(如删除其中一项,或者排序等)必须使用唯一确定的key,而不能使用index -->
<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])">
<!-- :class="`padding-left-${item.level * 5 + 10}`"-->
<view class="d-td">
<view class="" style="display: flex;text-align: left;">
<!-- <view class="">
<uni-icons v-if="item.hasChildren && !treeList[0]"
: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'"
<view class="" style="display: flex;text-align: center;">
<!-- <view class="d-td" v-if="item.levelCode == 'B1'&& item.itemType == '1'"
@click="open(item, i)" :style="{'margin-left':(item.level * 20)+'rpx'}">
<view class="" style="display: flex;">
<text>{{item.areaCenterName}}</text>
......@@ -33,11 +28,10 @@
</view>
</view>
</view>
<view class="d-td" @click="open(item, i)"
</view> -->
<!-- <view class="d-td" @click="open(item, i)"
v-else-if="item.levelCode == 'C3'&& item.itemType == '1'"
:style="{'margin-left':(item.level * 20)+'rpx'}">
<!-- <text style="color: #FFFFFF;">{{item.areaCenterName}}</text> -->
<view class="" style="display: flex;">
<text>{{item.areaCenterName}}</text>
<view class="" style="width: 36rpx;height: 36rpx;margin-left: 5rpx; ">
......@@ -45,11 +39,10 @@
mode="widthFix"></image>
</view>
</view>
</view>
<view class="d-td" @click="open(item, i)"
</view> -->
<!-- <view class="d-td" @click="open(item, i)"
v-else-if="item.levelCode == 'C2'&& item.itemType == '1'"
:style="{'margin-left':(item.level * 20)+'rpx'}">
<!-- <text style="color: #FFFFFF;">{{item.areaCenterName}}</text> -->
<view class="" style="display: flex;">
<text>{{item.areaCenterName}}</text>
<view class="" style="width: 36rpx;height: 36rpx;margin-left: 5rpx;">
......@@ -57,9 +50,13 @@
mode="widthFix"></image>
</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 class="d-td" @click="open(item, i)" v-else :style="{'margin-left':(item.level * 20)+'rpx'}">
<text>{{item.name}}</text>
</view>
<!-- <view class="content-box-title-a" @click="open(item, i)" :style="{'margin-left':(item.level * 20)+'rpx'}">
<text style="color: black;">{{item.name}}</text>
......@@ -74,17 +71,16 @@
<text>{{item.name}}</text>
</view> -->
</view>
<!-- <text v-else class=""></text> -->
<!-- </view> -->
</view>
<view class="d-td" style="text-align: center;">
<text v-if="item.itemType == '2'">{{ item.levelName }}</text>
<text v-else></text>
<text v-if="dataShowType == 1">{{ item.name }}</text>
<text v-if="dataShowType == 2" style="margin-right: 30rpx;">{{item.raiseTime}}</text>
<!-- 原本的写法 -->
<!-- <text v-else></text> -->
</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 == 2">{{ item.count }}</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>
</block>
</view>
......@@ -125,9 +121,11 @@
},
name: 'lazy-tree',
mounted() {
this.list = this.dataList
this.setTree();
console.log('datatitleList',this.datatitleList);
console.log('dataList',this.dataList);
},
computed: {},
data() {
......@@ -172,6 +170,7 @@
// });
const list = this.deepClone(this.list);
this.treeList = this.treeToArray(list);
console.log('this.treeList',this.treeList);
},
async lazyLoad(name) {
......@@ -346,7 +345,7 @@
};
</script>
<style lang="scss">
<style lang="scss" scoped>
.content-box {
background-color: #fff;
display: flex;
......@@ -354,6 +353,8 @@
align-items: center;
// padding: 0 20rpx;
justify-content: space-between;
box-sizing: border-box;
// width: 100%;
}
.content-box-title {
......@@ -366,17 +367,23 @@
}
.d-box {
background-color: #fff;
display: flex;
justify-content: space-between;
// padding: 0 20rpx;
padding: 20rpx 0;
font-size: 26rpx;
box-sizing: border-box;
border-bottom: 1px solid #F2F2F2;
.d-td {
flex: 1;
align-items: center;
padding: 5rpx 10rpx;
color: #333;
// padding: 5rpx 10rpx;
}
}
.d-box:last-child{
border: none;
}
.content-box-title-a {
// flex: 1;
// padding: 0 20rpx;
......@@ -432,7 +439,7 @@
display: flex;
width: 100%;
justify-content: space-between;
box-sizing: border-box;
.d-th {
justify-content: center;
flex: 1
......
<template>
<view class="concent-footer">
<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>
</view>
</view>
<!-- // 一级循环 -->
<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-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
class="circle"
style="width: 30rpx;height: 30rpx;border-radius: 50%;"
:class="index == '0' ?'cornermarker': index == '1' ? 'cornermarkertwo' : index == '2' ? 'cornermarkerthree' : 'cornermarkerother'">
<span style="font-size: 20rpx;line-height: 20rpx;">{{index + 1}}</span>
</view>
<!-- <view class="cornermarkerthree">
<span>{{index + 1}}</span>
</view> -->
<view style="margin-left: 8rpx;text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;">{{pointItem.name }}</view>
<view
class="dateTime"
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 class="content-box-title" style="text-overflow: ellipsis;overflow: hidden;
white-space: nowrap;max-width: 150rpx;">
......@@ -67,6 +78,10 @@
felTyle: {
type: String,
default: null
},
currentTitle: {
type: String,
default: '1'
}
},
name: "myteam-table",
......@@ -174,7 +189,10 @@
}
</script>
<style scoped>
<style scoped lang="scss">
.noListTip{
font-size: 28rpx;
}
.content-box {
background-color: #fff;
display: flex;
......@@ -185,15 +203,31 @@
.content-sa {
display: flex;
// align-items: center;
}
.content-box-title {
padding: 5rpx 0;
flex: 1;
display: flex;
align-items: center;
justify-content: center;
text-align: center;
border-bottom: 1rpx solid #F2F2F2;
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 @@
}else {
return false
}
console.log('maxDate',this.maxDate);
},
methods: {
bindDateChange: function(e) {
......
<template>
<view class="search">
<!-- <input
class="searchInput"
type="text"
name=""
id=""
v-model="queryName"
@confirm="searchBtn()"
/> -->
<input
class="searchInput"
type="text"
......@@ -18,8 +10,8 @@
@input="handleInput"
/>
<text class="iconfont icon-sousuo" @click="searchBtn()"></text>
<text class="iconfont icon-xiaoxi"></text>
<text class="system_msg" @click="jumpToSystemMsg()">{{messageUnreadCount}}</text>
<!-- <text class="iconfont icon-xiaoxi"></text>
<text class="system_msg" @click="jumpToSystemMsg()">{{messageUnreadCount}}</text> -->
</view>
</template>
......@@ -108,29 +100,27 @@
}
},
mounted() {
this.querySystemMessage();
// this.querySystemMessage();
}
}
</script>
<style lang="scss">
.search{
position: relative;
display: flex;
margin: 30rpx auto;
align-items: center;
justify-content: space-between;
background: linear-gradient(to right,#E6F5FC,#FDE9F2);
border-radius: 60rpx;
.searchInput{
margin-right: 20rpx;
width: 95%;
border-radius: 60rpx;
background: linear-gradient(to right,#E6F5FC,#FDE9F2);
width: 85%;
padding: 15rpx;
}
.icon-sousuo{
font-size: 60rpx;
position: absolute;
right: 80rpx;
top: 10rpx;
font-size: 50rpx;
margin-right: 10rpx;
opacity: .7;
}
.icon-xiaoxi{
......
......@@ -11,7 +11,8 @@
:disabled="isClick"
placeholder="请选择开户行"
/>
<uni-icons @click="openDropdown" type="right" size="20" ></uni-icons>
<text @click="openDropdown" class="iconfont icon-youjiantou iconStyle"></text>
</view>
<!-- 下拉框 -->
<view v-if="showDropdown" class="dropdown">
......
......@@ -3,9 +3,23 @@
<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 class="pic">
<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
v-if="item.link == currentPage"
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 class="name">{{item.name}}</view>
</view>
......@@ -15,15 +29,15 @@
<script>
export default {
props: ['currentPage'],
props: ['currentPage','infoTotal'],
name:"tabBar",
data() {
return {
menuLists: [
{key:1,name:'首页',iconPath:'home',selectedIconPath:'home_active',link:'index'},
{key:2,name:'SFP智能财策',iconPath:'sfp',selectedIconPath:'sfp_active',link:'product'},
{key:3,name:'CFFP认证',iconPath:'cffp',selectedIconPath:'cffp_active',link:'courselist'},
{key:4,name:'我的',iconPath:'my',selectedIconPath:'my_active',link:'personalCenter'},
{key:1,name:'首页',iconPath:'icon-shouye16',selectedIconPath:'home_active',link:'index'},
{key:2,name:'金融工具',iconPath:'icon-jurassic_toolkit',selectedIconPath:'sfp_active',link:'product'},
{key:3,name:'产品中心',iconPath:'icon-pinzhishangpinhuichang',selectedIconPath:'cffp_active',link:'courselist'},
{key:4,name:'我的',iconPath:'icon-gerenzhongxin',selectedIconPath:'my_active',link:'personalCenter'},
]
}
},
......@@ -40,6 +54,7 @@
}
},
mounted() {
console.log('info',this.infoTotal);
}
}
</script>
......@@ -57,17 +72,41 @@
font-size: 24rpx;
transform: translateX(-50%);
box-sizing: border-box;
padding: 5rpx 25rpx 115rpx 25rpx;
padding: 20rpx 25rpx 100rpx 25rpx;
.menu_content{
display: flex;
align-items: center;
justify-content: space-around;
.tabbar_item{
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.pic{
width: 60rpx;
position: relative;
// width: 60rpx;
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{
text-align: center;
// text-align: center;
font-size: 26rpx;
color: #666;
}
......
<template>
<web-view :src="url"></web-view>
<web-view :src="url" ></web-view>
</template>
<script>
......@@ -16,5 +18,9 @@ export default {
}
</script>
<style lang="scss">
<style lang="scss" scoped>
.box{
width: 100%;
height: auto;
}
</style>
\ No newline at end of file
......@@ -17,6 +17,8 @@ const prod = {
cffp_url:'https://app.ydhomeoffice.cn/appApi/cffp',
share_url:'https://app.ydhomeoffice.cn/appYdhomeoffice',
}
// companyType: '1', cffp
// companyType: '2', appYdhomeoffice
let companyInfo = {
// companyType: '1',
// appName: 'CFFP财富中心',
......
......@@ -33,24 +33,7 @@
"distribute" : {
/* android打包配置 */
"android" : {
"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卡上写文件
],
"permissions" : [],
"minSdkVersion" : 21,
"schemes" : "cffpapp,hbuilder",
"abiFilters" : [ "armeabi-v7a", "arm64-v8a", "x86" ],
......@@ -186,7 +169,7 @@
"vueVersion" : "3",
"h5" : {
"router" : {
"base" : "/cffp/",
"base" : "/appYdhomeoffice/",
"mode" : "history"
},
"devServer" : {
......
{
"name": "验证码输入框",
"version": "2.0",
"lockfileVersion": 3,
"lockfileVersion": 1,
"requires": true,
"packages": {
"": {
"name": "验证码输入框",
"version": "2.0",
"dependencies": {
"echarts": "^5.4.1",
"nanoid": "^4.0.0"
}
"dayjs": {
"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",
"resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.6.0.tgz",
"integrity": "sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==",
"dependencies": {
"requires": {
"tslib": "2.3.0",
"zrender": "5.6.1"
}
},
"node_modules/nanoid": {
"version": "4.0.2",
"resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-4.0.2.tgz",
"integrity": "sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"bin": {
"nanoid": "bin/nanoid.js"
},
"engines": {
"node": "^14 || ^16 || >=18"
}
},
"node_modules/tslib": {
"dependencies": {
"tslib": {
"version": "2.3.0",
"resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
"integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
},
"node_modules/zrender": {
"zrender": {
"version": "5.6.1",
"resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.6.1.tgz",
"integrity": "sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==",
"dependencies": {
"requires": {
"tslib": "2.3.0"
}
}
}
},
"nanoid": {
"version": "4.0.2"
}
}
}
......@@ -15,6 +15,7 @@
]
},
"dependencies": {
"dayjs": "^1.11.13",
"echarts": "^5.4.1",
"nanoid": "^4.0.0"
}
......
......@@ -2,16 +2,16 @@
<view class="container">
<view class="top">
<text class="iconfont icon-youjiantou zuojiantou" @click="goBack()"></text>
<text>退单详情</text>
<text style="font-size: 30rpx;">退单详情</text>
</view>
<view class="returnCountsContainer">
<view class="left">
<h3>{{courseInfoItem.orderStatusName}}</h3>
<text>{{courseInfoItem.refundTime}}</text>
<h3 style="font-size: 40rpx;">{{courseInfoItem.orderStatusName}}</h3>
<text style="font-size: 26rpx;">{{courseInfoItem.refundTime}}</text>
</view>
<view class="right">
<h3>{{courseInfoItem.refundAmount}}</h3>
<text @click="goDetail()">到账说明</text>
<text style="font-size: 26rpx;" @click="goDetail()">到账说明</text>
</view>
</view>
<!-- 退款进度 -->
......@@ -60,8 +60,8 @@
<text>退还积分:</text>
<text>{{courseInfoItem.refundIntegralExchange}}</text>
</view>
<view>
<text>退款原因:</text>
<view v-if="courseInfoItem.orderRemark">
<text >退款原因:</text>
<text>{{courseInfoItem.orderRemark}}</text>
</view>
</view>
......@@ -246,7 +246,7 @@
display: flex;
flex-direction: column;
margin-bottom: 20rpx;
steps__column-title {
.steps__column-title {
font-size: 30rpx;
color: #333;
margin-bottom: 10rpx;
......
......@@ -2,7 +2,7 @@
<view class="container">
<view class="top">
<text class="iconfont icon-youjiantou zuojiantou" @click="goBack()"></text>
<text>我的售后</text>
<text style="font-size: 30rpx;">我的售后</text>
</view>
<h4 class="noListTip" v-if="userCourses.length <=0 ">暂无售后</h4>
<view class="ulBox" v-if="userCourses.length > 0">
......
......@@ -13,10 +13,9 @@
<text class="date">{{item.announcementAt}}</text>
<!-- <text class="readed dot"></text>s -->
</view>
<view class="announcement_des">
<!-- <view class="announcement_des">
{{matchReg(item.content).substring(0,15)}}...
<!-- <rich-text :nodes="item.content"></rich-text> -->
</view>
</view> -->
</view>
<view class="to_detail" @click="goToDetail(item.id)">
<view>查看详情</view>
......@@ -44,10 +43,12 @@
api.announcementQuery({announcementTypeId:686}).then(res => {
if (res['success']) {
this.announcementLists = res['data']['announcementInfoList'];
console.log('this.announcementLis',this.announcementLis);
}
});
},
matchReg(str){
console.log('str',str);
let reg=/<\/?.+?\/?>/g;
return str.replace(reg,'');
},
......@@ -107,6 +108,7 @@
.announcement_title{
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20rpx;
padding-top: 20rpx;
.title{
......
......@@ -20,6 +20,8 @@
<script>
import api from "../../api/api";
import common from '../../common/common';
import {hshare} from '@/util/fiveshare';
import {shareURL} from "@/environments/environment";
export default{
data(){
return{
......@@ -43,6 +45,7 @@
api.announcementQuery({id:this.id}).then((res)=>{
if(res['success']){
this.announcementInfo = res['data']['announcementInfoList'][0];
}
})
},
......@@ -54,7 +57,35 @@
uni.navigateTo({
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>
......
......@@ -106,8 +106,14 @@
<style lang="scss" scoped>
@import 'applyCommon.scss';
.container{
display: flex;
flex-direction: column;
}
.wrapper{
flex: 1;
padding-top: 40rpx;
background-color: #fff !important;
.icon-gou{
color: #78c06e;
font-size: 200rpx;
......
......@@ -33,10 +33,11 @@
<view class="content">
<view class="contentDetail employ">
<view class="contentItem yinhang">
<text>开户行</text>
<text><text class="requireCode">*</text>开户行</text>
<view class="searchInput" >
<searchInput
ref="searchInput"
v-if="bankList.length>0"
:allData="bankList"
@select="onSelect"
......@@ -56,13 +57,13 @@
:disabled="this.backForm.approvalStatus!= 0 && this.backForm.approvalStatus != 2" />
</view>
<view class="contentItem">
<text>银行卡号</text>
<text><text class="requireCode">*</text>银行卡号</text>
<input class="form-control" placeholder="请输入银行卡号" type="number" maxlength="19"
v-model="backForm.bankAccountId" auto-blur=true @blur="checkInput(backForm.bankAccountId)"
:disabled="this.backForm.approvalStatus!= 0 && this.backForm.approvalStatus != 2" />
</view>
<view class="contentItem">
<text>确认卡号</text>
<text><text class="requireCode">*</text>确认卡号</text>
<input class="form-control" placeholder="请再次确认卡号" type="number" v-model="sureBankAccountId"
maxlength="19" auto-blur=true @blur="checkInput(sureBankAccountId)"
:disabled="this.backForm.approvalStatus!= 0 && this.backForm.approvalStatus != 2" />
......@@ -79,6 +80,7 @@
<script>
import api from '@/api/api';
import searchInput from '@/components/searchInput/searchInput.vue';
import validate from '@/util/validate.js';
export default {
data() {
return {
......@@ -180,26 +182,52 @@
},
//去除输入空格
checkInput(str) {
if(!str) return
str = str.replace(/\s*/g, "");
},
saveInfo() {
this.$refs.searchInput.showDropdown = false
uni.showLoading({
title: '加载中...'
});
if (this.backForm.approvalStatus == 0 || this.backForm.approvalStatus == 2) {
if (this.backForm.bankAccountId == '' || this.sureBankAccountId == '' || this.backForm
.bankAccountOpening == '') {
if(!this.backForm.bankAccountOpening){
uni.showToast({
title: '开户行不能为空',
duration: 2000,
icon: 'none'
})
return;
}
if(!this.backForm.bankAccountId ){
uni.showToast({
title: '银行卡号与开户行不能为空',
title: '银行卡号不能为空',
duration: 2000,
icon: 'none'
})
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)) {
alert('卡号',this.backForm.bankAccountId)
alert('确认卡号',this.sureBankAccountId)
uni.showToast({
title: '两次银行卡号不一致,请重新输入',
duration: 2000,
......@@ -208,14 +236,26 @@
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)
this.applyParam.bankAccountOpening = this.backForm.bankAccountOpening
this.applyParam.bankAccountId = this.backForm.bankAccountId
this.applyParam.approvalStatus = this.backForm.approvalStatus
this.applyParam = {
...this.applyParam,
operatStep: 5,
}
api.saveApplyInfo(this.applyParam).then((res) => {
if (res['success']) {
uni.navigateTo({
......@@ -257,6 +297,9 @@
.wrapper{
flex: 1;
}
.requireCode{
color: red;
}
}
.form-control {
min-width: 440rpx;
......
......@@ -28,7 +28,7 @@
</view>
<view class="content">
<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-selected-copy" v-if="contractItem.confirmStatus"></text>
<text class="itemName"> {{contractItem.termName}}</text>
......@@ -46,16 +46,12 @@
<view class="title">
{{curTitle}}
</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="nineTime == false?'agree':'gree'" @click="agree(curContractId)">
<text>同意</text>
<text style="margin-left: 10rpx;" v-if="nineTime">({{remainTimes}}s)</text>
</view> -->
<!-- :style="btnStyle" -->
<view class="agree" @click="agree(curContractId)" >同意</view>
</scroll-view>
</view>
</template>
......@@ -104,6 +100,11 @@
}
}, 500)
},
computed: {
btnStyle(){
return this.curContractId =='16'?'position: fixed;bottom: 0;':null
}
},
methods: {
goBack() {
uni.navigateBack({
......@@ -233,7 +234,10 @@
<style lang="scss" scoped>
@import 'applyCommon.scss';
::v-deep .uni-scroll-view-content{
display: flex;
flex-direction: column;
}
.container {
background-color: #FBFBFB;
}
......@@ -242,14 +246,15 @@
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
top: 0;
width: 100%;
}
.toast {
position: fixed;
left: 0;
right: 0;
min-width: 320px;
max-width: 640px;
// min-width: 320px;
// max-width: 640px;
width: 100%;
margin: 0 auto;
z-index: 1;
......@@ -271,14 +276,20 @@
.title {
text-align: center;
font-weight: bold;
font-size: 16px;
font-size: 28rpx;
padding: 10px;
}
.scrollBox{
display: flex;
flex-direction: column;
}
.contract {
// overflow: hidden;
padding: 10px;
font-size: 20rpx;
font-size: 15rpx;
padding-bottom: 50rpx;
flex-grow: 1;
}
.agree {
......@@ -290,8 +301,11 @@
color: #fff;
font-size: 20px;
font-weight: bold;
position: relative;
bottom: 0;
// position: absolute;
// bottom: 0;
// position: fixed;
// bottom: 0;
}
.gree {
width: 100%;
......
......@@ -29,12 +29,19 @@
</view>
<!--这里必须用v-show否则打回重新签名时会获取不到dom元素-->
<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>
<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>
</view>
</view> -->
<view class="fixed" url="bank-card" @click="save()">
{{(this.applyParam.approvalStatus== 0 || this.applyParam.approvalStatus == 2)?'我自愿签订合伙人合同书':'下一步'}}
</view>
......@@ -214,11 +221,13 @@
// uni-page-wrapper{
// overflow: hidden!important;
// }
.container{
background-color: #fff;
}
.signatureContent{
// padding: 0 36rpx 20rpx 26rpx;
background: #fff;
margin-top: 20rpx;
height: 100%;
height: auto;
position: relative;
}
.signature_action{
......@@ -227,11 +236,20 @@
margin-top: 20rpx;
uni-image{max-width: 120rpx;max-height: 120rpx;}
}
.clearBox{
display: flex;
align-items: center;
justify-content: center;
.imgBox{
position: absolute;
top: 75%;
left: 40%;
display: flex;
align-items: center;
// position: absolute;
// bottom: -7%;
// left: 50%;
// transform: translateX(-50%);
width: 120rpx;
height: 120rpx;
}
}
</style>
\ No newline at end of file
......@@ -106,8 +106,8 @@
import api from '../../api/api';
import {
CommonUpload,
ckbigImg
} from '@/util/uploaderFile';
// ckbigImg
export default {
data() {
return {
......@@ -175,7 +175,7 @@
});
},
clickImg(i) {
ckbigImg(i)
// ckbigImg(i)
},
changeIndustry: function(e) {
this.industryIdx = e.detail.value;
......
<template>
<view class="container">
<view style="flex: 1;">
<view class="classInfo" style="padding-top:80rpx">
<view class="iconfont icon-youjiantou zuojiantou" @click="goBack()" style="top:18rpx">
</view>
......@@ -7,44 +8,51 @@
</view>
<!-- 订单支付明细 -->
<view class="payInfoBox">
<h4>订单支付明细</h4>
<h4 class="commonTitle">订单支付明细</h4>
<view>
<text>积分抵扣:</text>
<text class="commonTxt">积分抵扣:</text>
<text class="price">{{dropInfo.integralExchange}}</text>
</view>
<view>
<text>实际支付:</text>
<text>{{dropInfo.paymentAmount}}</text>
<text class="commonTxt">实际支付:</text>
<text style="font-size: 26rpx;">{{dropInfo.paymentAmount}}</text>
</view>
</view>
<!-- 退款明细 -->
<view class="dropDetailInfoBox">
<h4>退款明细</h4>
<h4 class="commonTitle">退款明细</h4>
<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>
</view>
<view>
<text>退款到账金额:</text>
<text>{{dropInfo.refundFee}}</text>
<text class="commonTxt">退款到账金额:</text>
<text style="font-size: 26rpx;">{{dropInfo.refundFee}}</text>
</view>
<view>
<text>退还积分:</text>
<text>{{dropInfo.refundIntegralExchange}}</text>
<text class="commonTxt">退还积分:</text>
<text class="commonTxt">{{dropInfo.refundIntegralExchange}}</text>
</view>
</view>
<!-- 退款原因 -->
<view class="dropInfoBox">
<view class="dropBox">
<h4>退款原因</h4>
<view class="pickerBox">
<picker @change="bindPickerChange" :value="dropIndex" :range="dropReasons" :range-key="'dropOptionName'">
<view class="uni-input" style="height: 80rpx;">{{dropReasons[dropIndex]['dropOptionName']}}</view>
</picker>
<i class="iconfont icon-youjiantou"></i>
<h4 class="commonTitle">退款原因</h4>
<view class="pickerBox" @click="showReason=true">
<commonSelect
:dataList="dropReasons"
:visible="showReason"
:showValue="dropIndex"
placeholderTxt="26rpx"
chooseTxt="26rpx"
@confirm="bindPickerChange"
@close="showReason=false"
/>
</view>
</view>
</view>
</view>
<!-- 提交申请 -->
<view class="submitApply" @click="submit()" >
<text :class="{'gray':readonlyFlag}" >提交申请</text>
......@@ -54,20 +62,10 @@
<view class="popup-content">
<view class="title">
<text></text>
<h3>违约金规则</h3>
<i class="iconfont icon-guanbi" @click="closePopup()"></i>
</view>
<!-- <view class="">
1.购买后14天内未点开学习全额退费;
<h3 style="font-size: 28rpx;">违约金规则</h3>
<i class="iconfont icon-guanbi iconStyle" @click="closePopup()"></i>
</view>
<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天内未使用全额退费;
</view>
<view class="">
......@@ -84,19 +82,22 @@
<script>
import api from "@/api/api";
import courseItem from "@/components/courseItem/courseItem.vue";
import commonSelect from '@/components/commonSelect/commonSelect.vue';
export default {
components:{
courseItem
courseItem,
commonSelect,
},
data() {
return {
showReason:false,
courseInfoItem:{},
fileId:null,
orderId:null,
userId: uni.getStorageSync('cffp_userId'),
dropInfo:{},
dropIndex:0,
dropReasons:[''],
dropReasons:[{id:null,name:'请选择'}],
withdrawal: true,
readonlyFlag:false
};
......@@ -107,9 +108,9 @@
delta: 1
});
},
bindPickerChange(e){
console.log('执行了');
this.dropIndex = e.detail.value;
bindPickerChange(value){
this.dropIndex = value;
this.showReason = false
},
showModal(){
this.$refs.popup.open()
......@@ -139,7 +140,7 @@
submit(){
if(!this.withdrawal){
uni.showToast({
title: '已退不能重新申请',
title: '已退不能重新申请',
icon: 'none',
duration: 2000
});
......@@ -162,6 +163,8 @@
refundIntegralExchange:this.dropInfo.refundIntegralExchange,
refundReason:this.dropReasons[this.dropIndex]['dropOptionName']
}
// console.log('param',param);
// return
api.unifiedRefund(param).then(res=>{
if(res['success']){
uni.navigateTo({
......@@ -185,8 +188,14 @@
// 退款原因
dropOptionsQuery(){
api.dropOptionsQuery({code:'REFUND_REASON'}).then(res=>{
if(res['success']){
this.dropReasons = res['data']['dropMasterInfoList'][0]['dropOptionsInfoList']
if(res['success']&&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()
})
......@@ -212,14 +221,21 @@
padding: 10rpx 20rpx;
height: 100%;
position: relative;
.commonTitle{
font-size: 26rpx;
}
.commonTxt{
font-size: 25rpx;
}
.classInfo{
background-color: #fff;
padding: 20rpx 14rpx 14rpx 20rpx;
}
.payInfoBox,.dropDetailInfoBox,.dropInfoBox{
.payInfoBox,.dropDetailInfoBox{
padding: 30rpx 14rpx 14rpx 20rpx;
margin-bottom: 10rpx;
background-color: #fff;
border-radius: 10rpx;
view{
margin-top: 22rpx;
display: flex;
......@@ -227,15 +243,17 @@
}
text{
&.price{
font-size: 25rpx;
color: #FA6900;
}
}
}
.submitApply{
position: fixed;
bottom: 20rpx;
left: 0;
margin-top: 30rpx;
// position: fixed;
// bottom: 0rpx;
// left: 0;
width: 100%;
text{
display: flex;
......@@ -247,6 +265,7 @@
justify-content: center;
align-items: center;
margin: 0 auto;
font-size: 28rpx;
}
text.gray{
......@@ -255,10 +274,12 @@
}
.popup-content{
border-radius: 10rpx;
view{
font-size: 30rpx;
font-size: 28rpx;
color: #666;
margin-bottom: 10rpx;
}
.title{
display: flex;
......@@ -272,7 +293,10 @@
display: flex;
justify-content: space-between;
align-items: baseline;
height: 80rpx;
background-color: #fff;
padding: 20rpx;
border-radius: 10rpx;
box-sizing: border-box;
.pickerBox{
display: flex;
align-items: baseline;
......
......@@ -52,7 +52,7 @@
},
methods:{
dateFormat(val){
return dataHandling.dateFormat(val,'yyyy-MM-dd')
return dataHandling.dateFormat2(val,'yyyy-MM-dd')
},
goBack(){
uni.navigateBack({
......
......@@ -166,7 +166,7 @@
})
},
dateFormat(val){
return dataHandling.dateFormat(val,'yyyy-MM-dd')
return dataHandling.dateFormat2(val,'yyyy-MM-dd')
},
tokefu(){
let url = 'http://q.url.cn/abkzV9?_type=wpa&qidian=true' // URL是要跳转的外部地址 作为参数
......
......@@ -63,8 +63,8 @@
</view>
</view>
<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">免费</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> -->
<!-- <text v-if="courseInfo.status==2" style="color: #F15A1F;margin-right: 20rpx;"><i
class="iconfont icon-yifukuan"></i>已购</text> -->
<text v-if="courseInfo.coursePrice != 0">{{courseInfo.salesNumber}}{{showName}}</text>
......@@ -198,6 +198,7 @@
},
data() {
return {
addSystemType:'', //因为会从其他公众号跳转过来所以接受一下公众号的类型
systemType:companyInfo.systemType,
showName:'购买',
successMessage:'',
......@@ -410,6 +411,7 @@
}
},
goBack() {
console.log('返回');
uni.navigateBack({
delta: 1
});
......@@ -833,7 +835,7 @@
JsApiTicketApi() {
let WxConfigRequestVO = {
url: window.location.href.split('#')[0],
systemType: '1'
systemType:this.addSystemType? this.addSystemType:'1'
}
api.Wxshare(WxConfigRequestVO).then(res => {
jWeixin.config({
......@@ -914,6 +916,9 @@
}
},
onLoad(option) {
if(option.addSystemType){
this.addSystemType = option.addSystemType
}
if(this.systemType == 'IOS'){
this.showName = '预约';
this.show = false;
......
......@@ -2,7 +2,6 @@
<view class="container">
<view class="top">
<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>
<text class="name">{{cffpUserInfo.name}}</text>
<text class="iconfont icon-31tishi" @click="getIntroduce('center')"></text>
......@@ -21,19 +20,18 @@
></search>
<!--轮播组件-->
<view class="banner">
<view class="banner" style="overflow: none;">
<view class="uni-margin-wrap">
<carousel :carouselList="cffpUserInfo.fileUploadItemList"></carousel>
<carousel :carouselList="cffpUserInfo.fileUploadItemList" ></carousel>
</view>
</view>
</view>
<view class="message" @click="jumpToAnnouncement()">
<view style="display: flex;align-items: center;">
<text class="iconfont icon-gonggao"></text>
<text>{{announcementInfo}}</text>
<text style="font-size: 27rpx;">{{announcementInfo}}</text>
</view>
<text class="iconfont icon-youjiantou"></text>
<text class="iconfont icon-youjiantou iconStyle"></text>
</view>
<view class="content">
<view class="featureContent">
......@@ -41,11 +39,14 @@
<view class="nav_wrapper">
<view class="nav_content" v-for="featureItem in featureLists" :key="featureItem.key"
@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=""
mode="widthFix"></image>
</view> -->
<view class="imgbox">
<view class="iconfont iconSize" :class="`${featureItem.icon}`"></view>
</view>
<view>{{featureItem.name}}</view>
<view style="font-size: 26rpx;">{{featureItem.name}}</view>
</view>
</view>
</view>
......@@ -53,7 +54,7 @@
<view class="course_content">
<view class="tag">
<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>
<!-- <courselist :onlyShowList="0"></courselist> -->
<view class="ulBox" v-if="cffpCourseInfos.length>0">
......@@ -101,22 +102,22 @@
},
featureLists: [{
key: '00',
name: '销售中心',
icon: 'salesCourse',
name: '成交订单',
icon:'icon-dingdan',
link: '/pages/saleCourseLists/saleCourseLists',
isOpen: true
},
{
key: '01',
name: '我的积分',
icon: 'integral',
link: '/pages/myPoints/myPoints',
name: '佣金',
icon: 'icon-yongjin',
link: '/pages/pointsExchange/pointsExchange',
isOpen: true
},
{
key: '02',
name: '申请加盟',
icon: 'applyJoin',
icon: 'icon-hezuo',
link: '/pages/application-process/basic-info',
isOpen: true
},
......@@ -130,7 +131,7 @@
{
key: '04',
name: '邀请加盟',
icon: 'shareJoin',
icon: 'icon-yaoqing',
link: '/pages/inviteJoin/inviteJoin',
isOpen: true,
isJoin: true
......@@ -191,6 +192,7 @@
this.showSearch = true;
this.searchQuery = '';
});
},
onLoad(options) {
if(options.clearFlag){
......@@ -221,6 +223,7 @@
this.loginornot = false
}else{
this.loginornot = true;
this.querySystemMessage()
}
this.queryAreaCenterInfo();
} else {
......@@ -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) {
uni.navigateTo({
url: `/pages/courseDetail/courseDetail?fileId=${item.fileId}`
......@@ -408,7 +434,7 @@
overflow: hidden;
margin-bottom: 30rpx;
.swiper{
height: 250rpx;
height:250rpx;
}
}
}
......@@ -418,9 +444,10 @@
align-items: center;
margin: 20rpx 0;
background-color: #fff;
padding: 10rpx 0 10rpx 30rpx;
padding: 20rpx;
justify-content: space-between;
box-sizing: border-box;
border-radius: 10rpx;
.icon-gonggao {
font-size: 60rpx;
color: #20279b;
......@@ -439,58 +466,69 @@
position: relative;
.featureContent {
padding-top: 10px;
box-sizing: border-box;
padding: 30rpx 0;
.nav_wrapper {
display: flex;
align-items: center;
justify-content: space-around;
flex-wrap: wrap;
width: 100%;
box-sizing: border-box;
// padding: 10rpx;
.nav_content {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
margin-bottom: 20rpx;
flex: 0 0 20%;
font-size: 14px;
color: #666;
margin: 10px 2%;
color: rgba(51, 51, 51, 1);
// margin: 10px 2%;
image {
max-width: 80%;
}
.imgbox{
margin-bottom: 10rpx;
.iconSize{
font-size: 40rpx;
}
}
}
}
}
}
.course_content {
background: #fff;
position: relative;
padding-bottom: 30rpx;
// background-color: pink;
.tag {
box-sizing: border-box;
padding: 20rpx;
display: flex;
justify-content: space-between;
position: relative;
background: #fff;
margin-bottom: 20rpx;
border-radius: 10rpx;
h4 {
margin-left: 20rpx;
font-size: 32rpx;
}
}
.tag:before {
position: absolute;
left: 20rpx;
top: 20rpx;
top: 50%;
transform: translateY(-50%);
display: inline-block;
content: '';
width: 2px;
height: 16px;
background-color: #5F83FF;
height: 32rpx;
background-color: #20279b;
border-radius: 2px;
}
}
......@@ -499,12 +537,15 @@
.ulBox {
flex-direction: column;
width: 100%;
box-sizing: border-box;
// background-color: #20279b;
}
.liBox {
box-sizing: border-box;
background-color: #fff;
border-radius: 20rpx;
margin-bottom: 10rpx;
margin-bottom: 20rpx;
padding: 10rpx;
width: 100%;
}
......
......@@ -2,12 +2,12 @@
<view class="content">
<view class="logo">
<image :src="imgSrc" alt="logo" srcset="" class="iconBox" mode="widthFix"></image>
<view>欢迎登录使用{{areaName}}</view>
<view>欢迎使用{{areaName}}</view>
</view>
<view class="content-login">
<view class="login_title">
<!-- <view class="login_title">
{{liginName}}
</view>
</view> -->
<view class="login-text">
<text class="text">{{form.name}}</text>
</view>
......@@ -16,8 +16,8 @@
</view>
<view class="login-code">
<!-- <view class="text" style="display: flex;justify-content: space-between;"> -->
<input name="form.code" placeholder="输入验证码" v-model="form.code" type="number" maxlength="6"/>
<text @click="sendMessage()" style="width: 180rpx;" :class="{'grey':disabledSendBtn}">{{sendCodeHtml}}</text>
<input style="font-size: 28rpx;" name="form.code" placeholder="输入验证码" v-model="form.code" type="number" maxlength="6"/>
<text @click="sendMessage()" style="width: 180rpx;text-align: right;font-size: 28rpx;" :class="{'grey':disabledSendBtn}">{{sendCodeHtml}}</text>
<!-- </view> -->
</view>
......@@ -30,7 +30,7 @@
<text class="file" @click="getFile(2)">隐私政策</text>
</view>
<view class="footer" @click="nextstep()">
<text>下一步</text>
<text>登录 / 注册</text>
</view>
</view>
......@@ -189,7 +189,7 @@
padding: 40rpx 60rpx;
overflow: hidden;
margin-bottom: 30rpx;
min-height: 65%;
// min-height: 65%;
.login_title{
text-align: center;
font-size: 40rpx;
......@@ -199,6 +199,7 @@
width: 100%;
border-bottom: 1px solid #CECECE;
padding: 20rpx 0;
font-size: 28rpx;
.text{
padding: 20rpx;
}
......
<template>
<view class="padding-top container">
<text class="iconfont icon-youjiantou zuojiantou" @click="goBack()" style="top: 20rpx;"></text>
<!-- tab选项 -->
<view class="tabTitle">
<text :class="{'actived': tabType===1}" @click="switchTab(1)">基本信息</text>
<text :class="{'actived': tabType===2}" @click="switchTab(2)">邀请信息</text>
......@@ -13,7 +13,14 @@
<view class="ulBox">
<view class="liBox">
<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 class="liBox">
<text>手机号:</text>
......@@ -251,6 +258,7 @@
},
// 发起邀请事件
shareToggle() {
//this.dataForm.partnerLevel = this.applyIdentity == 0 ? 'B1' : 'A1'
this.dataForm.partnerLevel = 'P1'
this.dataForm.hasCrossDistrict = this.isCross == true ? '1' : '0'
......@@ -267,6 +275,11 @@
});
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)) {
api.saveApplyInfo(this.dataForm).then(res => {
if (res['success']) {
......@@ -379,12 +392,14 @@
display: flex;
align-items: center;
justify-content: space-around;
padding: 30rpx 60rpx 0;
padding: 30rpx;
box-sizing: border-box;
text {
font-size: 26rpx;
&.actived {
color: #333;
border-bottom: 4rpx solid #20269B;
font-size: 24rpx;
}
}
}
......@@ -414,13 +429,15 @@
display: flex;
justify-content: space-between;
align-items: center;
font-size: 26rpx;
&:last-child {
border: none;
}
.uni-input {
text-align: right;
font-size: 26rpx;
width: 400rpx;
}
text {
......@@ -536,6 +553,7 @@
line-height: 50rpx;
border-radius: 30rpx;
background: #20269B;
font-size: 25rpx;
}
.popup-footer {
......
......@@ -100,7 +100,7 @@
})
},
dateFormat(val){
return dataHandling.dateFormat(val,'yyyy-MM-dd')
return dataHandling.dateFormat2(val,'yyyy-MM-dd')
},
// 状态
statusInfo(val){
......
......@@ -77,7 +77,7 @@
}
},
dateFormat(val){
return dataHandling.dateFormat(val);
return dataHandling.dateFormat2(val);
},
viewDetail(item){
uni.navigateTo({
......
......@@ -124,7 +124,8 @@
timeFlag: this.timeFlag,
commissionType:this.commissionType,
productType: this.productType,
queryType:this.commissionAmount<0?2:null
queryType:this.commissionAmount<0?2:null,
queryPage:1
}
// const param = {
// isDtl: 1,
......
......@@ -3,10 +3,14 @@
<!-- 时间选择 -->
<view class="timeSelectContent">
<text class="iconfont icon-youjiantou zuojiantou" @click="goBack()"></text>
<picker mode="date" :value="queryDate" :end="maxDate" fields="month" @change="bindDateChange">
<view class="uni-input">{{queryDate}}</view>
</picker>
<i class="iconfont icon-youjiantou xiajiantou"></i>
<CommonTimePicker
:timeData="startDate"
:visible="showTime1"
@confirmDate="changeStartTime"
@closeTime="showTime1=false"
@click="showTime1=true"
/>
</view>
<!-- 分享统计 -->
<view class="shareStatisticalContent">
......@@ -49,17 +53,17 @@
</view>
<view class="countsContent">
<view @click="goDetail(item.fileId,1)">
<i class="iconfont icon-zhuanfa"></i>
<i class="iconfont icon-zhuanfa iconStyle"></i>
<text>分享</text>
<text>{{item.shareCount}}</text>
</view>
<view @click="goDetail(item.fileId,2)">
<i class="iconfont icon-yidu"></i>
<i class="iconfont icon-yidu iconStyle"></i>
<text>阅读</text>
<text>{{item.readCount}}</text>
</view>
<view @click="goDetail(item.fileId,3)">
<i class="iconfont icon-yifukuan"></i>
<i class="iconfont icon-yifukuan iconStyle"></i>
<text>购买</text>
<text>{{item.buyCount}}</text>
</view>
......@@ -74,17 +78,21 @@
<script>
import api from "@/api/api";
import courseItem from "@/components/courseItem/courseItem.vue";
import dataHandling from "@/util/dataHandling";
import CommonTimePicker from '@/components/commonTimePicker/commonTimePicker.vue';
import {
fmdata
} from '@/util/currentDate.js'
export default {
components: {
courseItem
courseItem,
CommonTimePicker
},
data() {
return {
showTime1:false,
startDate:{year:dataHandling.getDateParts().year,month:dataHandling.getDateParts().month},
queryDate: fmdata(new Date(), 'M'),
// queryDate:`${new Date().getFullYear()}-${new Date().getMonth() + 1}`,
maxDate: `${new Date().getFullYear()}-${new Date().getMonth() + 1}`,
userId: uni.getStorageSync('cffp_userId'),
coursesCountInfos: {
......@@ -99,16 +107,19 @@
}
},
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() {
uni.navigateBack({
delta: 1
});
},
bindDateChange: function(e) {
this.queryDate = e.detail.value;
this.userShareCount();
this.userShareQuery();
},
userShareCount() {
const params = {
userId: this.userId,
......@@ -155,8 +166,11 @@
},
// 查看积分
viewIntegral() {
// uni.navigateTo({
// url: `/pages/myPoints/myPoints`
// })
uni.navigateTo({
url: `/pages/myPoints/myPoints`
url: `/pages/pointsExchange/pointsExchange`
})
}
},
......
<template>
<view class="container">
<view style="flex: 1;">
<!-- 课程详情 -->
<template v-if="courseInfoItem">
<view class="courseItemBox" style="padding-top:80rpx">
......@@ -14,15 +15,15 @@
<!-- 价格明细 -->
<view class="priceInfoContent">
<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>
<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')"
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>
</view>
<view><text>合计</text>
<view><text class="txtFont">合计</text>
<text v-if="isRedirect == 1">{{calculatedPrice}}</text>
<text v-else>¥{{Number(totalPrice).toFixed(2)}}</text>
</view>
......@@ -33,23 +34,23 @@
<view class="paymentItem" @click="selectPaymentMethod(2)">
<view>
<i class="iconfont icon-zhifubao"></i>
<text>支付宝支付</text>
<text class="txtFont">支付宝支付</text>
</view>
<view class="selectRadio" :class="{'actived':paymentMethod===2}">
<i class="iconfont icon-duihao"></i>
<i class="iconfont icon-duihao txtFont"></i>
</view>
</view>
<view class="paymentItem" @click="selectPaymentMethod(1)" v-if="deviceType==3">
<view>
<i class="iconfont icon-py_weixinzhifu"></i>
<i class="iconfont icon-py_weixinzhifu txtFont"></i>
<text>微信支付</text>
</view>
<view class="selectRadio" :class="{'actived':paymentMethod===1}">
<i class="iconfont icon-duihao"></i>
<i class="iconfont icon-duihao txtFont"></i>
</view>
</view>
<!-- #ifdef APP-PLUS -->
<!-- <view class="paymentItem" @click="selectPaymentMethod(1)">
<!-- <view class="paymentItem" @click="selectPaymentMethod(1)">
<view>
<i class="iconfont icon-py_weixinzhifu"></i>
<text>微信支付</text>
......@@ -60,6 +61,8 @@
</view> -->
<!-- #endif -->
</view>
</view>
<!-- 底部 -->
<view class="totalContent">
<view class="priceInfoBox">
......@@ -93,9 +96,9 @@
<view class="title">
<text></text>
<h3>{{popupTitle}}</h3>
<i class="iconfont icon-guanbi" @click="closePopup(1)"></i>
<i class="iconfont icon-guanbi iconStyle" @click="closePopup(1)"></i>
</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 class="deductionInfoItem" :class="{'actived':isDeduction == 'true'}" @click="selectDeduction(true)">
<view style="display: flex;">
......@@ -106,7 +109,7 @@
</view>
</view>
<view class="selectRadio">
<i class="iconfont icon-duihao"></i>
<i class="iconfont icon-duihao " style="font-size: 28rpx;"></i>
</view>
</view>
<view class="deductionInfoItem" :class="{'actived':isDeduction == 'false'}" @click="selectDeduction(false)">
......@@ -114,7 +117,7 @@
<text>不使用积分抵扣</text>
</view>
<view class="selectRadio">
<i class="iconfont icon-duihao"></i>
<i class="iconfont icon-duihao" style="font-size: 28rpx;"></i>
</view>
</view>
<view class="confirmBtn" @click="closePopup(1);">
......@@ -129,7 +132,7 @@
<view class="title">
<text></text>
<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 class="integralDeductionContent">
<view class="intergralItem">
......@@ -157,7 +160,7 @@
<view class="tips">
<!-- <view class="text-center">请点击右上角菜单</view> -->
<view style="line-height: 60rpx;">戳这里,点击<text class="iconfont icon-liulanqi"></text>
按钮,使用系统浏览器打开页面完成支付,完成后请返回微信,到【销售中心】下,查看购买订单。</view>
按钮,使用系统浏览器打开页面完成支付,完成后请返回微信,到【我的->成交订单】下,查看购买订单。</view>
</view>
</view>
</view>
......@@ -529,16 +532,30 @@
</script>
<style lang="scss" scoped>
::v-deep .uni-popup .uni-popup__wrapper{
margin: 0 !important;
}
.container {
position: relative;
height: 95vh;
// position: relative;
width: 100%;
box-sizing: border-box;
display: flex;
flex-direction: column;
.txtFont{
font-size: 27rpx;
}
.courseItemBox {
padding: 20rpx 30rpx;
background-color: #fff;
}
.popup-content {
border-radius: 15rpx 15rpx 0 0;
padding: 20rpx;
box-sizing: border-box;
width: 100%;
.title {
display: flex;
justify-content: space-between;
......@@ -630,6 +647,7 @@
display: flex;
justify-content: center;
align-items: center;
font-size: 28rpx;
}
}
......@@ -674,6 +692,7 @@
display: flex;
justify-content: center;
align-items: center;
font-size: 28rpx;
}
}
......@@ -683,6 +702,7 @@
background-color: #fff;
margin: 0 10rpx;
padding: 20rpx;
border-radius: 10rpx;
}
.priceInfoContent {
......@@ -693,6 +713,7 @@
text {
&:last-child {
font-weight: bold;
font-size: 27rpx;
}
&.integralBox {
......@@ -728,6 +749,9 @@
}
.paymentMethodContent {
margin-top: 20rpx;
.paymentItem {
display: flex;
align-items: center;
......@@ -770,11 +794,12 @@
}
.totalContent {
position: absolute;
bottom: 0;
left: 0;
width: 100%;
// position: absolute;
// bottom: 0;
// left: 0;
// width: 100%;
padding: 40rpx 28rpx;
margin-bottom: 20rpx;
display: flex;
align-items: center;
justify-content: space-between;
......@@ -794,6 +819,7 @@
color: #fff;
padding: 14rpx 38rpx;
border-radius: 80rpx;
font-size: 28rpx;
}
.gray {
......
......@@ -13,7 +13,10 @@
<view v-for="item in orderInfoList.filter(item=>item.pageArea===2)" :key="item.id" class="liBox">
<text>{{item.name}}:</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>
<!-- 退课 -->
......@@ -166,21 +169,32 @@
if (res['success']) {
const data = this.orderDetail = res['data']['orderDetail'];
if(this.orderDetail.effectiveEndDate){
this.orderDetail.effectiveEndDate = dataHandling.dateFormat(this.orderDetail.effectiveEndDate)
this.orderDetail.effectiveEndDate = dataHandling.dateFormat2(this.orderDetail.effectiveEndDate)
}
if(this.orderDetail.orderConfirmDate){
this.orderDetail.orderConfirmDate = dataHandling.dateFormat(this.orderDetail.orderConfirmDate)
this.orderDetail.orderConfirmDate = dataHandling.dateFormat2(this.orderDetail.orderConfirmDate)
}
this.fileId = data.fileId;
let deleteFlag = false
Object.keys(data).map((key, item) => {
this.orderInfoList.forEach(val => {
if (val.alias == 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()
})
......
......@@ -30,7 +30,7 @@
</view>
</view>
</view>
<tabBar :currentPage="currentPage"></tabBar>
<tabBar :currentPage="currentPage" :infoTotal="infoTotal"></tabBar>
</view>
</template>
......@@ -50,9 +50,29 @@
userId:'',
isRedirect:'',
currentPage: '',
infoTotal:0
};
},
onShow() {
let loginType = uni.getStorageSync('loginType')
if(loginType !== "visitor" ){
this.querySystemMessage()
}else{
this.infoTotal = 0
}
},
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(){
const param = {
queryName:this.queryName
......@@ -198,7 +218,7 @@
display: flex;
justify-content: space-between;
h4{
margin-left: 20rpx;
// margin-left: 20rpx;
}
}
.tag:before{
......
......@@ -19,7 +19,7 @@
<view class="" v-if="item.isType == 'text'">
<text>{{item.contentType}}</text>
</view>
<i v-else class="iconfont icon-youjiantou"></i>
<i v-else class="iconfont icon-youjiantou iconStyle"></i>
</view>
</view>
</view>
......@@ -81,7 +81,7 @@
.infoBox {
display: flex;
align-items: center;
font-size: 28rpx;
image {
width: 52rpx !important;
height: 52rpx;
......
......@@ -101,5 +101,6 @@
.btn{
background: #20269B;
border-radius: 40rpx;
font-size: 28rpx;
}
</style>
<template>
<view class="content">
<view class="content-header" v-if="levelName">
<view class="concent-title">
<!-- <view class="concent-title">
<text class="concent-text">{{levelName}}</text>
</view> -->
</view>
</view>
<view v-if="dataShowType ==1" style="text-align: right;margin: 20px;">
总合计:{{count}}
<view v-if="dataShowType ==1" style="text-align: right;margin: 20rpx 50rpx;font-size: 28rpx;">
总合计:{{count}}
</view>
<view class="">
<view class="d-box">
<!-- <view class="d-td" v-for="item in datatitleList">
<span class="">{{item}}</span>
</view> -->
<view class="tableTitle">
<!-- 原本的结构 -->
<!-- <view class="d-box">
<view class="d-td" style="text-align: left;">
<text v-if="dataShowType ==1">成员</text>
<text v-if="dataShowType == 2">育成团队</text>
......@@ -25,6 +23,25 @@
<text v-if="dataShowType ==1">关系</text>
<text v-if="dataShowType == 2">数量</text>
</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>
<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> -->
......@@ -97,7 +114,9 @@
}
}
}
.tableTitle{
// padding: 0 20rpx;
}
.d-box {
display: flex;
justify-content: space-between;
......
<template>
<view class="content">
<view style="text-align: right;margin: 20rpx 40rpx;">
<view style="text-align: right;margin: 20rpx 40rpx;font-size: 28rpx;">
总合计:{{count}}
</view>
<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>
</view>
</view>
<view class="content-sam-box" v-for="pointItem in otherList">
<span class="content-box-title">{{pointItem.name}}</span>
<span class="content-box-title">{{pointItem.levelName}}</span>
<span class="content-box-title">{{pointItem.parentName}}</span>
<span class="content-box-title">{{pointItem.referrer}}</span>
<view class="content-sam-box" v-for="(pointItem,index) in otherList" :key="index">
<span class="content-box-title cell">{{pointItem.parentName}}</span>
<span class="content-box-title cell">{{pointItem.name}}</span>
<span class="content-box-title cell">{{pointItem.levelName}}</span>
<span class="content-box-title cell">{{pointItem.referrer}}</span>
</view>
<!-- <view class="">
<myteam-table :datatitleList="datatitleList" :dataList="dataList" tabletype="1" type="3"></myteam-table>
......@@ -37,7 +37,8 @@
// },
data() {
return {
datatitleList: ['成员', '职级', '上级', '关系'],
// datatitleList: ['成员', '职级', '上级', '关系'],
datatitleList: ['上级', '成员', '职级', '关系'],
dataList:[],
// dataList: [{
// title: '所属组织1',
......@@ -74,8 +75,9 @@
<style lang="scss" scoped>
.content{
height: 100%;
width: 100vw;
width: 98vw;
margin-top: 20px;
box-sizing: border-box;
}
.content-box {
......@@ -88,15 +90,19 @@
.content-box-title {
flex: 1;
font-size: 28rpx;
}
.content-sam-box{
background-color: #fff;
display: flex;
align-items: center;
font-size: 26rpx;
font-size: 24rpx;
justify-content: space-between;
padding: 10px 0;
padding: 20rpx 0;
color: #333333;
border-bottom: 1px solid #F2F2F2;;
border-bottom: 1px solid #F2F2F2;
.cell{
font-size: 24rpx;
}
}
</style>
<template>
<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> -->
<!-- tab选项 -->
<view class="tabTitle">
<text :class="{'actived': tabType===3}" @click="switchTab(3)">直辖团队</text>
<text :class="{'actived': tabType===1}" @click="switchTab(1)">所辖团队</text>
......@@ -25,8 +35,8 @@
</view>
<view class="other" v-if="tabType===3">
<other-team v-if="otherList" :otherList="otherList" :count="countOther"></other-team>
<view v-else class="zdata" style="">
<text>暂无数据!</text>
<view v-else class="zdata" >
暂无数据!
</view>
</view>
</view>
......@@ -38,6 +48,7 @@
import Members from './members.vue';
import OtherTeam from './otherteam.vue';
import Jurisdiction from './jurisdiction.vue';
import dataHandling from "@/util/dataHandling";
export default {
components: {
OtherTeam,
......@@ -55,7 +66,8 @@
directList: null, //直属团队数组
raiseList: null, //所辖团队数组
otherList: null, // 其他
levelName: null
levelName: null,
teamCount:0//团队总人数,育成团队人数不算
}
},
onLoad() {
......@@ -74,14 +86,16 @@
getmyseatem() {
api.queryMyTeamInfo({
userId: this.userId,
type: '2'
type: '1'
}).then(res =>{
if(res['success']){
let data = res.data
if(data.orgInfo) {
//this.levelName =data.orgInfo.areaCenterName;
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){
this.directList = data['directList'];
this.count = this.directList.length;
......@@ -94,6 +108,7 @@
this.raiseList = data['raiseList'];
this.countRaise = this.raiseList.length;
this.raiseList.forEach((x)=>{
x.raiseTime = dataHandling.dateFormat2(x.raiseTime)
this.$set(x, 'hasChildren', true)
this.$set(x, 'children' , [])
})
......@@ -118,7 +133,7 @@
this.tabType = type;
},
dateFormat(val) {
return dataHandling.dateFormat(val);
return dataHandling.dateFormat2(val);
}
},
}
......@@ -131,13 +146,19 @@
text-align: center;
margin-bottom: 20px;
background: #FFFFFF;
.teamHeader{
margin-top: 20rpx;
height: 90rpx;
.desTxt{
color: rgba(102, 102, 102, 1);
font-size: 25rpx;
margin-top: 3rpx;
}
}
.zuojiantou{
display: inline-block;
transform: rotate(180deg);
font-size: 30rpx;
z-index: 1;
position: absolute;
top: 20rpx;
}
.tabTitle {
color: #666666;
......@@ -146,7 +167,7 @@
align-items: center;
justify-content: space-between;
// justify-content: space-around;
padding: 80rpx 30rpx 0;
padding: 50rpx 30rpx 0;
font-size: 28rpx;
text {
......@@ -159,23 +180,29 @@
.text-ce{
margin: auto;
}
.zdata{
.zdata{
width: 100vw;
// display: flex;
// align-items: center;
// justify-content: center;
text-align: center;
margin-top: 40rpx;color: #666666;
}
font-size: 28rpx;
}
.tabContent {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 20rpx;
// padding: 0 20rpx;
box-sizing: border-box;
.direct-team {
width: 223px;
height: 40px;
opacity: 1;
border: 1px solid #3F52B7;
margin: 15px auto;
text {
color: #333;
}
......
......@@ -2,31 +2,30 @@
<view class="content">
<view class="header">
<text class="iconfont icon-youjiantou zuojiantou" @click="goBack()"></text>
<view class="header-time" style="">
<time-picker @change="change" fields="month" :icon="true">
</time-picker>
<view class="header-time" @click="openTime('start')">
<CommonTimePicker
:timeData="startDate"
:visible="showTime1"
@confirmDate="changeStartTime"
@closeTime="showTime1=false"
/>
</view>
<view style="margin: 10rpx 20rpx;">
<view style="margin: 10rpx 20rpx;font-size: 28rpx;">
<text>-</text>
</view>
<view class="header-time">
<time-picker @change="changetimeend" fields="month" :icon="true">
</time-picker>
<view class="header-time" @click="openTime('end')">
<CommonTimePicker
:timeData="endDate"
:birthDay="false"
:visible="showTime2"
@confirmDate="changeEndTime"
@closeTime="showTime2=false"
>
</CommonTimePicker>
</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 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'"
@click="ckteam(index)">
<text
......@@ -37,36 +36,38 @@
<view class="classtotal">
<view class="classtotal-box">
<span class="totalsingular">{{totalOrder || 0}}</span>
<p>总单数</p>
<p class="desTxt">总单数</p>
</view>
<view class="classtotal-box" style="width: 40%;">
<span class="totalsingular">{{totalCoursePrice || 0}}</span>
<p>总销售额</p>
<p class="desTxt">总销售额</p>
<p style="font-size: 18rpx;white-space:nowrap">温馨提示:业绩以最终核算为准</p>
</view>
<view class="classtotal-box">
<span class="totalsingular">{{totalIncome || 0}}</span>
<p>总销售收入</p>
<p class="desTxt">总销售收入</p>
</view>
</view>
<view class="team">
<view style="display: flex;">
<view class="team-a">
</view>
<text>团队排名</text>
<text style="font-size: 30rpx;">团队排名</text>
</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>
<text v-if="teListsort == true">按销售额收入排序</text>
<text v-else>按销售额排序</text>
<view class="sortBox">
<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 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>
<h4 class="noListTip" v-else>暂无数据!</h4>
</view>
......@@ -75,17 +76,23 @@
<script>
import api from "../../../api/api";
import TimePicker from '@/components/myteam/time-picker.vue';
import CommonTimePicker from '@/components/commonTimePicker/commonTimePicker.vue';
import MyteamTable from '@/components/myteam/myteam-table.vue';
import dataHandling from "@/util/dataHandling";
export default {
components: {
TimePicker,
MyteamTable
MyteamTable,
CommonTimePicker
},
data() {
return {
//datatitleList: ['姓名', '所属组织', '单数', '销售额', '销售收入'],
//teamList: ['直辖团队', '所辖团队', '其他'],
datatitleList: ['姓名', '单数', '销售额', '销售收入'],
startDate:{year:dataHandling.getDateParts().year,month:dataHandling.getDateParts().month},
endDate:{year:dataHandling.getDateParts().year,month:dataHandling.getDateParts().month},
showTime1:false,
showTime2:false,
datatitleList1: ['姓名', '单数', '销售额', '销售收入'],
datatitleList2: ['销售日期', '单数', '销售额', '销售收入'],
teamList: ['直辖团队', '所辖团队', '育成团队'],
teamtype: 0,
montdindex: 0,
......@@ -122,13 +129,62 @@
courseOrPolicy: '1',
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() {
this.getqueryTeamAchievement()
},
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(){
uni.navigateBack({
delta: 1
......@@ -169,23 +225,41 @@
if (res['success']) {
this.listType = true
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.totalCoursePrice = res.data.totalCoursePrice ? res.data.totalCoursePrice : '0';
this.totalIncome = res.data.totalIncome ? res.data.totalIncome : '0';
// this.sortswitch();
}
})
},
sortswitch() {
this.teListsort = !this.teListsort
this.dataList.sort((a, b) => {
//排序基于的数据
if (this.teListsort == false) {
return b.courseIncome - a.courseIncome;
} else {
return b.coursePrice - a.coursePrice;
sortswitch(obj) {
this.currentSort = obj.id
if(obj.id == 4){
this.CffpOrgInfoReqVO.sortType = obj.id
this.getqueryTeamAchievement()
}else{
delete this.CffpOrgInfoReqVO.sortType
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) {
this.montdindex = e.detail.value
......@@ -193,6 +267,10 @@
ckteam(e) {
this.teamtype = e
this.listType = false
this.currentSort = '1'
if(this.CffpOrgInfoReqVO?.sortType){
delete this.CffpOrgInfoReqVO.sortType
}
this.getqueryTeamAchievement()
},
// 这个是时间组件返回的时间值
......@@ -209,8 +287,14 @@
</script>
<style lang="scss" scoped>
::v-deep .uni-popup .uni-popup__wrapper{
margin: 0 !important;
}
.desTxt{
font-size: 26rpx;
}
.content {
width: 100vw;
width: 100%;
height: 100%;
}
......@@ -224,8 +308,13 @@
}
.header-time {
border: 1px solid #EFEDED;
background: rgba(245, 245, 245, 1);
padding: 10rpx 15rpx;
.timeBox{
width: 100%;
background-color: #fff;
border-radius: 10rpx 10rpx 0 0;
}
}
.content-btn {
......@@ -301,7 +390,12 @@
font-weight: 500;
line-height: 46rpx;
}
.sortBox{
display: flex;
justify-content: flex-start;
align-items: center;
margin: 20rpx 40rpx;
}
.team {
display: flex;
justify-content: space-between;
......@@ -323,16 +417,26 @@
}
.team-c {
margin-right: 30rpx;
box-sizing: border-box;
display: flex;
align-items: center;
padding: 0 10rpx;
height: 40rpx;
justify-content: flex-start;
padding: 10rpx 20rpx;
// height: 40rpx;
font-size: 28rpx;
text-align: center;
color: #FFFFFF;
background: #20269B;
// text-align: center;
color: rgba(46, 38, 29, 1);
background: rgba(247, 247, 247, 1);
border-radius: 5rpx;
opacity: 1;
&.active{
background: rgba(32, 39, 155, 1);
color: #fff;
}
}
.team-c:last-child{
margin-right: 0rpx;
}
.title {
......
......@@ -3,8 +3,7 @@
<text class="iconfont icon-youjiantou zuojiantou" @click="goBack()" style="left: 20rpx;"></text>
<view class="header">
<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=""></image>
<image :src="optionForm.headPicture ? optionForm.headPicture :companyLogo" mode="widthFix"></image>
</view>
</view>
<!-- <view class="linechart">
......@@ -12,29 +11,25 @@
</view> -->
<view class="band">
<view class="contentItem">
<!-- @keydown="handleKeyDown"
@compositionstart="isComposing = true"
@compositionend="handleCompositionEnd"
@input="handleInput" -->
<text>真实名称</text>
<text class="left">真实名称</text>
<input
class="user-input"
v-model="optionForm.realName"
type="text"
placeholder="请输入姓名"
maxlength="20"
maxlength="10"
/>
</view>
<view class="contentItem">
<text>昵称</text>
<text class="left">昵称</text>
<input class="user-input" v-model="optionForm.nickName" maxlength="10" type="text"
placeholder="请输入3~10个字符" />
</view>
<view class="contentItem">
<!-- <view class="contentItem">
<text>个人简介</text>
<textarea class="user-textarea" v-model="optionForm.userDescription" placeholder="请输入个人简介"></textarea>
</view>
</view> -->
</view>
<view class="footer">
<button class="user-button" @tap="submitinfo">保存</button>
......@@ -176,18 +171,6 @@
let that = this;
uni.showToast({title: '请填写真实姓名',duration: 2000,icon: 'none'});
this.optionForm.realName = ''
// uni.showModal({
// content: '真实姓名不合规,是否继续保存',
// confirmText: '保存',
// cancelText: '取消',
// success: function (res) {
// if (res.confirm) {
// that.saveUserInfo();
// }else{
// return;
// }
// }
// });
}else{
this.saveUserInfo();
}
......@@ -214,18 +197,21 @@
}
</script>
<style scoped>
<style scoped lang="scss">
.input-tip {
color: #ff5a5f;
font-size: 12px;
margin-left: 10px;
}
.content {
padding-top: 20rpx;
width: 100vw;
}
.user-input {
text-align: right;
padding-right: 15rpx;
flex: 1;
}
.user-textarea {
......@@ -246,16 +232,25 @@
}
.headportrait {
width: 250rpx;
height: 250rpx;
/* border: 1rpx solid aqua; */
width: 200rpx;
height: 200rpx;
border-radius: 50%;
overflow: hidden;
position: relative;
/* 添加以下属性强制硬件加速 */
transform: translateZ(0);
-webkit-transform: translateZ(0);
backface-visibility: hidden;
-webkit-backface-visibility: hidden;
}
.headportrait image {
width: 100%;
height: 100%;
border-radius: 50%;
object-fit: cover;
/* 同样为图片添加硬件加速 */
transform: translateZ(0);
-webkit-transform: translateZ(0);
}
/* .headportrait-img {
......@@ -271,6 +266,9 @@
justify-content: space-between;
border-bottom: 2rpx solid #E4E4E4;
padding: 20rpx;
.left{
width: 120rpx;
}
}
.footer {
......
<template>
<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;">
<image style="width: 60rpx;height: 60rpx;" src="../../static/tabbar/sfp_active.png" mode=""></image>
</view>
<text>SFP</text>
</view>
<view class="content-box">
</view> -->
<!-- <view class="content-box">
<view class="content" v-for="(item,index) in remList" :key="index" style="width: 50%;justify-content: center;">
<view class="">
<view class="content-box-item" @click="gotobach(item)">
......@@ -21,7 +43,7 @@
</view>
</view>
</view> -->
<!-- <tabBar :currentPage="currentPage" ></tabBar> -->
</view>
</template>
......@@ -33,6 +55,16 @@
data() {
return {
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: [
/* {
link:'',
......@@ -72,12 +104,86 @@
uni.navigateTo({
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>
<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 {
display: flex;
justify-content: center;
......
......@@ -2,7 +2,7 @@
<view class="container">
<view class="top">
<text class="iconfont icon-youjiantou zuojiantou" @click="goBack()"></text>
<text>到账说明</text>
<text style="font-size: 30rpx;">到账说明</text>
</view>
<view class="returnDetailContainer">
<h4>根据交易方式不同,退款处理时间不同,请在对应的时间内注意查看到账情况:</h4>
......
......@@ -3,11 +3,14 @@
<!-- 时间选择 -->
<view class="top">
<text class="iconfont icon-youjiantou zuojiantou" @click="goBack()" style="left: 20rpx;"></text>
<view class="timeSelectContent">
<picker mode="date" :value="queryDate" :end="maxDate" fields="month" @change="bindDateChange">
<view class="uni-input">{{queryDate}}</view>
</picker>
<i class="iconfont icon-youjiantou xiajiantou"></i>
<view class="timeSelectContent" @click="showTime1=true">
<CommonTimePicker
:timeData="startDate"
:visible="showTime1"
@confirmDate="changeStartTime"
@closeTime="showTime1=false"
/>
</view>
</view>
<!-- 销售统计 -->
......@@ -80,14 +83,18 @@
import api from "@/api/api";
import courseItem from "@/components/courseItem/courseItem.vue";
import {fmdata} from '@/util/currentDate.js'
import CommonTimePicker from '@/components/commonTimePicker/commonTimePicker.vue';
import dataHandling from "@/util/dataHandling";
export default {
components:{
courseItem
courseItem,
CommonTimePicker
},
data() {
return {
showTime1:false,
startDate:{year:dataHandling.getDateParts().year,month:dataHandling.getDateParts().month},
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}`,
userId: uni.getStorageSync('cffp_userId'),
coursesCountInfos:{},
......@@ -99,6 +106,13 @@
}
},
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(){
uni.navigateBack({
delta: 1
......@@ -116,11 +130,7 @@
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){
this.tabType = type
this.userCourseList()
......@@ -166,8 +176,11 @@
// },
// 查看积分
viewIntegral(){
// uni.navigateTo({
// url:`/pages/myPoints/myPoints`
// })
uni.navigateTo({
url:`/pages/myPoints/myPoints`
url:`/pages/pointsExchange/pointsExchange`
})
},
},
......@@ -178,6 +191,8 @@
},
onShow() {
let app22 = getCurrentPages().length
this.userCourseCount()
this.userCourseList()
}
}
</script>
......@@ -217,6 +232,7 @@
padding: 20rpx 14rpx;
display: flex;
flex-wrap: wrap;
.statisticItem{
flex: 1;
min-width: 33%;
......@@ -243,6 +259,9 @@
}
.saleDetailContent{
margin: 10rpx 20rpx;
.noListTip{
font-size: 30rpx;
}
.saleOrderInfoItem{
padding: 18rpx 0rpx 18rpx 10rpx;
border-radius: 20rpx;
......
......@@ -3,12 +3,12 @@
<view class="top">
<view class="iconfont icon-youjiantou zuojiantou" @click="goBack()">
</view>
<view style="width: 60%;text-align: right;">
<view class="commonTitle" style="width: 60%;text-align: right;">
消息列表
</view>
<view class="clear" @click="oneKeyRead()">
<text class="iconfont icon-weibiaoti544"></text>
<text>清除未读</text>
<view class="clear" @click="oneKeyRead()" >
<text class="iconfont icon-saoba myIcon" ></text>
<text>一键已读</text>
</view>
</view>
<view class="content" v-if="system_msgs_list && system_msgs_list.length > 0">
......@@ -39,19 +39,22 @@
export default{
data(){
return{
system_msgs_list:null,
system_msgs_list:[],
}
},
onLoad(){
this.querySystemMessage();
},
onShow(){
this.querySystemMessage();
},
methods:{
querySystemMessage() {
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'];
}else{
this.system_msgs_list = null;
this.system_msgs_list = [];
}
});
},
......@@ -66,26 +69,30 @@
},
goBack(){
uni.switchTab({
url:'../index/index'
// url:'../index/index',
url:'/pages/personalCenter/personalCenter'
})
},
oneKeyRead(){
if( this.system_msgs_list.length == 0){
uni.showToast({
title: '暂无可清除未读消息',
title: '暂无未读消息',
duration: 2000,
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)=>{
if(res['success']){
uni.showToast({
title: '已清除所有未读信息',
duration: 2000,
icon: 'none'
})
this.querySystemMessage();
that.querySystemMessage();
}else{
uni.showToast({
title: res['message'],
......@@ -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 @@
.clear{
display: flex;
align-items: center;
.icon-weibiaoti544{
flex-direction: column;
.myIcon{
color: #5359cd;
font-size: 50rpx;
font-size: 40rpx;
}
text:nth-child(2){
color: #999999;
......@@ -151,7 +180,7 @@
margin-bottom: 20rpx;
padding-top: 20rpx;
.title{
font-size: 40rpx;
font-size: 30rpx;
}
.date{
color: #999999;
......@@ -169,7 +198,7 @@
.announcement_des{
margin: 20rpx 0;
color: #666666;
font-size: 32rpx;
font-size: 26rpx;
}
}
.to_detail{
......
<template>
<view class="top">
<text class="iconfont icon-youjiantou zuojiantou" @click="goBack()"></text>
<text>消息详情</text>
<text class="commonTitle">消息详情</text>
</view>
<view class="announcement_detail_wrapper container">
<view class="content">
......@@ -11,7 +11,7 @@
<view class="date">
发布时间:{{systemMsgInfo.createdAt}}
</view>
<view v-html="systemMsgInfo.context"></view>
<view style="font-size: 25rpx;" v-html="systemMsgInfo.context"></view>
</view>
</view>
</template>
......@@ -81,6 +81,7 @@
margin: 20rpx 0;
border-bottom: 2rpx #F8F8F8 solid;
padding-bottom: 20rpx;
font-size: 24rpx;
}
.content{
margin-top: 20rpx;
......
<template>
<view class="">
<view class="content_wrapper">
<h4>劳务报酬税缴纳规则</h4>
<h4 style="font-size: 28rpx;">劳务报酬税缴纳规则</h4>
<view class="content">
根据国家相关法律法规,提现将由银盾家办官方代缴个税后(按劳务报酬税率计算),付款到用户的微信钱包内。 根据规则,奖实行按月累计扣税,若在当月发起多次提现,本次扣税基数将累计当月全部的提现金额。以下供参考,详细可在国家税务局查询。
根据国家相关法律法规,提现将由银盾家办公司代缴个税后(按劳务报酬税率计算),付款到用户的微信钱包/支付宝账户/银行卡内。 根据规则,将实行按月累计扣税,若在当月发起多次提现,本次扣税基数将累计当月全部的提现金额。以下内容供参考,详细内容可在国家税务局查询。
</view>
<h4 style="text-align: center;">劳务报酬所得预扣率表</h4>
<view style="color:#666;text-align: center;margin-bottom: 20rpx;">
(居民个人劳务报酬所得预预缴适用)
<h4 style="text-align: center;font-size: 28rpx;">劳务报酬所得预扣率表</h4>
<view style="color:#666;text-align: center;margin-bottom: 20rpx;font-size: 22rpx;">
(居民个人劳务报酬所得预预缴适用)
</view>
<view style="margin-bottom: 20rpx;">
<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>
......@@ -37,7 +37,19 @@
</view>
<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>
<navigator class="btn" delta="1" open-type="navigateBack">知道了</navigator>
</view>
......@@ -67,13 +79,18 @@
h4{
margin: 20rpx auto;
}
.btn{
background-color: #2A36AD;
font-size: 28rpx;
margin-bottom: 20rpx;
}
.content{
color: #666666;
font-size: 24rpx;
background: #fff;
}
.list:nth-of-type(even) .list_item{
border-right:1px solid #20269B;
border-right:1px solid #2A36AD;
}
.list:nth-of-type(odd) .list_item{
border-right:1px solid #fff;
......@@ -83,7 +100,7 @@
justify-content: space-between;
align-items: center;
font-size: 24rpx;
border: 2rpx #20269B solid;
border: 2rpx #2A36AD solid;
border-bottom: 0;
.list_item{
width: 20%;
......@@ -98,7 +115,7 @@
width: 50%;
}
.title{
background: #20269B;
background: #2A36AD;
color: #fff;
}
.list_item:nth-child(4){
......@@ -106,7 +123,7 @@
}
}
.list:last-child{
border-bottom:2rpx #20269B solid;
border-bottom:2rpx #2A36AD solid;
}
}
......
......@@ -28,10 +28,10 @@
<view class="paymentItem" @click="selectPaymentMethod(2)">
<view>
<i class="iconfont icon-zhifubao"></i>
<text>支付宝钱包</text>
<text style="font-size: 28rpx;">支付宝钱包</text>
</view>
<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>
......@@ -61,7 +61,7 @@
3、如需帮助,请联系银盾家办客服电话400-921-9290;
</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>
......@@ -157,6 +157,7 @@
if(res['success']){
uni.showModal({
content: '提现成功!',
showCancel: false, // 不显示取消按钮
success: function (res) {
if (res.confirm) {
console.log('用户点击确定');
......@@ -168,6 +169,7 @@
}else{
uni.showModal({
content: res['message'],
showCancel: false, // 不显示取消按钮
success: function (res) {
if (res.confirm) {
console.log('用户点击确定');
......@@ -332,13 +334,16 @@
}
view:nth-child(2){
font-size: 40rpx;
color: #0A2F99;
color: #2A36AD;
}
}
.content_wrapper{
background: #fff;
margin: 20rpx auto;
padding:0 30rpx;
.btn{
background-color: #2A36AD;
}
.btn.gray{
background: #666;
}
......@@ -347,6 +352,7 @@
padding: 20rpx 0;
border-bottom: 2rpx solid #F2F2F2;
justify-content: space-between;
font-size: 28rpx;
}
h4{
font-size: 32rpx;
......@@ -399,7 +405,7 @@
}
.icon-gou{
font-size: 48rpx;
color: #0A2F99;
color: #2A36AD;
}
}
......@@ -410,7 +416,7 @@
margin-bottom: 10rpx;
}
.rule{
color: #0A2F99;
color: #2A36AD
}
}
}
......
......@@ -204,9 +204,12 @@
},
methods: {
goBack(){
uni.navigateTo({
url:'/pages/product/finance-calculator'
})
uni.navigateBack({
delta: 1
});
// uni.navigateTo({
// url:'/pages/product/finance-calculator'
// })
},
init() {
this.$refs.chart.init(echarts, chart => {
......
......@@ -354,9 +354,12 @@
},
methods:{
goBack(){
uni.navigateTo({
url:'/pages/product/finance-calculator'
})
uni.navigateBack({
delta: 1
});
// uni.navigateTo({
// url:'/pages/product/finance-calculator'
// })
},
init() {
this.$refs.chart.init(echarts, chart => {
......
......@@ -257,9 +257,12 @@
},
methods: {
goBack(){
uni.navigateTo({
url:'/pages/product/finance-calculator'
})
uni.navigateBack({
delta: 1
});
// uni.navigateTo({
// url:'/pages/product/finance-calculator'
// })
},
/* checkToken(){
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